commit d4446f6fb15f49902cfb94a6a911d14a44a865d6 Author: Uncle Fatso Date: Mon Apr 28 14:03:56 2025 +0300 version 0.0.22 Signed-off-by: Uncle Fatso diff --git a/.env.template b/.env.template new file mode 100644 index 0000000..b5030ae --- /dev/null +++ b/.env.template @@ -0,0 +1,2 @@ +VITE_APP_TRACKING_ID= +VITE_APP_REFERRAL_ADDRESS= diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..438657a --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +.env + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..ec2b712 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,33 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { ignores: ['dist'] }, + { + files: ['**/*.{js,jsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...reactHooks.configs.recommended.rules, + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/index.html b/index.html new file mode 100644 index 0000000..ad4ac65 --- /dev/null +++ b/index.html @@ -0,0 +1,32 @@ + + + + + + + + + ghostDAO | The DeFi 2.0 cross-chain reserve currency + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..35fd498 --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "ghost-dao-interface", + "private": true, + "version": "0.0.22", + "type": "module", + "scripts": { + "dev": "vite", + "build": "set \"GENERATE_SOURCEMAP=false\" && vite build", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/units": "^5.8.0", + "@mui/icons-material": "^6.4.7", + "@mui/material": "^6.4.7", + "@mui/utils": "^6.4.6", + "@tanstack/react-query": "^5.67.2", + "@tanstack/react-query-devtools": "^5.67.2", + "@wagmi/core": "^2.16.7", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-ga4": "^2.1.0", + "react-helmet": "^6.1.0", + "react-hot-toast": "^2.5.2", + "react-router-dom": "^7.3.0", + "scss": "^0.2.4", + "viem": "^2.26.5", + "wagmi": "^2.14.12" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "sass-embedded": "^1.85.1", + "vite": "^6.2.0", + "vite-plugin-svgr": "^4.3.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..5f59c55 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5935 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@19.0.10)(react@19.0.0) + '@emotion/styled': + specifier: ^11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0) + '@ethersproject/address': + specifier: ^5.8.0 + version: 5.8.0 + '@ethersproject/bignumber': + specifier: ^5.8.0 + version: 5.8.0 + '@ethersproject/units': + specifier: ^5.8.0 + version: 5.8.0 + '@mui/icons-material': + specifier: ^6.4.7 + version: 6.4.7(@mui/material@6.4.7(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.10)(react@19.0.0) + '@mui/material': + specifier: ^6.4.7 + version: 6.4.7(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/utils': + specifier: ^6.4.6 + version: 6.4.6(@types/react@19.0.10)(react@19.0.0) + '@tanstack/react-query': + specifier: ^5.67.2 + version: 5.67.2(react@19.0.0) + '@tanstack/react-query-devtools': + specifier: ^5.67.2 + version: 5.67.2(@tanstack/react-query@5.67.2(react@19.0.0))(react@19.0.0) + '@wagmi/core': + specifier: ^2.16.7 + version: 2.16.7(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + react-ga4: + specifier: ^2.1.0 + version: 2.1.0 + react-helmet: + specifier: ^6.1.0 + version: 6.1.0(react@19.0.0) + react-hot-toast: + specifier: ^2.5.2 + version: 2.5.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react-router-dom: + specifier: ^7.3.0 + version: 7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + scss: + specifier: ^0.2.4 + version: 0.2.4 + viem: + specifier: ^2.26.5 + version: 2.26.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + wagmi: + specifier: ^2.14.12 + version: 2.14.12(@tanstack/query-core@5.67.2)(@tanstack/react-query@5.67.2(react@19.0.0))(@types/react@19.0.10)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(utf-8-validate@5.0.10)(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + devDependencies: + '@eslint/js': + specifier: ^9.21.0 + version: 9.21.0 + '@types/react': + specifier: ^19.0.10 + version: 19.0.10 + '@types/react-dom': + specifier: ^19.0.4 + version: 19.0.4(@types/react@19.0.10) + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1)) + eslint: + specifier: ^9.21.0 + version: 9.21.0 + eslint-plugin-react-hooks: + specifier: ^5.1.0 + version: 5.2.0(eslint@9.21.0) + eslint-plugin-react-refresh: + specifier: ^0.4.19 + version: 0.4.19(eslint@9.21.0) + globals: + specifier: ^15.15.0 + version: 15.15.0 + sass-embedded: + specifier: ^1.85.1 + version: 1.85.1 + vite: + specifier: ^6.2.0 + version: 6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1) + vite-plugin-svgr: + specifier: ^4.3.0 + version: 4.3.0(rollup@4.34.9)(vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1)) + +packages: + + '@adraffy/ens-normalize@1.11.0': + resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.26.9': + resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + + '@bufbuild/protobuf@2.2.3': + resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} + + '@coinbase/wallet-sdk@3.9.3': + resolution: {integrity: sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==} + + '@coinbase/wallet-sdk@4.3.0': + resolution: {integrity: sha512-T3+SNmiCw4HzDm4we9wCHCxlP0pqCiwKe4sOwPH3YAK2KSKjxPRydKu6UQJrdONFVLG7ujXvbd/6ZqmvJb8rkw==} + + '@ecies/ciphers@0.2.3': + resolution: {integrity: sha512-tapn6XhOueMwht3E2UzY0ZZjYokdaw9XtL9kEyjhQ/Fb9vL9xTFbOaI+fV0AWvTpYu4BNloC6getKW6NtSg4mA==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + peerDependencies: + '@noble/ciphers': ^1.0.0 + + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.3.1': + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/styled@11.14.0': + resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild/aix-ppc64@0.25.0': + resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.0': + resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.0': + resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.0': + resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.0': + resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.0': + resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.0': + resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.0': + resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.0': + resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.0': + resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.0': + resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.0': + resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.0': + resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.0': + resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.0': + resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.0': + resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.0': + resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.0': + resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.0': + resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.0': + resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.0': + resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.0': + resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.0': + resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.0': + resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.0': + resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.21.0': + resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ethereumjs/common@3.2.0': + resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==} + + '@ethereumjs/rlp@4.0.1': + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + + '@ethereumjs/tx@4.2.0': + resolution: {integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==} + engines: {node: '>=14'} + + '@ethereumjs/util@8.1.0': + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + + '@ethersproject/address@5.8.0': + resolution: {integrity: sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==} + + '@ethersproject/bignumber@5.8.0': + resolution: {integrity: sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==} + + '@ethersproject/bytes@5.8.0': + resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==} + + '@ethersproject/constants@5.8.0': + resolution: {integrity: sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==} + + '@ethersproject/keccak256@5.8.0': + resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==} + + '@ethersproject/logger@5.8.0': + resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==} + + '@ethersproject/rlp@5.8.0': + resolution: {integrity: sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==} + + '@ethersproject/units@5.8.0': + resolution: {integrity: sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@lit-labs/ssr-dom-shim@1.3.0': + resolution: {integrity: sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==} + + '@lit/reactive-element@1.6.3': + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + + '@metamask/eth-json-rpc-provider@1.0.1': + resolution: {integrity: sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA==} + engines: {node: '>=14.0.0'} + + '@metamask/json-rpc-engine@7.3.3': + resolution: {integrity: sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==} + engines: {node: '>=16.0.0'} + + '@metamask/json-rpc-engine@8.0.2': + resolution: {integrity: sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==} + engines: {node: '>=16.0.0'} + + '@metamask/json-rpc-middleware-stream@7.0.2': + resolution: {integrity: sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==} + engines: {node: '>=16.0.0'} + + '@metamask/object-multiplex@2.1.0': + resolution: {integrity: sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==} + engines: {node: ^16.20 || ^18.16 || >=20} + + '@metamask/onboarding@1.0.1': + resolution: {integrity: sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==} + + '@metamask/providers@16.1.0': + resolution: {integrity: sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==} + engines: {node: ^18.18 || >=20} + + '@metamask/rpc-errors@6.4.0': + resolution: {integrity: sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg==} + engines: {node: '>=16.0.0'} + + '@metamask/safe-event-emitter@2.0.0': + resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} + + '@metamask/safe-event-emitter@3.1.2': + resolution: {integrity: sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==} + engines: {node: '>=12.0.0'} + + '@metamask/sdk-communication-layer@0.32.0': + resolution: {integrity: sha512-dmj/KFjMi1fsdZGIOtbhxdg3amxhKL/A5BqSU4uh/SyDKPub/OT+x5pX8bGjpTL1WPWY/Q0OIlvFyX3VWnT06Q==} + peerDependencies: + cross-fetch: ^4.0.0 + eciesjs: '*' + eventemitter2: ^6.4.9 + readable-stream: ^3.6.2 + socket.io-client: ^4.5.1 + + '@metamask/sdk-install-modal-web@0.32.0': + resolution: {integrity: sha512-TFoktj0JgfWnQaL3yFkApqNwcaqJ+dw4xcnrJueMP3aXkSNev2Ido+WVNOg4IIMxnmOrfAC9t0UJ0u/dC9MjOQ==} + + '@metamask/sdk@0.32.0': + resolution: {integrity: sha512-WmGAlP1oBuD9hk4CsdlG1WJFuPtYJY+dnTHJMeCyohTWD2GgkcLMUUuvu9lO1/NVzuOoSi1OrnjbuY1O/1NZ1g==} + + '@metamask/superstruct@3.1.0': + resolution: {integrity: sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==} + engines: {node: '>=16.0.0'} + + '@metamask/utils@5.0.2': + resolution: {integrity: sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==} + engines: {node: '>=14.0.0'} + + '@metamask/utils@8.5.0': + resolution: {integrity: sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==} + engines: {node: '>=16.0.0'} + + '@metamask/utils@9.3.0': + resolution: {integrity: sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g==} + engines: {node: '>=16.0.0'} + + '@motionone/animation@10.18.0': + resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} + + '@motionone/dom@10.18.0': + resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} + + '@motionone/easing@10.18.0': + resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} + + '@motionone/generators@10.18.0': + resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} + + '@motionone/svelte@10.16.4': + resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} + + '@motionone/types@10.17.1': + resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} + + '@motionone/utils@10.18.0': + resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} + + '@motionone/vue@10.16.4': + resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} + deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion + + '@mui/core-downloads-tracker@6.4.7': + resolution: {integrity: sha512-XjJrKFNt9zAKvcnoIIBquXyFyhfrHYuttqMsoDS7lM7VwufYG4fAPw4kINjBFg++fqXM2BNAuWR9J7XVIuKIKg==} + + '@mui/icons-material@6.4.7': + resolution: {integrity: sha512-Rk8cs9ufQoLBw582Rdqq7fnSXXZTqhYRbpe1Y5SAz9lJKZP3CIdrj0PfG8HJLGw1hrsHFN/rkkm70IDzhJsG1g==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@mui/material': ^6.4.7 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/material@6.4.7': + resolution: {integrity: sha512-K65StXUeGAtFJ4ikvHKtmDCO5Ab7g0FZUu2J5VpoKD+O6Y3CjLYzRi+TMlI3kaL4CL158+FccMoOd/eaddmeRQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^6.4.7 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + + '@mui/private-theming@6.4.6': + resolution: {integrity: sha512-T5FxdPzCELuOrhpA2g4Pi6241HAxRwZudzAuL9vBvniuB5YU82HCmrARw32AuCiyTfWzbrYGGpZ4zyeqqp9RvQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/styled-engine@6.4.6': + resolution: {integrity: sha512-vSWYc9ZLX46be5gP+FCzWVn5rvDr4cXC5JBZwSIkYk9xbC7GeV+0kCvB8Q6XLFQJy+a62bbqtmdwS4Ghi9NBlQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + + '@mui/system@6.4.7': + resolution: {integrity: sha512-7wwc4++Ak6tGIooEVA9AY7FhH2p9fvBMORT4vNLMAysH3Yus/9B9RYMbrn3ANgsOyvT3Z7nE+SP8/+3FimQmcg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + + '@mui/types@7.2.21': + resolution: {integrity: sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@6.4.6': + resolution: {integrity: sha512-43nZeE1pJF2anGafNydUcYFPtHwAqiBiauRtaMvurdrZI3YrUjHkAu43RBsxef7OFtJMXGiHFvq43kb7lig0sA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@noble/ciphers@1.2.1': + resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/curves@1.8.1': + resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@1.7.1': + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} + engines: {node: ^14.21.3 || >=16} + + '@paulmillr/qr@0.2.1': + resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.34.9': + resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.9': + resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.9': + resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.9': + resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.9': + resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.9': + resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.9': + resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.9': + resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.9': + resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.9': + resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.9': + resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.9': + resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.9': + resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.9': + resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} + cpu: [x64] + os: [win32] + + '@safe-global/safe-apps-provider@0.18.5': + resolution: {integrity: sha512-9v9wjBi3TwLsEJ3C2ujYoexp3pFJ0omDLH/GX91e2QB+uwCKTBYyhxFSrTQ9qzoyQd+bfsk4gjOGW87QcJhf7g==} + + '@safe-global/safe-apps-sdk@9.1.0': + resolution: {integrity: sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q==} + + '@safe-global/safe-gateway-typescript-sdk@3.22.9': + resolution: {integrity: sha512-7ojVK/crhOaGowEO8uYWaopZzcr5rR76emgllGIfjCLR70aY4PbASpi9Pbs+7jIRzPDBBkM0RBo+zYx5UduX8Q==} + engines: {node: '>=16'} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/base@1.2.4': + resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip32@1.6.2': + resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@scure/bip39@1.5.4': + resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@stablelib/aead@1.0.1': + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + + '@stablelib/binary@1.0.1': + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + + '@stablelib/bytes@1.0.1': + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + + '@stablelib/chacha20poly1305@1.0.1': + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + + '@stablelib/chacha@1.0.1': + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + + '@stablelib/constant-time@1.0.1': + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + + '@stablelib/ed25519@1.0.3': + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + + '@stablelib/hash@1.0.1': + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + + '@stablelib/hkdf@1.0.1': + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} + + '@stablelib/hmac@1.0.1': + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + + '@stablelib/int@1.0.1': + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + + '@stablelib/keyagreement@1.0.1': + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + + '@stablelib/poly1305@1.0.1': + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + + '@stablelib/random@1.0.2': + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + + '@stablelib/sha256@1.0.1': + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + + '@stablelib/sha512@1.0.1': + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + + '@stablelib/wipe@1.0.1': + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + + '@stablelib/x25519@1.0.3': + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0': + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-svg-em-dimensions@8.0.0': + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-react-native-svg@8.1.0': + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-plugin-transform-svg-component@8.0.0': + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/babel-preset@8.1.0': + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@svgr/core@8.1.0': + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} + engines: {node: '>=14'} + + '@svgr/hast-util-to-babel-ast@8.0.0': + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} + + '@svgr/plugin-jsx@8.1.0': + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + + '@tanstack/query-core@5.67.2': + resolution: {integrity: sha512-+iaFJ/pt8TaApCk6LuZ0WHS/ECVfTzrxDOEL9HH9Dayyb5OVuomLzDXeSaI2GlGT/8HN7bDGiRXDts3LV+u6ww==} + + '@tanstack/query-devtools@5.67.2': + resolution: {integrity: sha512-O4QXFFd7xqp6EX7sdvc9tsVO8nm4lpWBqwpgjpVLW5g7IeOY6VnS/xvs/YzbRhBVkKTMaJMOUGU7NhSX+YGoNg==} + + '@tanstack/react-query-devtools@5.67.2': + resolution: {integrity: sha512-cmj2DxBc+/9btQ66n5xI8wTtAma2BLVa403K7zIYiguzJ/kV201jnGensYqJeu1Rd8uRMLLRM74jLVMLDWNRJA==} + peerDependencies: + '@tanstack/react-query': ^5.67.2 + react: ^18 || ^19 + + '@tanstack/react-query@5.67.2': + resolution: {integrity: sha512-6Sa+BVNJWhAV4QHvIqM73norNeGRWGC3ftN0Ix87cmMvI215I1wyJ44KUTt/9a0V9YimfGcg25AITaYVel71Og==} + peerDependencies: + react: ^18 || ^19 + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react-dom@19.0.4': + resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + + '@types/react@19.0.10': + resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + '@wagmi/connectors@5.7.8': + resolution: {integrity: sha512-idLCc+GQ/GcGgxakEMC7/NSbpD6r1GB07lfDyEjvI5TMzl18pOZhKiqOTENzNi3hDas6ZMvS1xaGwrWufsb1rA==} + peerDependencies: + '@wagmi/core': 2.16.5 + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + + '@wagmi/core@2.16.5': + resolution: {integrity: sha512-7WlsxIvcS2WXO/8KnIkutCfY6HACsPsEuZHoYGu2TbwM7wlJv2HmR9zSvmyeEDsTBDPva/tuFbmJo4HJ9llkWA==} + peerDependencies: + '@tanstack/query-core': '>=5.0.0' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + '@tanstack/query-core': + optional: true + typescript: + optional: true + + '@wagmi/core@2.16.7': + resolution: {integrity: sha512-Kpgrw6OXV0VBhDs4toQVKQ0NK5yUO6uxEqnvRGjNjbO85d93Gbfsp5BlxSLeWq6iVMSBFSitdl5i9W7b1miq1g==} + peerDependencies: + '@tanstack/query-core': '>=5.0.0' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + '@tanstack/query-core': + optional: true + typescript: + optional: true + + '@walletconnect/core@2.17.0': + resolution: {integrity: sha512-On+uSaCfWdsMIQsECwWHZBmUXfrnqmv6B8SXRRuTJgd8tUpEvBkLQH4X7XkSm3zW6ozEkQTCagZ2ox2YPn3kbw==} + engines: {node: '>=18'} + + '@walletconnect/environment@1.0.1': + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + + '@walletconnect/ethereum-provider@2.17.0': + resolution: {integrity: sha512-b+KTAXOb6JjoxkwpgYQQKPUcTwENGmdEdZoIDLeRicUmZTn/IQKfkMoC2frClB4YxkyoVMtj1oMV2JAax+yu9A==} + + '@walletconnect/events@1.0.1': + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} + + '@walletconnect/heartbeat@1.2.2': + resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==} + + '@walletconnect/jsonrpc-http-connection@1.0.8': + resolution: {integrity: sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==} + + '@walletconnect/jsonrpc-provider@1.0.14': + resolution: {integrity: sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==} + + '@walletconnect/jsonrpc-types@1.0.4': + resolution: {integrity: sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==} + + '@walletconnect/jsonrpc-utils@1.0.8': + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + + '@walletconnect/jsonrpc-ws-connection@1.0.14': + resolution: {integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==} + + '@walletconnect/keyvaluestorage@1.1.1': + resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} + peerDependencies: + '@react-native-async-storage/async-storage': 1.x + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + + '@walletconnect/logger@2.1.2': + resolution: {integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==} + + '@walletconnect/modal-core@2.7.0': + resolution: {integrity: sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA==} + + '@walletconnect/modal-ui@2.7.0': + resolution: {integrity: sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ==} + + '@walletconnect/modal@2.7.0': + resolution: {integrity: sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==} + + '@walletconnect/relay-api@1.0.11': + resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} + + '@walletconnect/relay-auth@1.0.4': + resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} + + '@walletconnect/safe-json@1.0.2': + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + + '@walletconnect/sign-client@2.17.0': + resolution: {integrity: sha512-sErYwvSSHQolNXni47L3Bm10ptJc1s1YoJvJd34s5E9h9+d3rj7PrhbiW9X82deN+Dm5oA8X9tC4xty1yIBrVg==} + + '@walletconnect/time@1.0.2': + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + + '@walletconnect/types@2.17.0': + resolution: {integrity: sha512-i1pn9URpvt9bcjRDkabuAmpA9K7mzyKoLJlbsAujRVX7pfaG7wur7u9Jz0bk1HxvuABL5LHNncTnVKSXKQ5jZA==} + + '@walletconnect/universal-provider@2.17.0': + resolution: {integrity: sha512-d3V5Be7AqLrvzcdMZSBS8DmGDRdqnyLk1DWmRKAGgR6ieUWykhhUKlvfeoZtvJrIXrY7rUGYpH1X41UtFkW5Pw==} + + '@walletconnect/utils@2.17.0': + resolution: {integrity: sha512-1aeQvjwsXy4Yh9G6g2eGmXrEl+BzkNjHRdCrGdMYqFTFa8ROEJfTGsSH3pLsNDlOY94CoBUvJvM55q/PMoN/FQ==} + + '@walletconnect/window-getters@1.0.1': + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} + + '@walletconnect/window-metadata@1.0.1': + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + + abitype@1.0.8: + resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + async-mutex@0.2.6: + resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001702: + resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crossws@0.3.4: + resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + eciesjs@0.4.14: + resolution: {integrity: sha512-eJAgf9pdv214Hn98FlUzclRMYWF7WfoLlkS9nWMTm1qcCwn6Ad4EGD9lr9HXMBfSrZhYQujRE+p0adPRkctC6A==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + + electron-to-chromium@1.5.113: + resolution: {integrity: sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + engine.io-client@6.6.3: + resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.19: + resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + 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} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.21.0: + resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eth-block-tracker@7.1.0: + resolution: {integrity: sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg==} + engines: {node: '>=14.0.0'} + + eth-json-rpc-filters@6.0.1: + resolution: {integrity: sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig==} + engines: {node: '>=14.0.0'} + + eth-query@2.1.2: + resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==} + + eth-rpc-errors@4.0.3: + resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + extension-port-stream@3.0.0: + resolution: {integrity: sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==} + engines: {node: '>=12.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + goober@2.1.16: + resolution: {integrity: sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==} + peerDependencies: + csstype: ^3.0.10 + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + h3@1.15.1: + resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immer@10.1.1: + resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isows@1.0.6: + resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} + peerDependencies: + ws: '*' + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-rpc-engine@6.1.0: + resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} + engines: {node: '>=10.0.0'} + + json-rpc-random-id@1.0.1: + resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + keyvaluestorage-interface@1.0.0: + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + + lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + + lit@2.8.0: + resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + mipd@0.0.7: + resolution: {integrity: sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + motion@10.16.2: + resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-mock-http@1.0.0: + resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + obj-multiplex@1.0.0: + resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + + ometa@0.2.2: + resolution: {integrity: sha512-LZuoK/yjU3FvrxPjUXUlZ1bavCfBPqauA7fsNdwi+AVhRdyk2IzgP3JRnevvjzQ6fKHdUw8YISshf53FmpHrng==} + engines: {node: '>= 0.2.0'} + + on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ox@0.6.7: + resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + ox@0.6.9: + resolution: {integrity: sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + 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-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + + pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + + pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + + pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + + pony-cause@2.1.11: + resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} + engines: {node: '>=12.0.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.26.4: + resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-compare@2.5.1: + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qrcode@1.5.3: + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} + hasBin: true + + query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-ga4@2.1.0: + resolution: {integrity: sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ==} + + react-helmet@6.1.0: + resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==} + peerDependencies: + react: '>=16.3.0' + + react-hot-toast@2.5.2: + resolution: {integrity: sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw==} + engines: {node: '>=10'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@19.0.0: + resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-router-dom@7.3.0: + resolution: {integrity: sha512-z7Q5FTiHGgQfEurX/FBinkOXhWREJIAB2RiU24lvcBa82PxUpwqvs/PAXb9lJyPjTs2jrl6UkLvCZVGJPeNuuQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.3.0: + resolution: {integrity: sha512-466f2W7HIWaNXTKM5nHTqNxLrHTyXybm7R0eBlVSt0k/u55tTCDO194OIx/NrYD4TS5SXKTNekXfT37kMKUjgw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-side-effect@2.1.2: + resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==} + peerDependencies: + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + rollup@4.34.9: + resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + sass-embedded-android-arm64@1.85.1: + resolution: {integrity: sha512-27oRheqNA3SJM2hAxpVbs7mCKUwKPWmEEhyiNFpBINb5ELVLg+Ck5RsGg+SJmo130ul5YX0vinmVB5uPWc8X5w==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.85.1: + resolution: {integrity: sha512-GkcgUGMZtEF9gheuE1dxCU0ZSAifuaFXi/aX7ZXvjtdwmTl9Zc/OHR9oiUJkc8IW9UI7H8TuwlTAA8+SwgwIeQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-ia32@1.85.1: + resolution: {integrity: sha512-f3x16NyRgtXFksIaO/xXKrUhttUBv8V0XsAR2Dhdb/yz4yrDrhzw9Wh8fmw7PlQqECcQvFaoDr3XIIM6lKzasw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + + sass-embedded-android-riscv64@1.85.1: + resolution: {integrity: sha512-IP6OijpJ8Mqo7XqCe0LsuZVbAxEFVboa0kXqqR5K55LebEplsTIA2GnmRyMay3Yr/2FVGsZbCb6Wlgkw23eCiA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.85.1: + resolution: {integrity: sha512-Mh7CA53wR3ADvXAYipFc/R3vV4PVOzoKwWzPxmq+7i8UZrtsVjKONxGtqWe9JG1mna0C9CRZAx0sv/BzbOJxWg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.85.1: + resolution: {integrity: sha512-msWxzhvcP9hqGVegxVePVEfv9mVNTlUgGr6k7O7Ihji702mbtrH/lKwF4aRkkt4g1j7tv10+JtQXmTNi/pi9kA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.85.1: + resolution: {integrity: sha512-J4UFHUiyI9Z+mwYMwz11Ky9TYr3hY1fCxeQddjNGL/+ovldtb0yAIHvoVM0BGprQDm5JqhtUk8KyJ3RMJqpaAA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.85.1: + resolution: {integrity: sha512-jGadetB03BMFG2rq3OXub/uvC/lGpbQOiLGEz3NLb2nRZWyauRhzDtvZqkr6BEhxgIWtMtz2020yD8ZJSw/r2w==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.85.1: + resolution: {integrity: sha512-X0fDh95nNSw1wfRlnkE4oscoEA5Au4nnk785s9jghPFkTBg+A+5uB6trCjf0fM22+Iw6kiP4YYmDdw3BqxAKLQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-ia32@1.85.1: + resolution: {integrity: sha512-7HlYY90d9mitDtNi5s+S+5wYZrTVbkBH2/kf7ixrzh2BFfT0YM81UHLJRnGX93y9aOMBL6DSZAIfkt1RsV9bkQ==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-arm64@1.85.1: + resolution: {integrity: sha512-FLkIT0p18XOkR6wryJ13LqGBDsrYev2dRk9dtiU18NCpNXruKsdBQ1ZnWHVKB3h1dA9lFyEEisC0sooKdNfeOQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.85.1: + resolution: {integrity: sha512-5vcdEqE8QZnu6i6shZo7x2N36V7YUoFotWj2rGekII5ty7Nkaj+VtZhUEOp9tAzEOlaFuDp5CyO1kUCvweT64A==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.85.1: + resolution: {integrity: sha512-N1093T84zQJor1yyIAdYScB5eAuQarGK1tKgZ4uTnxVlgA7Xi1lXV8Eh7ox9sDqKCaWkVQ3MjqU26vYRBeRWyw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.85.1: + resolution: {integrity: sha512-WRsZS/7qlfYXsa93FBpSruieuURIu7ySfFhzYfF1IbKrNAGwmbduutkHZh2ddm5/vQMvQ0Rdosgv+CslaQHMcw==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.85.1: + resolution: {integrity: sha512-+OlLIilA5TnP0YEqTQ8yZtkW+bJIQYvzoGoNLUEskeyeGuOiIyn2CwL6G4JQB4xZQFaxPHb7JD3EueFkQbH0Pw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.85.1: + resolution: {integrity: sha512-mKKlOwMGLN7yP1p0gB5yG/HX4fYLnpWaqstNuOOXH+fOzTaNg0+1hALg0H0CDIqypPO74M5MS9T6FAJZGdT6dQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.85.1: + resolution: {integrity: sha512-uKRTv0z8NgtHV7xSren78+yoWB79sNi7TMqI7Bxd8fcRNIgHQSA8QBdF8led2ETC004hr8h71BrY60RPO+SSvA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-win32-arm64@1.85.1: + resolution: {integrity: sha512-/GMiZXBOc6AEMBC3g25Rp+x8fq9Z6Ql7037l5rajBPhZ+DdFwtdHY0Ou3oIU6XuWUwD06U3ii4XufXVFhsP6PA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-ia32@1.85.1: + resolution: {integrity: sha512-L+4BWkKKBGFOKVQ2PQ5HwFfkM5FvTf1Xx2VSRvEWt9HxPXp6SPDho6zC8fqNQ3hSjoaoASEIJcSvgfdQYO0gdg==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + + sass-embedded-win32-x64@1.85.1: + resolution: {integrity: sha512-/FO0AGKWxVfCk4GKsC0yXWBpUZdySe3YAAbQQL0lL6xUd1OiUY8Kow6g4Kc1TB/+z0iuQKKTqI/acJMEYl4iTQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.85.1: + resolution: {integrity: sha512-0i+3h2Df/c71afluxC1SXqyyMmJlnKWfu9ZGdzwuKRM1OftEa2XM2myt5tR36CF3PanYrMjFKtRIj8PfSf838w==} + engines: {node: '>=16.0.0'} + hasBin: true + + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + scss@0.2.4: + resolution: {integrity: sha512-4u8V87F+Q/upVhUmhPnB4C1R11xojkRkWjExL2v0CX2EXTg18VrKd+9JWoeyCp2VEMdSpJsyAvVU+rVjogh51A==} + engines: {node: '>= 0.2.0'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + socket.io-client@4.8.1: + resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + 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==} + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.1.3: + resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} + engines: {node: '>=16.0.0'} + + thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + uint8arrays@3.1.0: + resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unstorage@1.15.0: + resolution: {integrity: sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-sync-external-store@1.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + valtio@1.11.2: + resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + viem@2.23.7: + resolution: {integrity: sha512-Gbyz0uE3biWDPxECrEyzILWPsnIgDREgfRMuLSWHSSnM6ktefSC/lqQNImnxESdDEixa8/6EWXjmf2H6L9VV0A==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + viem@2.26.5: + resolution: {integrity: sha512-padHks2XVeYF9B4m2ieEbzARrcGcQHMuwYrvda4jwqt93qYqPNaV3J0/nZqV8+fGRYh/HqBD+kVO5j83/IdVZg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + vite-plugin-svgr@4.3.0: + resolution: {integrity: sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==} + peerDependencies: + vite: '>=2.6.0' + + vite@6.2.1: + resolution: {integrity: sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + wagmi@2.14.12: + resolution: {integrity: sha512-HSX7CkwF7YWecV5EqcOQrHUSGqZ+f8GJ8FWRYktVcxitfaAd0YofwfJNJB+zEsV17hV6uZ5Tu1nP32tgz+1eTQ==} + peerDependencies: + '@tanstack/react-query': '>=5.0.0' + react: '>=18' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + + webextension-polyfill@0.10.0: + resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xmlhttprequest-ssl@2.1.2: + resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} + engines: {node: '>=0.4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zustand@5.0.0: + resolution: {integrity: sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + +snapshots: + + '@adraffy/ens-normalize@1.11.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/runtime@7.26.9': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bufbuild/protobuf@2.2.3': {} + + '@coinbase/wallet-sdk@3.9.3': + dependencies: + bn.js: 5.2.1 + buffer: 6.0.3 + clsx: 1.2.1 + eth-block-tracker: 7.1.0 + eth-json-rpc-filters: 6.0.1 + eventemitter3: 5.0.1 + keccak: 3.0.4 + preact: 10.26.4 + sha.js: 2.4.11 + transitivePeerDependencies: + - supports-color + + '@coinbase/wallet-sdk@4.3.0': + dependencies: + '@noble/hashes': 1.7.1 + clsx: 1.2.1 + eventemitter3: 5.0.1 + preact: 10.26.4 + + '@ecies/ciphers@0.2.3(@noble/ciphers@1.2.1)': + dependencies: + '@noble/ciphers': 1.2.1 + + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.9 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + 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 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.3.1': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.10 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.14.0(@types/react@19.0.10)(react@19.0.0) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/utils': 1.4.2 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.10 + transitivePeerDependencies: + - supports-color + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.0.0)': + dependencies: + react: 19.0.0 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild/aix-ppc64@0.25.0': + optional: true + + '@esbuild/android-arm64@0.25.0': + optional: true + + '@esbuild/android-arm@0.25.0': + optional: true + + '@esbuild/android-x64@0.25.0': + optional: true + + '@esbuild/darwin-arm64@0.25.0': + optional: true + + '@esbuild/darwin-x64@0.25.0': + optional: true + + '@esbuild/freebsd-arm64@0.25.0': + optional: true + + '@esbuild/freebsd-x64@0.25.0': + optional: true + + '@esbuild/linux-arm64@0.25.0': + optional: true + + '@esbuild/linux-arm@0.25.0': + optional: true + + '@esbuild/linux-ia32@0.25.0': + optional: true + + '@esbuild/linux-loong64@0.25.0': + optional: true + + '@esbuild/linux-mips64el@0.25.0': + optional: true + + '@esbuild/linux-ppc64@0.25.0': + optional: true + + '@esbuild/linux-riscv64@0.25.0': + optional: true + + '@esbuild/linux-s390x@0.25.0': + optional: true + + '@esbuild/linux-x64@0.25.0': + optional: true + + '@esbuild/netbsd-arm64@0.25.0': + optional: true + + '@esbuild/netbsd-x64@0.25.0': + optional: true + + '@esbuild/openbsd-arm64@0.25.0': + optional: true + + '@esbuild/openbsd-x64@0.25.0': + optional: true + + '@esbuild/sunos-x64@0.25.0': + optional: true + + '@esbuild/win32-arm64@0.25.0': + optional: true + + '@esbuild/win32-ia32@0.25.0': + optional: true + + '@esbuild/win32-x64@0.25.0': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)': + dependencies: + eslint: 9.21.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.21.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.7': + dependencies: + '@eslint/core': 0.12.0 + levn: 0.4.1 + + '@ethereumjs/common@3.2.0': + dependencies: + '@ethereumjs/util': 8.1.0 + crc-32: 1.2.2 + + '@ethereumjs/rlp@4.0.1': {} + + '@ethereumjs/tx@4.2.0': + dependencies: + '@ethereumjs/common': 3.2.0 + '@ethereumjs/rlp': 4.0.1 + '@ethereumjs/util': 8.1.0 + ethereum-cryptography: 2.2.1 + + '@ethereumjs/util@8.1.0': + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.2.1 + micro-ftch: 0.3.1 + + '@ethersproject/address@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp': 5.8.0 + + '@ethersproject/bignumber@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/constants@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + + '@ethersproject/keccak256@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.8.0': {} + + '@ethersproject/rlp@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/units@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@lit-labs/ssr-dom-shim@1.3.0': {} + + '@lit/reactive-element@1.6.3': + dependencies: + '@lit-labs/ssr-dom-shim': 1.3.0 + + '@metamask/eth-json-rpc-provider@1.0.1': + dependencies: + '@metamask/json-rpc-engine': 7.3.3 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 5.0.2 + transitivePeerDependencies: + - supports-color + + '@metamask/json-rpc-engine@7.3.3': + dependencies: + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + transitivePeerDependencies: + - supports-color + + '@metamask/json-rpc-engine@8.0.2': + dependencies: + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + transitivePeerDependencies: + - supports-color + + '@metamask/json-rpc-middleware-stream@7.0.2': + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + readable-stream: 3.6.2 + transitivePeerDependencies: + - supports-color + + '@metamask/object-multiplex@2.1.0': + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + + '@metamask/onboarding@1.0.1': + dependencies: + bowser: 2.11.0 + + '@metamask/providers@16.1.0': + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/json-rpc-middleware-stream': 7.0.2 + '@metamask/object-multiplex': 2.1.0 + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + detect-browser: 5.3.0 + extension-port-stream: 3.0.0 + fast-deep-equal: 3.1.3 + is-stream: 2.0.1 + readable-stream: 3.6.2 + webextension-polyfill: 0.10.0 + transitivePeerDependencies: + - supports-color + + '@metamask/rpc-errors@6.4.0': + dependencies: + '@metamask/utils': 9.3.0 + fast-safe-stringify: 2.1.1 + transitivePeerDependencies: + - supports-color + + '@metamask/safe-event-emitter@2.0.0': {} + + '@metamask/safe-event-emitter@3.1.2': {} + + '@metamask/sdk-communication-layer@0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.14)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + bufferutil: 4.0.9 + cross-fetch: 4.1.0 + date-fns: 2.30.0 + debug: 4.4.0 + eciesjs: 0.4.14 + eventemitter2: 6.4.9 + readable-stream: 3.6.2 + socket.io-client: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + utf-8-validate: 5.0.10 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + + '@metamask/sdk-install-modal-web@0.32.0': + dependencies: + '@paulmillr/qr': 0.2.1 + + '@metamask/sdk@0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.26.9 + '@metamask/onboarding': 1.0.1 + '@metamask/providers': 16.1.0 + '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.14)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metamask/sdk-install-modal-web': 0.32.0 + '@paulmillr/qr': 0.2.1 + bowser: 2.11.0 + cross-fetch: 4.1.0 + debug: 4.4.0 + eciesjs: 0.4.14 + eth-rpc-errors: 4.0.3 + eventemitter2: 6.4.9 + obj-multiplex: 1.0.0 + pump: 3.0.2 + readable-stream: 3.6.2 + socket.io-client: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + tslib: 2.8.1 + util: 0.12.5 + uuid: 8.3.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@metamask/superstruct@3.1.0': {} + + '@metamask/utils@5.0.2': + dependencies: + '@ethereumjs/tx': 4.2.0 + '@types/debug': 4.1.12 + debug: 4.4.0 + semver: 7.7.1 + superstruct: 1.0.4 + transitivePeerDependencies: + - supports-color + + '@metamask/utils@8.5.0': + dependencies: + '@ethereumjs/tx': 4.2.0 + '@metamask/superstruct': 3.1.0 + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + '@types/debug': 4.1.12 + debug: 4.4.0 + pony-cause: 2.1.11 + semver: 7.7.1 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + + '@metamask/utils@9.3.0': + dependencies: + '@ethereumjs/tx': 4.2.0 + '@metamask/superstruct': 3.1.0 + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + '@types/debug': 4.1.12 + debug: 4.4.0 + pony-cause: 2.1.11 + semver: 7.7.1 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + + '@motionone/animation@10.18.0': + dependencies: + '@motionone/easing': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.8.1 + + '@motionone/dom@10.18.0': + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/generators': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + hey-listen: 1.0.8 + tslib: 2.8.1 + + '@motionone/easing@10.18.0': + dependencies: + '@motionone/utils': 10.18.0 + tslib: 2.8.1 + + '@motionone/generators@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.8.1 + + '@motionone/svelte@10.16.4': + dependencies: + '@motionone/dom': 10.18.0 + tslib: 2.8.1 + + '@motionone/types@10.17.1': {} + + '@motionone/utils@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + hey-listen: 1.0.8 + tslib: 2.8.1 + + '@motionone/vue@10.16.4': + dependencies: + '@motionone/dom': 10.18.0 + tslib: 2.8.1 + + '@mui/core-downloads-tracker@6.4.7': {} + + '@mui/icons-material@6.4.7(@mui/material@6.4.7(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@mui/material': 6.4.7(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.10 + + '@mui/material@6.4.7(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@mui/core-downloads-tracker': 6.4.7 + '@mui/system': 6.4.7(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.10) + '@mui/utils': 6.4.6(@types/react@19.0.10)(react@19.0.0) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.12(@types/react@19.0.10) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-is: 19.0.0 + react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.10)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0) + '@types/react': 19.0.10 + + '@mui/private-theming@6.4.6(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@mui/utils': 6.4.6(@types/react@19.0.10)(react@19.0.0) + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.10 + + '@mui/styled-engine@6.4.6(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.10)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0) + + '@mui/system@6.4.7(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@mui/private-theming': 6.4.6(@types/react@19.0.10)(react@19.0.0) + '@mui/styled-engine': 6.4.6(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0))(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.10) + '@mui/utils': 6.4.6(@types/react@19.0.10)(react@19.0.0) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.10)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.10)(react@19.0.0))(@types/react@19.0.10)(react@19.0.0) + '@types/react': 19.0.10 + + '@mui/types@7.2.21(@types/react@19.0.10)': + optionalDependencies: + '@types/react': 19.0.10 + + '@mui/utils@6.4.6(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.9 + '@mui/types': 7.2.21(@types/react@19.0.10) + '@types/prop-types': 15.7.14 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-is: 19.0.0 + optionalDependencies: + '@types/react': 19.0.10 + + '@noble/ciphers@1.2.1': {} + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/curves@1.8.1': + dependencies: + '@noble/hashes': 1.7.1 + + '@noble/hashes@1.4.0': {} + + '@noble/hashes@1.7.1': {} + + '@paulmillr/qr@0.2.1': {} + + '@popperjs/core@2.11.8': {} + + '@rollup/pluginutils@5.1.4(rollup@4.34.9)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.34.9 + + '@rollup/rollup-android-arm-eabi@4.34.9': + optional: true + + '@rollup/rollup-android-arm64@4.34.9': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.9': + optional: true + + '@rollup/rollup-darwin-x64@4.34.9': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.9': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.9': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.9': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.9': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.9': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.9': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.9': + optional: true + + '@safe-global/safe-apps-provider@0.18.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.22.9 + viem: 2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@safe-global/safe-gateway-typescript-sdk@3.22.9': {} + + '@scure/base@1.1.9': {} + + '@scure/base@1.2.4': {} + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip32@1.6.2': + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.5.4': + dependencies: + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + + '@socket.io/component-emitter@3.1.2': {} + + '@stablelib/aead@1.0.1': {} + + '@stablelib/binary@1.0.1': + dependencies: + '@stablelib/int': 1.0.1 + + '@stablelib/bytes@1.0.1': {} + + '@stablelib/chacha20poly1305@1.0.1': + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/chacha@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/constant-time@1.0.1': {} + + '@stablelib/ed25519@1.0.3': + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hash@1.0.1': {} + + '@stablelib/hkdf@1.0.1': + dependencies: + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hmac@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/int@1.0.1': {} + + '@stablelib/keyagreement@1.0.1': + dependencies: + '@stablelib/bytes': 1.0.1 + + '@stablelib/poly1305@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/random@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha256@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha512@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/wipe@1.0.1': {} + + '@stablelib/x25519@1.0.3': + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@svgr/babel-preset@8.1.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.9) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.9) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.9) + + '@svgr/core@8.1.0': + dependencies: + '@babel/core': 7.26.9 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.9) + camelcase: 6.3.0 + cosmiconfig: 8.3.6 + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@svgr/hast-util-to-babel-ast@8.0.0': + dependencies: + '@babel/types': 7.26.9 + entities: 4.5.0 + + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0)': + dependencies: + '@babel/core': 7.26.9 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.9) + '@svgr/core': 8.1.0 + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + + '@tanstack/query-core@5.67.2': {} + + '@tanstack/query-devtools@5.67.2': {} + + '@tanstack/react-query-devtools@5.67.2(@tanstack/react-query@5.67.2(react@19.0.0))(react@19.0.0)': + dependencies: + '@tanstack/query-devtools': 5.67.2 + '@tanstack/react-query': 5.67.2(react@19.0.0) + react: 19.0.0 + + '@tanstack/react-query@5.67.2(react@19.0.0)': + dependencies: + '@tanstack/query-core': 5.67.2 + react: 19.0.0 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.9 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.9 + + '@types/cookie@0.6.0': {} + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/ms@2.1.0': {} + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + optional: true + + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.14': {} + + '@types/react-dom@19.0.4(@types/react@19.0.10)': + dependencies: + '@types/react': 19.0.10 + + '@types/react-transition-group@4.4.12(@types/react@19.0.10)': + dependencies: + '@types/react': 19.0.10 + + '@types/react@19.0.10': + dependencies: + csstype: 3.1.3 + + '@types/trusted-types@2.0.7': {} + + '@vitejs/plugin-react@4.3.4(vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1))': + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1) + transitivePeerDependencies: + - supports-color + + '@wagmi/connectors@5.7.8(@types/react@19.0.10)(@wagmi/core@2.16.5(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@coinbase/wallet-sdk': 4.3.0 + '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@wagmi/core': 2.16.5(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@walletconnect/ethereum-provider': 2.17.0(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10) + cbw-sdk: '@coinbase/wallet-sdk@3.9.3' + viem: 2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - supports-color + - uploadthing + - utf-8-validate + - zod + + '@wagmi/core@2.16.5(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7 + viem: 2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) + zustand: 5.0.0(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) + optionalDependencies: + '@tanstack/query-core': 5.67.2 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@wagmi/core@2.16.7(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7 + viem: 2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) + zustand: 5.0.0(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) + optionalDependencies: + '@tanstack/query-core': 5.67.2 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@walletconnect/core@2.17.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.14(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.0 + '@walletconnect/utils': 2.17.0 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/environment@1.0.1': + dependencies: + tslib: 1.14.1 + + '@walletconnect/ethereum-provider@2.17.0(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/modal': 2.7.0(@types/react@19.0.10)(react@19.0.0) + '@walletconnect/sign-client': 2.17.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.17.0 + '@walletconnect/universal-provider': 2.17.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.17.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - uploadthing + - utf-8-validate + + '@walletconnect/events@1.0.1': + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + + '@walletconnect/heartbeat@1.2.2': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + events: 3.3.0 + + '@walletconnect/jsonrpc-http-connection@1.0.8': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.2.0 + events: 3.3.0 + transitivePeerDependencies: + - encoding + + '@walletconnect/jsonrpc-provider@1.0.14': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + + '@walletconnect/jsonrpc-types@1.0.4': + dependencies: + events: 3.3.0 + keyvaluestorage-interface: 1.0.0 + + '@walletconnect/jsonrpc-utils@1.0.8': + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.4 + tslib: 1.14.1 + + '@walletconnect/jsonrpc-ws-connection@1.0.14(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@walletconnect/keyvaluestorage@1.1.1': + dependencies: + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.1 + unstorage: 1.15.0(idb-keyval@6.2.1) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/logger@2.1.2': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 7.11.0 + + '@walletconnect/modal-core@2.7.0(@types/react@19.0.10)(react@19.0.0)': + dependencies: + valtio: 1.11.2(@types/react@19.0.10)(react@19.0.0) + transitivePeerDependencies: + - '@types/react' + - react + + '@walletconnect/modal-ui@2.7.0(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@walletconnect/modal-core': 2.7.0(@types/react@19.0.10)(react@19.0.0) + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@types/react' + - react + + '@walletconnect/modal@2.7.0(@types/react@19.0.10)(react@19.0.0)': + dependencies: + '@walletconnect/modal-core': 2.7.0(@types/react@19.0.10)(react@19.0.0) + '@walletconnect/modal-ui': 2.7.0(@types/react@19.0.10)(react@19.0.0) + transitivePeerDependencies: + - '@types/react' + - react + + '@walletconnect/relay-api@1.0.11': + dependencies: + '@walletconnect/jsonrpc-types': 1.0.4 + + '@walletconnect/relay-auth@1.0.4': + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + uint8arrays: 3.1.0 + + '@walletconnect/safe-json@1.0.2': + dependencies: + tslib: 1.14.1 + + '@walletconnect/sign-client@2.17.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.17.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.0 + '@walletconnect/utils': 2.17.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/time@1.0.2': + dependencies: + tslib: 1.14.1 + + '@walletconnect/types@2.17.0': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/universal-provider@2.17.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.17.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.17.0 + '@walletconnect/utils': 2.17.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/utils@2.17.0': + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.0 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + elliptic: 6.6.1 + query-string: 7.1.3 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/window-getters@1.0.1': + dependencies: + tslib: 1.14.1 + + '@walletconnect/window-metadata@1.0.1': + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + + abitype@1.0.8: {} + + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + ajv@6.12.6: + 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 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + async-mutex@0.2.6: + dependencies: + tslib: 2.8.1 + + atomic-sleep@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.26.9 + cosmiconfig: 7.1.0 + resolve: 1.22.10 + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bn.js@4.12.1: {} + + bn.js@5.2.1: {} + + bowser@2.11.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brorand@1.1.0: {} + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001702 + electron-to-chromium: 1.5.113 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + buffer-builder@0.2.0: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001702: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + clsx@1.2.1: {} + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorjs.io@0.5.2: {} + + concat-map@0.0.1: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + cookie-es@1.2.2: {} + + cookie@1.0.2: {} + + core-util-is@1.0.3: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cosmiconfig@8.3.6: + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + + crc-32@1.2.2: {} + + cross-fetch@3.2.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + cross-fetch@4.1.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crossws@0.3.4: + dependencies: + uncrypto: 0.1.3 + + csstype@3.1.3: {} + + date-fns@2.30.0: + dependencies: + '@babel/runtime': 7.26.9 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decamelize@1.2.0: {} + + decode-uri-component@0.2.2: {} + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + defu@6.1.4: {} + + destr@2.0.3: {} + + detect-browser@5.3.0: {} + + dijkstrajs@1.0.3: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.26.9 + csstype: 3.1.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + + eciesjs@0.4.14: + dependencies: + '@ecies/ciphers': 0.2.3(@noble/ciphers@1.2.1) + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + + electron-to-chromium@1.5.113: {} + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.1 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + encode-utf8@1.0.3: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + engine.io-client@6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + xmlhttprequest-ssl: 2.1.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + engine.io-parser@5.2.3: {} + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + esbuild@0.25.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.0 + '@esbuild/android-arm': 0.25.0 + '@esbuild/android-arm64': 0.25.0 + '@esbuild/android-x64': 0.25.0 + '@esbuild/darwin-arm64': 0.25.0 + '@esbuild/darwin-x64': 0.25.0 + '@esbuild/freebsd-arm64': 0.25.0 + '@esbuild/freebsd-x64': 0.25.0 + '@esbuild/linux-arm': 0.25.0 + '@esbuild/linux-arm64': 0.25.0 + '@esbuild/linux-ia32': 0.25.0 + '@esbuild/linux-loong64': 0.25.0 + '@esbuild/linux-mips64el': 0.25.0 + '@esbuild/linux-ppc64': 0.25.0 + '@esbuild/linux-riscv64': 0.25.0 + '@esbuild/linux-s390x': 0.25.0 + '@esbuild/linux-x64': 0.25.0 + '@esbuild/netbsd-arm64': 0.25.0 + '@esbuild/netbsd-x64': 0.25.0 + '@esbuild/openbsd-arm64': 0.25.0 + '@esbuild/openbsd-x64': 0.25.0 + '@esbuild/sunos-x64': 0.25.0 + '@esbuild/win32-arm64': 0.25.0 + '@esbuild/win32-ia32': 0.25.0 + '@esbuild/win32-x64': 0.25.0 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.21.0): + dependencies: + eslint: 9.21.0 + + eslint-plugin-react-refresh@0.4.19(eslint@9.21.0): + dependencies: + eslint: 9.21.0 + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.21.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.21.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + eth-block-tracker@7.1.0: + dependencies: + '@metamask/eth-json-rpc-provider': 1.0.1 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 5.0.2 + json-rpc-random-id: 1.0.1 + pify: 3.0.0 + transitivePeerDependencies: + - supports-color + + eth-json-rpc-filters@6.0.1: + dependencies: + '@metamask/safe-event-emitter': 3.1.2 + async-mutex: 0.2.6 + eth-query: 2.1.2 + json-rpc-engine: 6.1.0 + pify: 5.0.0 + + eth-query@2.1.2: + dependencies: + json-rpc-random-id: 1.0.1 + xtend: 4.0.2 + + eth-rpc-errors@4.0.3: + dependencies: + fast-safe-stringify: 2.1.1 + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + eventemitter2@6.4.9: {} + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + extension-port-stream@3.0.0: + dependencies: + readable-stream: 3.6.2 + webextension-polyfill: 0.10.0 + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filter-obj@1.1.0: {} + + find-root@1.1.0: {} + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.15.0: {} + + goober@2.1.16(csstype@3.1.3): + dependencies: + csstype: 3.1.3 + + gopd@1.2.0: {} + + h3@1.15.1: + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.4 + defu: 6.1.4 + destr: 2.0.3 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.0 + radix3: 1.1.2 + ufo: 1.5.4 + uncrypto: 0.1.3 + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hey-listen@1.0.8: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + idb-keyval@6.2.1: {} + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + immer@10.1.1: + optional: true + + immutable@5.0.3: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inherits@2.0.4: {} + + iron-webcrypto@1.2.1: {} + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-arrayish@0.2.1: {} + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-stream@2.0.1: {} + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.18 + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isows@1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isows@1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + js-sha3@0.8.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-rpc-engine@6.1.0: + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + eth-rpc-errors: 4.0.3 + + json-rpc-random-id@1.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + keyvaluestorage-interface@1.0.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + lit-element@3.3.3: + dependencies: + '@lit-labs/ssr-dom-shim': 1.3.0 + '@lit/reactive-element': 1.6.3 + lit-html: 2.8.0 + + lit-html@2.8.0: + dependencies: + '@types/trusted-types': 2.0.7 + + lit@2.8.0: + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.isequal@4.5.0: {} + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + math-intrinsics@1.1.0: {} + + micro-ftch@0.3.1: {} + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + mipd@0.0.7: {} + + motion@10.16.2: + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/dom': 10.18.0 + '@motionone/svelte': 10.16.4 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + '@motionone/vue': 10.16.4 + + ms@2.1.3: {} + + multiformats@9.9.0: {} + + nanoid@3.3.8: {} + + natural-compare@1.4.0: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-addon-api@2.0.2: {} + + node-fetch-native@1.6.6: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.4: {} + + node-mock-http@1.0.0: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + obj-multiplex@1.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + readable-stream: 2.3.8 + + object-assign@4.1.1: {} + + ofetch@1.4.1: + dependencies: + destr: 2.0.3 + node-fetch-native: 1.6.6 + ufo: 1.5.4 + + ometa@0.2.2: {} + + on-exit-leak-free@0.2.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ox@0.6.7: + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8 + eventemitter3: 5.0.1 + transitivePeerDependencies: + - zod + + ox@0.6.9: + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8 + eventemitter3: 5.0.1 + transitivePeerDependencies: + - zod + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@3.0.0: {} + + pify@5.0.0: {} + + pino-abstract-transport@0.5.0: + dependencies: + duplexify: 4.1.3 + split2: 4.2.0 + + pino-std-serializers@4.0.0: {} + + pino@7.11.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pino-std-serializers: 4.0.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.1.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 + + pngjs@5.0.0: {} + + pony-cause@2.1.11: {} + + possible-typed-array-names@1.1.0: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.26.4: {} + + prelude-ls@1.2.1: {} + + process-nextick-args@2.0.1: {} + + process-warning@1.0.0: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-compare@2.5.1: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + qrcode@1.5.3: + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + + query-string@7.1.3: + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + + quick-format-unescaped@4.0.4: {} + + radix3@1.1.2: {} + + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + + react-fast-compare@3.2.2: {} + + react-ga4@2.1.0: {} + + react-helmet@6.1.0(react@19.0.0): + dependencies: + object-assign: 4.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-fast-compare: 3.2.2 + react-side-effect: 2.1.2(react@19.0.0) + + react-hot-toast@2.5.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + csstype: 3.1.3 + goober: 2.1.16(csstype@3.1.3) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + react-is@16.13.1: {} + + react-is@19.0.0: {} + + react-refresh@0.14.2: {} + + react-router-dom@7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-router: 7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + + react-router@7.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@types/cookie': 0.6.0 + cookie: 1.0.2 + react: 19.0.0 + set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 19.0.0(react@19.0.0) + + react-side-effect@2.1.2(react@19.0.0): + dependencies: + react: 19.0.0 + + react-transition-group@4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@babel/runtime': 7.26.9 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + react@19.0.0: {} + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@4.1.2: {} + + real-require@0.1.0: {} + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + require-main-filename@2.0.0: {} + + resolve-from@4.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + rollup@4.34.9: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.9 + '@rollup/rollup-android-arm64': 4.34.9 + '@rollup/rollup-darwin-arm64': 4.34.9 + '@rollup/rollup-darwin-x64': 4.34.9 + '@rollup/rollup-freebsd-arm64': 4.34.9 + '@rollup/rollup-freebsd-x64': 4.34.9 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 + '@rollup/rollup-linux-arm-musleabihf': 4.34.9 + '@rollup/rollup-linux-arm64-gnu': 4.34.9 + '@rollup/rollup-linux-arm64-musl': 4.34.9 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 + '@rollup/rollup-linux-riscv64-gnu': 4.34.9 + '@rollup/rollup-linux-s390x-gnu': 4.34.9 + '@rollup/rollup-linux-x64-gnu': 4.34.9 + '@rollup/rollup-linux-x64-musl': 4.34.9 + '@rollup/rollup-win32-arm64-msvc': 4.34.9 + '@rollup/rollup-win32-ia32-msvc': 4.34.9 + '@rollup/rollup-win32-x64-msvc': 4.34.9 + fsevents: 2.3.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-stable-stringify@2.5.0: {} + + sass-embedded-android-arm64@1.85.1: + optional: true + + sass-embedded-android-arm@1.85.1: + optional: true + + sass-embedded-android-ia32@1.85.1: + optional: true + + sass-embedded-android-riscv64@1.85.1: + optional: true + + sass-embedded-android-x64@1.85.1: + optional: true + + sass-embedded-darwin-arm64@1.85.1: + optional: true + + sass-embedded-darwin-x64@1.85.1: + optional: true + + sass-embedded-linux-arm64@1.85.1: + optional: true + + sass-embedded-linux-arm@1.85.1: + optional: true + + sass-embedded-linux-ia32@1.85.1: + optional: true + + sass-embedded-linux-musl-arm64@1.85.1: + optional: true + + sass-embedded-linux-musl-arm@1.85.1: + optional: true + + sass-embedded-linux-musl-ia32@1.85.1: + optional: true + + sass-embedded-linux-musl-riscv64@1.85.1: + optional: true + + sass-embedded-linux-musl-x64@1.85.1: + optional: true + + sass-embedded-linux-riscv64@1.85.1: + optional: true + + sass-embedded-linux-x64@1.85.1: + optional: true + + sass-embedded-win32-arm64@1.85.1: + optional: true + + sass-embedded-win32-ia32@1.85.1: + optional: true + + sass-embedded-win32-x64@1.85.1: + optional: true + + sass-embedded@1.85.1: + dependencies: + '@bufbuild/protobuf': 2.2.3 + buffer-builder: 0.2.0 + colorjs.io: 0.5.2 + immutable: 5.0.3 + rxjs: 7.8.2 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-android-arm: 1.85.1 + sass-embedded-android-arm64: 1.85.1 + sass-embedded-android-ia32: 1.85.1 + sass-embedded-android-riscv64: 1.85.1 + sass-embedded-android-x64: 1.85.1 + sass-embedded-darwin-arm64: 1.85.1 + sass-embedded-darwin-x64: 1.85.1 + sass-embedded-linux-arm: 1.85.1 + sass-embedded-linux-arm64: 1.85.1 + sass-embedded-linux-ia32: 1.85.1 + sass-embedded-linux-musl-arm: 1.85.1 + sass-embedded-linux-musl-arm64: 1.85.1 + sass-embedded-linux-musl-ia32: 1.85.1 + sass-embedded-linux-musl-riscv64: 1.85.1 + sass-embedded-linux-musl-x64: 1.85.1 + sass-embedded-linux-riscv64: 1.85.1 + sass-embedded-linux-x64: 1.85.1 + sass-embedded-win32-arm64: 1.85.1 + sass-embedded-win32-ia32: 1.85.1 + sass-embedded-win32-x64: 1.85.1 + + scheduler@0.25.0: {} + + scss@0.2.4: + dependencies: + ometa: 0.2.2 + + semver@6.3.1: {} + + semver@7.7.1: {} + + set-blocking@2.0.0: {} + + set-cookie-parser@2.7.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-client: 6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + sonic-boom@2.8.0: + dependencies: + atomic-sleep: 1.0.0 + + source-map-js@1.2.1: {} + + source-map@0.5.7: {} + + split-on-first@1.1.0: {} + + split2@4.2.0: {} + + stream-shift@1.0.3: {} + + strict-uri-encode@2.0.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + stylis@4.2.0: {} + + superstruct@1.0.4: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-parser@2.0.4: {} + + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.1.3 + + sync-message-port@1.1.3: {} + + thread-stream@0.15.2: + dependencies: + real-require: 0.1.0 + + tr46@0.0.3: {} + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + turbo-stream@2.4.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + ufo@1.5.4: {} + + uint8arrays@3.1.0: + dependencies: + multiformats: 9.9.0 + + uncrypto@0.1.3: {} + + undici-types@6.19.8: + optional: true + + unstorage@1.15.0(idb-keyval@6.2.1): + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.3 + h3: 1.15.1 + lru-cache: 10.4.3 + node-fetch-native: 1.6.6 + ofetch: 1.4.1 + ufo: 1.5.4 + optionalDependencies: + idb-keyval: 6.2.1 + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-sync-external-store@1.2.0(react@19.0.0): + dependencies: + react: 19.0.0 + + use-sync-external-store@1.4.0(react@19.0.0): + dependencies: + react: 19.0.0 + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + + util-deprecate@1.0.2: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.18 + + uuid@8.3.2: {} + + uuid@9.0.1: {} + + valtio@1.11.2(@types/react@19.0.10)(react@19.0.0): + dependencies: + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.10 + react: 19.0.0 + + varint@6.0.0: {} + + viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8 + isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.6.7 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.26.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8 + isows: 1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.6.9 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + vite-plugin-svgr@4.3.0(rollup@4.34.9)(vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1)): + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.34.9) + '@svgr/core': 8.1.0 + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) + vite: 6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1) + transitivePeerDependencies: + - rollup + - supports-color + - typescript + + vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1): + dependencies: + esbuild: 0.25.0 + postcss: 8.5.3 + rollup: 4.34.9 + optionalDependencies: + '@types/node': 22.7.5 + fsevents: 2.3.3 + sass-embedded: 1.85.1 + + wagmi@2.14.12(@tanstack/query-core@5.67.2)(@tanstack/react-query@5.67.2(react@19.0.0))(@types/react@19.0.10)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(utf-8-validate@5.0.10)(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + '@tanstack/react-query': 5.67.2(react@19.0.0) + '@wagmi/connectors': 5.7.8(@types/react@19.0.10)(@wagmi/core@2.16.5(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.16.5(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + react: 19.0.0 + use-sync-external-store: 1.4.0(react@19.0.0) + viem: 2.23.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - supports-color + - uploadthing + - utf-8-validate + - zod + + webextension-polyfill@0.10.0: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-module@2.0.1: {} + + which-typed-array@1.1.18: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + xmlhttprequest-ssl@2.1.2: {} + + xtend@4.0.2: {} + + y18n@4.0.3: {} + + yallist@3.1.1: {} + + yaml@1.10.2: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + yocto-queue@0.1.0: {} + + zustand@5.0.0(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)): + optionalDependencies: + '@types/react': 19.0.10 + immer: 10.1.1 + react: 19.0.0 + use-sync-external-store: 1.4.0(react@19.0.0) diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..503d7cd --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,218 @@ +import "./style.scss"; + +import { useMediaQuery } from "@mui/material"; +import CssBaseline from "@mui/material/CssBaseline"; +import { styled, ThemeProvider } from "@mui/material/styles"; +import { lazy, Suspense, useCallback, useEffect, useState } from "react"; +import toast, { Toaster } from "react-hot-toast"; +import { Navigate, Route, Routes, useLocation } from "react-router-dom"; +import { useAccount, useConnect, useChainId, useConfig, usePublicClient, injected } from "wagmi"; + +import Messages from "./components/Messages/Messages"; +import NavDrawer from "./components/Sidebar/NavDrawer"; +import Sidebar from "./components/Sidebar/Sidebar"; +import TopBar from "./components/TopBar/TopBar"; + +import { shouldTriggerSafetyCheck } from "./helpers"; +import { isNetworkAvailable } from "./constants"; +import useTheme from "./hooks/useTheme"; +import { dark as darkTheme } from "./themes/dark.js"; +import { girth as gTheme } from "./themes/girth.js"; +import { light as lightTheme } from "./themes/light.js"; + +// Dynamic Imports for code splitting +const Bonds = lazy(() => import("./containers/Bond/Bonds")); +const BondModalContainer = lazy(() => import("./containers/Bond/BondModal")); +const StakeContainer = lazy(() => import("./containers/Stake/StakeContainer")); +const TreasuryDashboard = lazy(() => import("./containers/TreasuryDashboard/TreasuryDashboard")); +const Faucet = lazy(() => import("./containers/Faucet/Faucet")); +const Dex = lazy(() => import("./containers/Dex/Dex")); +const NotFound = lazy(() => import("./containers/NotFound/NotFound")); + +const PREFIX = "App"; + +const classes = { + drawer: `${PREFIX}-drawer`, + content: `${PREFIX}-content`, + contentShift: `${PREFIX}-contentShift`, + toolbar: `${PREFIX}-toolbar`, + drawerPaper: `${PREFIX}-drawerPaper`, + notification: `${PREFIX}-notification`, +}; + +const StyledDiv = styled("div")(({ theme }) => ({ + [`& .${classes.drawer}`]: { + [theme.breakpoints.up("md")]: { + width: drawerWidth, + flexShrink: 0, + }, + }, + + [`& .${classes.content}`]: { + flexGrow: 1, + padding: "15px", + transition: theme.transitions.create("margin", { + easing: theme.transitions.easing.sharp, + duration: transitionDuration, + }), + marginLeft: drawerWidth, + marginTop: "-48.5px", + }, + + [`& .${classes.contentShift}`]: { + transition: theme.transitions.create("margin", { + easing: theme.transitions.easing.easeOut, + duration: transitionDuration, + }), + marginLeft: 0, + }, + + // necessary for content to be below app bar + [`& .${classes.toolbar}`]: theme.mixins.toolbar, + + [`& .${classes.drawerPaper}`]: { + width: drawerWidth, + }, + + [`& .${classes.notification}`]: { + marginLeft: "264px", + }, +})); + +// 😬 Sorry for all the console logging +const DEBUG = false; + +// 🛰 providers +if (DEBUG) console.log("📡 Connecting to Mainnet Ethereum"); +// 🔭 block explorer URL +// const blockExplorer = targetNetwork.blockExplorer; + +const drawerWidth = 264; +const transitionDuration = 969; +function App() { + const location = useLocation(); + const [theme, toggleTheme] = useTheme(); + + const config = useConfig(); + const { connect, error: errorMessage } = useConnect(); + const tryConnectInjected = () => connect({ connector: injected() }); + + const bondIndexes = []; + + const [wrongNetworkToastId, setWrongNetworkToastId] = useState(null); + const [isSidebarExpanded, setIsSidebarExpanded] = useState(false); + const [mobileOpen, setMobileOpen] = useState(false); + + const { address = "", chainId: addressChainId, isConnected, isReconnecting } = useAccount(); + + const provider = usePublicClient(); + const chainId = useChainId(); + + const [migrationModalOpen, setMigrationModalOpen] = useState(false); + const migModalClose = () => { + setMigrationModalOpen(false); + }; + + const isSmallerScreen = useMediaQuery("(max-width: 1047px)"); + const isSmallScreen = useMediaQuery("(max-width: 600px)"); + + async function loadDetails(whichDetails) { + const loadProvider = provider; + + if (whichDetails === "app") { + loadApp(loadProvider); + } + + if (whichDetails === "account" && address && isConnected) { + loadAccount(loadProvider); + } + } + + useEffect(() => { + if (shouldTriggerSafetyCheck()) { + toast.success("Safety Check: Always verify you're on app.dao.ghostchain.io!", { duration: 5000 }); + } + }, []); + + useEffect(() => { + if (isConnected && chainId !== addressChainId) { + const toastId = toast.loading("You are connected to wrong network. Use Sepolia Testnet please.", { + position: 'bottom-right' + }); + setWrongNetworkToastId(toastId); + } else { + if (wrongNetworkToastId) { + toast.dismiss(wrongNetworkToastId); + setWrongNetworkToastId(null); + } + } + }, [chainId, addressChainId, isConnected]) + + useEffect(() => { + if (errorMessage) { + toast.error("No injected connectors found in your browser. Download Metamask extension or visit EIP-1193 for more details.", { duration: 5000 }); + } + }, [errorMessage]); + + const handleDrawerToggle = () => { + setMobileOpen(!mobileOpen); + }; + + const handleSidebarClose = () => { + setIsSidebarExpanded(false); + }; + + const themeMode = theme === "light" ? lightTheme : theme === "dark" ? darkTheme : gTheme; + + const chainExists = isNetworkAvailable(chainId, addressChainId); + + useEffect(() => { + if (isSidebarExpanded) handleSidebarClose(); + }, [location]); + + return ( + + + +
+ {t => } + + + +
+
}> + + } /> + {chainExists && + <> + } /> + } /> + } /> + } /> + } /> + } /> + + } + } /> + } /> + + +
+ +
+
+ ); +} + +export default App; diff --git a/src/abi/ERC20.json b/src/abi/ERC20.json new file mode 100644 index 0000000..ef7859b --- /dev/null +++ b/src/abi/ERC20.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"constructor":{"details":"Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol":"ERC20"},"evmVersion":"shanghai","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol":{"keccak256":"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80","urls":["bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229","dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"}},"version":1},"id":21} \ No newline at end of file diff --git a/src/abi/Fatso.json b/src/abi/Fatso.json new file mode 100644 index 0000000..6452ee1 --- /dev/null +++ b/src/abi/Fatso.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_authority","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"authority","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IGhostAuthority"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAuthority","inputs":[{"name":"newAuthority","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AuthorityUpdated","inputs":[{"name":"authority","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidShortString","inputs":[]},{"type":"error","name":"StringTooLong","inputs":[{"name":"str","type":"string","internalType":"string"}]},{"type":"error","name":"Unauthorized","inputs":[]}],"bytecode":{"object":"0x61016060405234801562000011575f80fd5b5060405162002ab738038062002ab78339818101604052810190620000379190620003f2565b806040518060400160405280600581526020017f466174736f000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f466174736f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4654534f00000000000000000000000000000000000000000000000000000000815250816003908162000122919062000686565b50806004908162000134919062000686565b5050506200014d6005836200026960201b90919060201c565b61012081815250506200016b6006826200026960201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001aa620002be60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad816040516200025991906200077b565b60405180910390a1505062000966565b5f6020835110156200028e5762000286836200031a60201b60201c565b9050620002b8565b82620002a0836200038460201b60201c565b5f019081620002b0919062000686565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001620002ff959493929190620007c1565b60405160208183030381529060405280519060200120905090565b5f80829050601f815111156200036957826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401620003609190620008a6565b60405180910390fd5b8051816200037790620008f7565b5f1c175f1b915050919050565b5f819050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003bc8262000391565b9050919050565b620003ce81620003b0565b8114620003d9575f80fd5b50565b5f81519050620003ec81620003c3565b92915050565b5f602082840312156200040a57620004096200038d565b5b5f6200041984828501620003dc565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200049e57607f821691505b602082108103620004b457620004b362000459565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004db565b620005248683620004db565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200056e6200056862000562846200053c565b62000545565b6200053c565b9050919050565b5f819050919050565b62000589836200054e565b620005a1620005988262000575565b848454620004e7565b825550505050565b5f90565b620005b7620005a9565b620005c48184846200057e565b505050565b5b81811015620005eb57620005df5f82620005ad565b600181019050620005ca565b5050565b601f8211156200063a576200060481620004ba565b6200060f84620004cc565b810160208510156200061f578190505b620006376200062e85620004cc565b830182620005c9565b50505b505050565b5f82821c905092915050565b5f6200065c5f19846008026200063f565b1980831691505092915050565b5f6200067683836200064b565b9150826002028217905092915050565b620006918262000422565b67ffffffffffffffff811115620006ad57620006ac6200042c565b5b620006b9825462000486565b620006c6828285620005ef565b5f60209050601f831160018114620006fc575f8415620006e7578287015190505b620006f3858262000669565b86555062000762565b601f1984166200070c86620004ba565b5f5b8281101562000735578489015182556001820191506020850194506020810190506200070e565b8683101562000755578489015162000751601f8916826200064b565b8355505b6001600288020188555050505b505050505050565b6200077581620003b0565b82525050565b5f602082019050620007905f8301846200076a565b92915050565b5f819050919050565b620007aa8162000796565b82525050565b620007bb816200053c565b82525050565b5f60a082019050620007d65f8301886200079f565b620007e560208301876200079f565b620007f460408301866200079f565b620008036060830185620007b0565b6200081260808301846200076a565b9695505050505050565b5f82825260208201905092915050565b5f5b838110156200084b5780820151818401526020810190506200082e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f620008728262000422565b6200087e81856200081c565b9350620008908185602086016200082c565b6200089b8162000856565b840191505092915050565b5f6020820190508181035f830152620008c0818462000866565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f620008ee825162000796565b80915050919050565b5f6200090382620008c8565b826200090f84620008d2565b90506200091c81620008e1565b925060208210156200095f576200095a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802620004db565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516120ff620009b85f395f610ec801525f610e8d01525f6113c101525f6113a001525f610a8501525f610adb01525f610b0401526120ff5ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c806379cc6790116100a057806395d89b411161006f57806395d89b41146102e4578063a9059cbb14610302578063bf7e214f14610332578063d505accf14610350578063dd62ed3e1461036c57610114565b806379cc6790146102585780637a9e5e4b146102745780637ecebe001461029057806384b0196e146102c057610114565b8063313ce567116100e7578063313ce567146101b45780633644e515146101d257806340c10f19146101f057806342966c681461020c57806370a082311461022857610114565b806306fdde0314610118578063095ea7b31461013657806318160ddd1461016657806323b872dd14610184575b5f80fd5b61012061039c565b60405161012d9190611891565b60405180910390f35b610150600480360381019061014b9190611942565b61042c565b60405161015d919061199a565b60405180910390f35b61016e61044e565b60405161017b91906119c2565b60405180910390f35b61019e600480360381019061019991906119db565b610457565b6040516101ab919061199a565b60405180910390f35b6101bc610485565b6040516101c99190611a46565b60405180910390f35b6101da61048d565b6040516101e79190611a77565b60405180910390f35b61020a60048036038101906102059190611942565b61049b565b005b61022660048036038101906102219190611a90565b6104b1565b005b610242600480360381019061023d9190611abb565b6104be565b60405161024f91906119c2565b60405180910390f35b610272600480360381019061026d9190611942565b610503565b005b61028e60048036038101906102899190611abb565b610511565b005b6102aa60048036038101906102a59190611abb565b610593565b6040516102b791906119c2565b60405180910390f35b6102c86105a4565b6040516102db9796959493929190611be6565b60405180910390f35b6102ec610649565b6040516102f99190611891565b60405180910390f35b61031c60048036038101906103179190611942565b6106d9565b604051610329919061199a565b60405180910390f35b61033a6106fb565b6040516103479190611cc3565b60405180910390f35b61036a60048036038101906103659190611d30565b610720565b005b61038660048036038101906103819190611dcd565b610865565b60405161039391906119c2565b60405180910390f35b6060600380546103ab90611e38565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790611e38565b80156104225780601f106103f957610100808354040283529160200191610422565b820191905f5260205f20905b81548152906001019060200180831161040557829003601f168201915b5050505050905090565b5f806104366108e7565b90506104438185856108ee565b600191505092915050565b5f600254905090565b5f806104616108e7565b905061046e858285610900565b610479858585610992565b60019150509392505050565b5f6009905090565b5f610496610a82565b905090565b6104a3610b38565b6104ad8282610c2c565b5050565b6104bb3382610cab565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61050d8282610d2a565b5050565b610519610d4a565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad816040516105889190611e68565b60405180910390a150565b5f61059d82610e3e565b9050919050565b5f6060805f805f60606105b5610e84565b6105bd610ebf565b46305f801b5f67ffffffffffffffff8111156105dc576105db611e81565b5b60405190808252806020026020018201604052801561060a5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b60606004805461065890611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461068490611e38565b80156106cf5780601f106106a6576101008083540402835291602001916106cf565b820191905f5260205f20905b8154815290600101906020018083116106b257829003601f168201915b5050505050905090565b5f806106e36108e7565b90506106f0818585610992565b600191505092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8342111561076557836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161075c91906119c2565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107938c610efa565b896040516020016107a996959493929190611eae565b6040516020818303038152906040528051906020012090505f6107cb82610f4d565b90505f6107da82878787610f66565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461084e57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610845929190611f0d565b60405180910390fd5b6108598a8a8a6108ee565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6108fb8383836001610f94565b505050565b5f61090b8484610865565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098c578181101561097d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161097493929190611f34565b60405180910390fd5b61098b84848484035f610f94565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a02575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109f99190611e68565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a72575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a699190611e68565b60405180910390fd5b610a7d838383611163565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610afd57507f000000000000000000000000000000000000000000000000000000000000000046145b15610b2a577f00000000000000000000000000000000000000000000000000000000000000009050610b35565b610b3261137c565b90505b90565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc69190611f7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c9c575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610c939190611e68565b60405180910390fd5b610ca75f8383611163565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d129190611e68565b60405180910390fd5b610d26825f83611163565b5050565b610d3c82610d366108e7565b83610900565b610d468282610cab565b5050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd89190611f7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e3c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610eba60057f000000000000000000000000000000000000000000000000000000000000000061141190919063ffffffff16565b905090565b6060610ef560067f000000000000000000000000000000000000000000000000000000000000000061141190919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610f5f610f59610a82565b836114be565b9050919050565b5f805f80610f76888888886114fe565b925092509250610f8682826115e5565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611004575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ffb9190611e68565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611074575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161106b9190611e68565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561115d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161115491906119c2565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111b3578060025f8282546111a79190611fd5565b92505081905550611281565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561123c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161123393929190611f34565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112c8578060025f8282540392505081905550611312565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161136f91906119c2565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016113f6959493929190612008565b60405160208183030381529060405280519060200120905090565b606060ff5f1b831461142d5761142683611747565b90506114b8565b81805461143990611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461146590611e38565b80156114b05780601f10611487576101008083540402835291602001916114b0565b820191905f5260205f20905b81548152906001019060200180831161149357829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c111561153a575f6003859250925092506115db565b5f6001888888886040515f815260200160405260405161155d9493929190612059565b6020604051602081039080840390855afa15801561157d573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115ce575f60015f801b935093509350506115db565b805f805f1b935093509350505b9450945094915050565b5f60038111156115f8576115f761209c565b5b82600381111561160b5761160a61209c565b5b031561174357600160038111156116255761162461209c565b5b8260038111156116385761163761209c565b5b0361166f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156116835761168261209c565b5b8260038111156116965761169561209c565b5b036116da57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016116d191906119c2565b60405180910390fd5b6003808111156116ed576116ec61209c565b5b826003811115611700576116ff61209c565b5b0361174257806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016117399190611a77565b60405180910390fd5b5b5050565b60605f611753836117b9565b90505f602067ffffffffffffffff81111561177157611770611e81565b5b6040519080825280601f01601f1916602001820160405280156117a35781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156117fe576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561183e578082015181840152602081019050611823565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61186382611807565b61186d8185611811565b935061187d818560208601611821565b61188681611849565b840191505092915050565b5f6020820190508181035f8301526118a98184611859565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118de826118b5565b9050919050565b6118ee816118d4565b81146118f8575f80fd5b50565b5f81359050611909816118e5565b92915050565b5f819050919050565b6119218161190f565b811461192b575f80fd5b50565b5f8135905061193c81611918565b92915050565b5f8060408385031215611958576119576118b1565b5b5f611965858286016118fb565b92505060206119768582860161192e565b9150509250929050565b5f8115159050919050565b61199481611980565b82525050565b5f6020820190506119ad5f83018461198b565b92915050565b6119bc8161190f565b82525050565b5f6020820190506119d55f8301846119b3565b92915050565b5f805f606084860312156119f2576119f16118b1565b5b5f6119ff868287016118fb565b9350506020611a10868287016118fb565b9250506040611a218682870161192e565b9150509250925092565b5f60ff82169050919050565b611a4081611a2b565b82525050565b5f602082019050611a595f830184611a37565b92915050565b5f819050919050565b611a7181611a5f565b82525050565b5f602082019050611a8a5f830184611a68565b92915050565b5f60208284031215611aa557611aa46118b1565b5b5f611ab28482850161192e565b91505092915050565b5f60208284031215611ad057611acf6118b1565b5b5f611add848285016118fb565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611b1a81611ae6565b82525050565b611b29816118d4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611b618161190f565b82525050565b5f611b728383611b58565b60208301905092915050565b5f602082019050919050565b5f611b9482611b2f565b611b9e8185611b39565b9350611ba983611b49565b805f5b83811015611bd9578151611bc08882611b67565b9750611bcb83611b7e565b925050600181019050611bac565b5085935050505092915050565b5f60e082019050611bf95f83018a611b11565b8181036020830152611c0b8189611859565b90508181036040830152611c1f8188611859565b9050611c2e60608301876119b3565b611c3b6080830186611b20565b611c4860a0830185611a68565b81810360c0830152611c5a8184611b8a565b905098975050505050505050565b5f819050919050565b5f611c8b611c86611c81846118b5565b611c68565b6118b5565b9050919050565b5f611c9c82611c71565b9050919050565b5f611cad82611c92565b9050919050565b611cbd81611ca3565b82525050565b5f602082019050611cd65f830184611cb4565b92915050565b611ce581611a2b565b8114611cef575f80fd5b50565b5f81359050611d0081611cdc565b92915050565b611d0f81611a5f565b8114611d19575f80fd5b50565b5f81359050611d2a81611d06565b92915050565b5f805f805f805f60e0888a031215611d4b57611d4a6118b1565b5b5f611d588a828b016118fb565b9750506020611d698a828b016118fb565b9650506040611d7a8a828b0161192e565b9550506060611d8b8a828b0161192e565b9450506080611d9c8a828b01611cf2565b93505060a0611dad8a828b01611d1c565b92505060c0611dbe8a828b01611d1c565b91505092959891949750929550565b5f8060408385031215611de357611de26118b1565b5b5f611df0858286016118fb565b9250506020611e01858286016118fb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611e4f57607f821691505b602082108103611e6257611e61611e0b565b5b50919050565b5f602082019050611e7b5f830184611b20565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611ec15f830189611a68565b611ece6020830188611b20565b611edb6040830187611b20565b611ee860608301866119b3565b611ef560808301856119b3565b611f0260a08301846119b3565b979650505050505050565b5f604082019050611f205f830185611b20565b611f2d6020830184611b20565b9392505050565b5f606082019050611f475f830186611b20565b611f5460208301856119b3565b611f6160408301846119b3565b949350505050565b5f81519050611f77816118e5565b92915050565b5f60208284031215611f9257611f916118b1565b5b5f611f9f84828501611f69565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fdf8261190f565b9150611fea8361190f565b925082820190508082111561200257612001611fa8565b5b92915050565b5f60a08201905061201b5f830188611a68565b6120286020830187611a68565b6120356040830186611a68565b61204260608301856119b3565b61204f6080830184611b20565b9695505050505050565b5f60808201905061206c5f830187611a68565b6120796020830186611a37565b6120866040830185611a68565b6120936060830184611a68565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220171ba1011383ffc1a7c138ba9cf474d0e1f2b80af39a19dea704418803a37a1f64736f6c63430008140033","sourceMap":"210:809:87:-:0;;;276:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;414:10;1574:52:23;;;;;;;;;;;;;;;;;1613:4;3328:431:37;;;;;;;;;;;;;;;;;1896:113:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1970:5;1962;:13;;;;;;:::i;:::-;;1995:7;1985;:17;;;;;;:::i;:::-;;1896:113;;3401:45:37;3432:13;3401:4;:30;;;;:45;;;;:::i;:::-;3393:53;;;;;;3467:51;3501:16;3467:7;:33;;;;:51;;;;:::i;:::-;3456:62;;;;;;3558:4;3542:22;;;;;;3528:36;;;;;;3607:7;3591:25;;;;;;3574:42;;;;;;3644:13;3627:30;;;;;;3692:23;:21;;;:23;;:::i;:::-;3667:48;;;;;;3747:4;3725:27;;;;;;;;;;3328:431;;1574:52:23;325:10:118;313:9;;:22;;;;;;;;;;;;;;;;;;350:37;375:10;350:37;;;;;;:::i;:::-;;;;;;;;263:131;276:157:87;210:809;;2914:340:33;3010:11;3059:2;3043:5;3037:19;:24;3033:215;;;3084:20;3098:5;3084:13;;;:20;;:::i;:::-;3077:27;;;;3033:215;3176:5;3135:32;3161:5;3135:25;;;:32;;:::i;:::-;:38;;:46;;;;;;:::i;:::-;;1390:66;3219:17;;3195:42;;2914:340;;;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;;4239:14;;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;1708:286:33:-;1773:11;1796:17;1822:3;1796:30;;1854:2;1840:4;:11;:16;1836:72;;;1893:3;1879:18;;;;;;;;;;;:::i;:::-;;;;;;;;1836:72;1974:4;:11;1965:4;1957:13;;;:::i;:::-;1949:22;;:36;1941:45;;1917:70;;;1708:286;;;:::o;3135:202:34:-;3203:20;3311:10;3301:20;;3135:202;;;:::o;88:117:133:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;1202:99::-;1254:6;1288:5;1282:12;1272:22;;1202:99;;;:::o;1307:180::-;1355:77;1352:1;1345:88;1452:4;1449:1;1442:15;1476:4;1473:1;1466:15;1493:180;1541:77;1538:1;1531:88;1638:4;1635:1;1628:15;1662:4;1659:1;1652:15;1679:320;1723:6;1760:1;1754:4;1750:12;1740:22;;1807:1;1801:4;1797:12;1828:18;1818:81;;1884:4;1876:6;1872:17;1862:27;;1818:81;1946:2;1938:6;1935:14;1915:18;1912:38;1909:84;;1965:18;;:::i;:::-;1909:84;1730:269;1679:320;;;:::o;2005:141::-;2054:4;2077:3;2069:11;;2100:3;2097:1;2090:14;2134:4;2131:1;2121:18;2113:26;;2005:141;;;:::o;2152:93::-;2189:6;2236:2;2231;2224:5;2220:14;2216:23;2206:33;;2152:93;;;:::o;2251:107::-;2295:8;2345:5;2339:4;2335:16;2314:37;;2251:107;;;;:::o;2364:393::-;2433:6;2483:1;2471:10;2467:18;2506:97;2536:66;2525:9;2506:97;:::i;:::-;2624:39;2654:8;2643:9;2624:39;:::i;:::-;2612:51;;2696:4;2692:9;2685:5;2681:21;2672:30;;2745:4;2735:8;2731:19;2724:5;2721:30;2711:40;;2440:317;;2364:393;;;;;:::o;2763:77::-;2800:7;2829:5;2818:16;;2763:77;;;:::o;2846:60::-;2874:3;2895:5;2888:12;;2846:60;;;:::o;2912:142::-;2962:9;2995:53;3013:34;3022:24;3040:5;3022:24;:::i;:::-;3013:34;:::i;:::-;2995:53;:::i;:::-;2982:66;;2912:142;;;:::o;3060:75::-;3103:3;3124:5;3117:12;;3060:75;;;:::o;3141:269::-;3251:39;3282:7;3251:39;:::i;:::-;3312:91;3361:41;3385:16;3361:41;:::i;:::-;3353:6;3346:4;3340:11;3312:91;:::i;:::-;3306:4;3299:105;3217:193;3141:269;;;:::o;3416:73::-;3461:3;3416:73;:::o;3495:189::-;3572:32;;:::i;:::-;3613:65;3671:6;3663;3657:4;3613:65;:::i;:::-;3548:136;3495:189;;:::o;3690:186::-;3750:120;3767:3;3760:5;3757:14;3750:120;;;3821:39;3858:1;3851:5;3821:39;:::i;:::-;3794:1;3787:5;3783:13;3774:22;;3750:120;;;3690:186;;:::o;3882:543::-;3983:2;3978:3;3975:11;3972:446;;;4017:38;4049:5;4017:38;:::i;:::-;4101:29;4119:10;4101:29;:::i;:::-;4091:8;4087:44;4284:2;4272:10;4269:18;4266:49;;;4305:8;4290:23;;4266:49;4328:80;4384:22;4402:3;4384:22;:::i;:::-;4374:8;4370:37;4357:11;4328:80;:::i;:::-;3987:431;;3972:446;3882:543;;;:::o;4431:117::-;4485:8;4535:5;4529:4;4525:16;4504:37;;4431:117;;;;:::o;4554:169::-;4598:6;4631:51;4679:1;4675:6;4667:5;4664:1;4660:13;4631:51;:::i;:::-;4627:56;4712:4;4706;4702:15;4692:25;;4605:118;4554:169;;;;:::o;4728:295::-;4804:4;4950:29;4975:3;4969:4;4950:29;:::i;:::-;4942:37;;5012:3;5009:1;5005:11;4999:4;4996:21;4988:29;;4728:295;;;;:::o;5028:1395::-;5145:37;5178:3;5145:37;:::i;:::-;5247:18;5239:6;5236:30;5233:56;;;5269:18;;:::i;:::-;5233:56;5313:38;5345:4;5339:11;5313:38;:::i;:::-;5398:67;5458:6;5450;5444:4;5398:67;:::i;:::-;5492:1;5516:4;5503:17;;5548:2;5540:6;5537:14;5565:1;5560:618;;;;6222:1;6239:6;6236:77;;;6288:9;6283:3;6279:19;6273:26;6264:35;;6236:77;6339:67;6399:6;6392:5;6339:67;:::i;:::-;6333:4;6326:81;6195:222;5530:887;;5560:618;5612:4;5608:9;5600:6;5596:22;5646:37;5678:4;5646:37;:::i;:::-;5705:1;5719:208;5733:7;5730:1;5727:14;5719:208;;;5812:9;5807:3;5803:19;5797:26;5789:6;5782:42;5863:1;5855:6;5851:14;5841:24;;5910:2;5899:9;5895:18;5882:31;;5756:4;5753:1;5749:12;5744:17;;5719:208;;;5955:6;5946:7;5943:19;5940:179;;;6013:9;6008:3;6004:19;5998:26;6056:48;6098:4;6090:6;6086:17;6075:9;6056:48;:::i;:::-;6048:6;6041:64;5963:156;5940:179;6165:1;6161;6153:6;6149:14;6145:22;6139:4;6132:36;5567:611;;;5530:887;;5120:1303;;;5028:1395;;:::o;6429:118::-;6516:24;6534:5;6516:24;:::i;:::-;6511:3;6504:37;6429:118;;:::o;6553:222::-;6646:4;6684:2;6673:9;6669:18;6661:26;;6697:71;6765:1;6754:9;6750:17;6741:6;6697:71;:::i;:::-;6553:222;;;;:::o;6781:77::-;6818:7;6847:5;6836:16;;6781:77;;;:::o;6864:118::-;6951:24;6969:5;6951:24;:::i;:::-;6946:3;6939:37;6864:118;;:::o;6988:::-;7075:24;7093:5;7075:24;:::i;:::-;7070:3;7063:37;6988:118;;:::o;7112:664::-;7317:4;7355:3;7344:9;7340:19;7332:27;;7369:71;7437:1;7426:9;7422:17;7413:6;7369:71;:::i;:::-;7450:72;7518:2;7507:9;7503:18;7494:6;7450:72;:::i;:::-;7532;7600:2;7589:9;7585:18;7576:6;7532:72;:::i;:::-;7614;7682:2;7671:9;7667:18;7658:6;7614:72;:::i;:::-;7696:73;7764:3;7753:9;7749:19;7740:6;7696:73;:::i;:::-;7112:664;;;;;;;;:::o;7782:169::-;7866:11;7900:6;7895:3;7888:19;7940:4;7935:3;7931:14;7916:29;;7782:169;;;;:::o;7957:246::-;8038:1;8048:113;8062:6;8059:1;8056:13;8048:113;;;8147:1;8142:3;8138:11;8132:18;8128:1;8123:3;8119:11;8112:39;8084:2;8081:1;8077:10;8072:15;;8048:113;;;8195:1;8186:6;8181:3;8177:16;8170:27;8019:184;7957:246;;;:::o;8209:102::-;8250:6;8301:2;8297:7;8292:2;8285:5;8281:14;8277:28;8267:38;;8209:102;;;:::o;8317:377::-;8405:3;8433:39;8466:5;8433:39;:::i;:::-;8488:71;8552:6;8547:3;8488:71;:::i;:::-;8481:78;;8568:65;8626:6;8621:3;8614:4;8607:5;8603:16;8568:65;:::i;:::-;8658:29;8680:6;8658:29;:::i;:::-;8653:3;8649:39;8642:46;;8409:285;8317:377;;;;:::o;8700:313::-;8813:4;8851:2;8840:9;8836:18;8828:26;;8900:9;8894:4;8890:20;8886:1;8875:9;8871:17;8864:47;8928:78;9001:4;8992:6;8928:78;:::i;:::-;8920:86;;8700:313;;;;:::o;9019:98::-;9070:6;9104:5;9098:12;9088:22;;9019:98;;;:::o;9123:116::-;9174:4;9197:3;9189:11;;9227:4;9222:3;9218:14;9210:22;;9123:116;;;:::o;9245:154::-;9288:11;9324:29;9348:3;9342:10;9324:29;:::i;:::-;9387:5;9363:29;;9300:99;9245:154;;;:::o;9405:594::-;9489:5;9520:38;9552:5;9520:38;:::i;:::-;9583:5;9610:40;9644:5;9610:40;:::i;:::-;9598:52;;9669:35;9695:8;9669:35;:::i;:::-;9660:44;;9728:2;9720:6;9717:14;9714:278;;;9799:169;9884:66;9854:6;9850:2;9846:15;9843:1;9839:23;9799:169;:::i;:::-;9776:5;9755:227;9746:236;;9714:278;9495:504;;9405:594;;;:::o;210:809:87:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610114575f3560e01c806379cc6790116100a057806395d89b411161006f57806395d89b41146102e4578063a9059cbb14610302578063bf7e214f14610332578063d505accf14610350578063dd62ed3e1461036c57610114565b806379cc6790146102585780637a9e5e4b146102745780637ecebe001461029057806384b0196e146102c057610114565b8063313ce567116100e7578063313ce567146101b45780633644e515146101d257806340c10f19146101f057806342966c681461020c57806370a082311461022857610114565b806306fdde0314610118578063095ea7b31461013657806318160ddd1461016657806323b872dd14610184575b5f80fd5b61012061039c565b60405161012d9190611891565b60405180910390f35b610150600480360381019061014b9190611942565b61042c565b60405161015d919061199a565b60405180910390f35b61016e61044e565b60405161017b91906119c2565b60405180910390f35b61019e600480360381019061019991906119db565b610457565b6040516101ab919061199a565b60405180910390f35b6101bc610485565b6040516101c99190611a46565b60405180910390f35b6101da61048d565b6040516101e79190611a77565b60405180910390f35b61020a60048036038101906102059190611942565b61049b565b005b61022660048036038101906102219190611a90565b6104b1565b005b610242600480360381019061023d9190611abb565b6104be565b60405161024f91906119c2565b60405180910390f35b610272600480360381019061026d9190611942565b610503565b005b61028e60048036038101906102899190611abb565b610511565b005b6102aa60048036038101906102a59190611abb565b610593565b6040516102b791906119c2565b60405180910390f35b6102c86105a4565b6040516102db9796959493929190611be6565b60405180910390f35b6102ec610649565b6040516102f99190611891565b60405180910390f35b61031c60048036038101906103179190611942565b6106d9565b604051610329919061199a565b60405180910390f35b61033a6106fb565b6040516103479190611cc3565b60405180910390f35b61036a60048036038101906103659190611d30565b610720565b005b61038660048036038101906103819190611dcd565b610865565b60405161039391906119c2565b60405180910390f35b6060600380546103ab90611e38565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790611e38565b80156104225780601f106103f957610100808354040283529160200191610422565b820191905f5260205f20905b81548152906001019060200180831161040557829003601f168201915b5050505050905090565b5f806104366108e7565b90506104438185856108ee565b600191505092915050565b5f600254905090565b5f806104616108e7565b905061046e858285610900565b610479858585610992565b60019150509392505050565b5f6009905090565b5f610496610a82565b905090565b6104a3610b38565b6104ad8282610c2c565b5050565b6104bb3382610cab565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61050d8282610d2a565b5050565b610519610d4a565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad816040516105889190611e68565b60405180910390a150565b5f61059d82610e3e565b9050919050565b5f6060805f805f60606105b5610e84565b6105bd610ebf565b46305f801b5f67ffffffffffffffff8111156105dc576105db611e81565b5b60405190808252806020026020018201604052801561060a5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b60606004805461065890611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461068490611e38565b80156106cf5780601f106106a6576101008083540402835291602001916106cf565b820191905f5260205f20905b8154815290600101906020018083116106b257829003601f168201915b5050505050905090565b5f806106e36108e7565b90506106f0818585610992565b600191505092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8342111561076557836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161075c91906119c2565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107938c610efa565b896040516020016107a996959493929190611eae565b6040516020818303038152906040528051906020012090505f6107cb82610f4d565b90505f6107da82878787610f66565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461084e57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610845929190611f0d565b60405180910390fd5b6108598a8a8a6108ee565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6108fb8383836001610f94565b505050565b5f61090b8484610865565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098c578181101561097d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161097493929190611f34565b60405180910390fd5b61098b84848484035f610f94565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a02575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109f99190611e68565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a72575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a699190611e68565b60405180910390fd5b610a7d838383611163565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610afd57507f000000000000000000000000000000000000000000000000000000000000000046145b15610b2a577f00000000000000000000000000000000000000000000000000000000000000009050610b35565b610b3261137c565b90505b90565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc69190611f7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c9c575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610c939190611e68565b60405180910390fd5b610ca75f8383611163565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d129190611e68565b60405180910390fd5b610d26825f83611163565b5050565b610d3c82610d366108e7565b83610900565b610d468282610cab565b5050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd89190611f7d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e3c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610eba60057f000000000000000000000000000000000000000000000000000000000000000061141190919063ffffffff16565b905090565b6060610ef560067f000000000000000000000000000000000000000000000000000000000000000061141190919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610f5f610f59610a82565b836114be565b9050919050565b5f805f80610f76888888886114fe565b925092509250610f8682826115e5565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611004575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ffb9190611e68565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611074575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161106b9190611e68565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561115d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161115491906119c2565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111b3578060025f8282546111a79190611fd5565b92505081905550611281565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561123c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161123393929190611f34565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112c8578060025f8282540392505081905550611312565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161136f91906119c2565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016113f6959493929190612008565b60405160208183030381529060405280519060200120905090565b606060ff5f1b831461142d5761142683611747565b90506114b8565b81805461143990611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461146590611e38565b80156114b05780601f10611487576101008083540402835291602001916114b0565b820191905f5260205f20905b81548152906001019060200180831161149357829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c111561153a575f6003859250925092506115db565b5f6001888888886040515f815260200160405260405161155d9493929190612059565b6020604051602081039080840390855afa15801561157d573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115ce575f60015f801b935093509350506115db565b805f805f1b935093509350505b9450945094915050565b5f60038111156115f8576115f761209c565b5b82600381111561160b5761160a61209c565b5b031561174357600160038111156116255761162461209c565b5b8260038111156116385761163761209c565b5b0361166f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156116835761168261209c565b5b8260038111156116965761169561209c565b5b036116da57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016116d191906119c2565b60405180910390fd5b6003808111156116ed576116ec61209c565b5b826003811115611700576116ff61209c565b5b0361174257806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016117399190611a77565b60405180910390fd5b5b5050565b60605f611753836117b9565b90505f602067ffffffffffffffff81111561177157611770611e81565b5b6040519080825280601f01601f1916602001820160405280156117a35781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156117fe576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561183e578082015181840152602081019050611823565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61186382611807565b61186d8185611811565b935061187d818560208601611821565b61188681611849565b840191505092915050565b5f6020820190508181035f8301526118a98184611859565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118de826118b5565b9050919050565b6118ee816118d4565b81146118f8575f80fd5b50565b5f81359050611909816118e5565b92915050565b5f819050919050565b6119218161190f565b811461192b575f80fd5b50565b5f8135905061193c81611918565b92915050565b5f8060408385031215611958576119576118b1565b5b5f611965858286016118fb565b92505060206119768582860161192e565b9150509250929050565b5f8115159050919050565b61199481611980565b82525050565b5f6020820190506119ad5f83018461198b565b92915050565b6119bc8161190f565b82525050565b5f6020820190506119d55f8301846119b3565b92915050565b5f805f606084860312156119f2576119f16118b1565b5b5f6119ff868287016118fb565b9350506020611a10868287016118fb565b9250506040611a218682870161192e565b9150509250925092565b5f60ff82169050919050565b611a4081611a2b565b82525050565b5f602082019050611a595f830184611a37565b92915050565b5f819050919050565b611a7181611a5f565b82525050565b5f602082019050611a8a5f830184611a68565b92915050565b5f60208284031215611aa557611aa46118b1565b5b5f611ab28482850161192e565b91505092915050565b5f60208284031215611ad057611acf6118b1565b5b5f611add848285016118fb565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611b1a81611ae6565b82525050565b611b29816118d4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611b618161190f565b82525050565b5f611b728383611b58565b60208301905092915050565b5f602082019050919050565b5f611b9482611b2f565b611b9e8185611b39565b9350611ba983611b49565b805f5b83811015611bd9578151611bc08882611b67565b9750611bcb83611b7e565b925050600181019050611bac565b5085935050505092915050565b5f60e082019050611bf95f83018a611b11565b8181036020830152611c0b8189611859565b90508181036040830152611c1f8188611859565b9050611c2e60608301876119b3565b611c3b6080830186611b20565b611c4860a0830185611a68565b81810360c0830152611c5a8184611b8a565b905098975050505050505050565b5f819050919050565b5f611c8b611c86611c81846118b5565b611c68565b6118b5565b9050919050565b5f611c9c82611c71565b9050919050565b5f611cad82611c92565b9050919050565b611cbd81611ca3565b82525050565b5f602082019050611cd65f830184611cb4565b92915050565b611ce581611a2b565b8114611cef575f80fd5b50565b5f81359050611d0081611cdc565b92915050565b611d0f81611a5f565b8114611d19575f80fd5b50565b5f81359050611d2a81611d06565b92915050565b5f805f805f805f60e0888a031215611d4b57611d4a6118b1565b5b5f611d588a828b016118fb565b9750506020611d698a828b016118fb565b9650506040611d7a8a828b0161192e565b9550506060611d8b8a828b0161192e565b9450506080611d9c8a828b01611cf2565b93505060a0611dad8a828b01611d1c565b92505060c0611dbe8a828b01611d1c565b91505092959891949750929550565b5f8060408385031215611de357611de26118b1565b5b5f611df0858286016118fb565b9250506020611e01858286016118fb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611e4f57607f821691505b602082108103611e6257611e61611e0b565b5b50919050565b5f602082019050611e7b5f830184611b20565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611ec15f830189611a68565b611ece6020830188611b20565b611edb6040830187611b20565b611ee860608301866119b3565b611ef560808301856119b3565b611f0260a08301846119b3565b979650505050505050565b5f604082019050611f205f830185611b20565b611f2d6020830184611b20565b9392505050565b5f606082019050611f475f830186611b20565b611f5460208301856119b3565b611f6160408301846119b3565b949350505050565b5f81519050611f77816118e5565b92915050565b5f60208284031215611f9257611f916118b1565b5b5f611f9f84828501611f69565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fdf8261190f565b9150611fea8361190f565b925082820190508082111561200257612001611fa8565b5b92915050565b5f60a08201905061201b5f830188611a68565b6120286020830187611a68565b6120356040830186611a68565b61204260608301856119b3565b61204f6080830184611b20565b9695505050505050565b5f60808201905061206c5f830187611a68565b6120796020830186611a37565b6120866040830185611a68565b6120936060830184611a68565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220171ba1011383ffc1a7c138ba9cf474d0e1f2b80af39a19dea704418803a37a1f64736f6c63430008140033","sourceMap":"210:809:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5039:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;439:82:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2656:112:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;527:114:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;647:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3299:116:21;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;743:112:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;650:181:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2406:143:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:557:37;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2276:93:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3610:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;224:32:118;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1680:672:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3846:140:21;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2074:89;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;4382:13;4398:12;:10;:12::i;:::-;4382:28;;4420:31;4429:5;4436:7;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;:::o;3144:97::-;3196:7;3222:12;;3215:19;;3144:97;:::o;5039:244::-;5126:4;5142:15;5160:12;:10;:12::i;:::-;5142:30;;5182:37;5198:4;5204:7;5213:5;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;:::o;439:82:87:-;489:5;513:1;506:8;;439:82;:::o;2656:112:23:-;2715:7;2741:20;:18;:20::i;:::-;2734:27;;2656:112;:::o;527:114:87:-;617:12:118;:10;:12::i;:::-;612:22:87::1;618:7;627:6;612:5;:22::i;:::-;527:114:::0;;:::o;647:90::-;705:25;711:10;723:6;705:5;:25::i;:::-;647:90;:::o;3299:116:21:-;3364:7;3390:9;:18;3400:7;3390:18;;;;;;;;;;;;;;;;3383:25;;3299:116;;;:::o;743:112:87:-;822:26;832:7;841:6;822:9;:26::i;:::-;743:112;;:::o;650:181:118:-;713:15;:13;:15::i;:::-;766:12;738:9;;:41;;;;;;;;;;;;;;;;;;794:30;811:12;794:30;;;;;;:::i;:::-;;;;;;;;650:181;:::o;2406:143:23:-;2497:7;2523:19;2536:5;2523:12;:19::i;:::-;2516:26;;2406:143;;;:::o;5144:557:37:-;5242:13;5269:18;5301:21;5336:15;5365:25;5404:12;5430:27;5533:13;:11;:13::i;:::-;5560:16;:14;:16::i;:::-;5590:13;5625:4;5652:1;5644:10;;5682:1;5668:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:212;;;;;;;;;;;;;;;;;;;;;5144:557;;;;;;;:::o;2276:93:21:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;3610:178::-;3679:4;3695:13;3711:12;:10;:12::i;:::-;3695:28;;3733:27;3743:5;3750:2;3754:5;3733:9;:27::i;:::-;3777:4;3770:11;;;3610:178;;;;:::o;224:32:118:-;;;;;;;;;;;;;:::o;1680:672:23:-;1901:8;1883:15;:26;1879:97;;;1956:8;1932:33;;;;;;;;;;;:::i;:::-;;;;;;;;1879:97;1986:18;1022:95;2045:5;2052:7;2061:5;2068:16;2078:5;2068:9;:16::i;:::-;2086:8;2017:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2007:89;;;;;;1986:110;;2107:12;2122:28;2139:10;2122:16;:28::i;:::-;2107:43;;2161:14;2178:28;2192:4;2198:1;2201;2204;2178:13;:28::i;:::-;2161:45;;2230:5;2220:15;;:6;:15;;;2216:88;;2279:6;2287:5;2258:35;;;;;;;;;;;;:::i;:::-;;;;;;;;2216:88;2314:31;2323:5;2330:7;2339:5;2314:8;:31::i;:::-;1869:483;;;1680:672;;;;;;;:::o;3846:140:21:-;3926:7;3952:11;:18;3964:5;3952:18;;;;;;;;;;;;;;;:27;3971:7;3952:27;;;;;;;;;;;;;;;;3945:34;;3846:140;;;;:::o;656:96:31:-;709:7;735:10;728:17;;656:96;:::o;8989:128:21:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;10663:477::-;10762:24;10789:25;10799:5;10806:7;10789:9;:25::i;:::-;10762:52;;10848:17;10828:16;:37;10824:310;;10904:5;10885:16;:24;10881:130;;;10963:7;10972:16;10990:5;10936:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10881:130;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;:::-;10824:310;10752:388;10663:477;;;:::o;5656:300::-;5755:1;5739:18;;:4;:18;;;5735:86;;5807:1;5780:30;;;;;;;;;;;:::i;:::-;;;;;;;;5735:86;5848:1;5834:16;;:2;:16;;;5830:86;;5902:1;5873:32;;;;;;;;;;;:::i;:::-;;;;;;;;5830:86;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;:::-;5656:300;;;:::o;3845:262:37:-;3898:7;3938:11;3921:28;;3929:4;3921:28;;;:63;;;;;3970:14;3953:13;:31;3921:63;3917:184;;;4007:22;4000:29;;;;3917:184;4067:23;:21;:23::i;:::-;4060:30;;3845:262;;:::o;1202:111:118:-;1266:9;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1252:31;;:10;:31;;;1248:58;;1292:14;;;;;;;;;;;;;;1248:58;1202:111::o;7721:208:21:-;7810:1;7791:21;;:7;:21;;;7787:91;;7864:1;7835:32;;;;;;;;;;;:::i;:::-;;;;;;;;7787:91;7887:35;7903:1;7907:7;7916:5;7887:7;:35::i;:::-;7721:208;;:::o;8247:206::-;8336:1;8317:21;;:7;:21;;;8313:89;;8388:1;8361:30;;;;;;;;;;;:::i;:::-;;;;;;;;8313:89;8411:35;8419:7;8436:1;8440:5;8411:7;:35::i;:::-;8247:206;;:::o;861:156:87:-;932:46;948:7;957:12;:10;:12::i;:::-;971:6;932:15;:46::i;:::-;988:22;994:7;1003:6;988:5;:22::i;:::-;861:156;;:::o;837:117:118:-;904:9;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;890:34;;:10;:34;;;886:61;;933:14;;;;;;;;;;;;;;886:61;837:117::o;538:107:32:-;598:7;624;:14;632:5;624:14;;;;;;;;;;;;;;;;617:21;;538:107;;;:::o;6021:126:37:-;6067:13;6099:41;6126:13;6099:5;:26;;:41;;;;:::i;:::-;6092:48;;6021:126;:::o;6473:135::-;6522:13;6554:47;6584:16;6554:8;:29;;:47;;;;:::i;:::-;6547:54;;6473:135;:::o;759:395:32:-;819:7;1121;:14;1129:5;1121:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;1114:23;;759:395;;;:::o;4917:176:37:-;4994:7;5020:66;5053:20;:18;:20::i;:::-;5075:10;5020:32;:66::i;:::-;5013:73;;4917:176;;;:::o;6803:260:36:-;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;7047:9;7040:16;;;;;6803:260;;;;;;:::o;9949:432:21:-;10078:1;10061:19;;:5;:19;;;10057:89;;10132:1;10103:32;;;;;;;;;;;:::i;:::-;;;;;;;;10057:89;10178:1;10159:21;;:7;:21;;;10155:90;;10231:1;10203:31;;;;;;;;;;;:::i;:::-;;;;;;;;10155:90;10284:5;10254:11;:18;10266:5;10254:18;;;;;;;;;;;;;;;:27;10273:7;10254:27;;;;;;;;;;;;;;;:35;;;;10303:9;10299:76;;;10349:7;10333:31;;10342:5;10333:31;;;10358:5;10333:31;;;;;;:::i;:::-;;;;;;;;10299:76;9949:432;;;;:::o;6271:1107::-;6376:1;6360:18;;:4;:18;;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;;;;;6356:540;;;6548:19;6570:9;:15;6580:4;6570:15;;;;;;;;;;;;;;;;6548:37;;6617:5;6603:11;:19;6599:115;;;6674:4;6680:11;6693:5;6649:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6599:115;6866:5;6852:11;:19;6834:9;:15;6844:4;6834:15;;;;;;;;;;;;;;;:37;;;;6534:362;6356:540;6924:1;6910:16;;:2;:16;;;6906:425;;7089:5;7073:12;;:21;;;;;;;;;;;6906:425;;;7301:5;7284:9;:13;7294:2;7284:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6906:425;7361:2;7346:25;;7355:4;7346:25;;;7365:5;7346:25;;;;;;:::i;:::-;;;;;;;;6271:1107;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;4239:14;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;3385:267:33:-;3479:13;1390:66;3537:17;;3527:5;3508:46;3504:142;;3577:15;3586:5;3577:8;:15::i;:::-;3570:22;;;;3504:142;3630:5;3623:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3385:267;;;;;:::o;3353:401:38:-;3446:14;3555:4;3549:11;3585:10;3580:3;3573:23;3632:15;3625:4;3620:3;3616:14;3609:39;3684:10;3677:4;3672:3;3668:14;3661:34;3733:4;3728:3;3718:20;3708:30;;3524:224;3353:401;;;;:::o;5140:1530:36:-;5266:7;5275:12;5289:7;6199:66;6194:1;6186:10;;:79;6182:164;;;6297:1;6301:30;6333:1;6281:54;;;;;;;;6182:164;6440:14;6457:24;6467:4;6473:1;6476;6479;6457:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6440:41;;6513:1;6495:20;;:6;:20;;;6491:113;;6547:1;6551:29;6590:1;6582:10;;6531:62;;;;;;;;;6491:113;6622:6;6630:20;6660:1;6652:10;;6614:49;;;;;;;5140:1530;;;;;;;;;:::o;7196:532::-;7291:20;7282:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;7278:444;7327:7;7278:444;7387:29;7378:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;7374:348;;7439:23;;;;;;;;;;;;;;7374:348;7492:35;7483:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;7479:243;;7586:8;7578:17;;7550:46;;;;;;;;;;;:::i;:::-;;;;;;;;7479:243;7626:30;7617:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;7613:109;;7702:8;7679:32;;;;;;;;;;;:::i;:::-;;;;;;;;7613:109;7196:532;;;:::o;2078:405:33:-;2137:13;2162:11;2176:16;2187:4;2176:10;:16::i;:::-;2162:30;;2280:17;2311:2;2300:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2280:34;;2402:3;2397;2390:16;2442:4;2435;2430:3;2426:14;2419:28;2473:3;2466:10;;;;2078:405;;;:::o;2555:245::-;2616:7;2635:14;2688:4;2679;2652:33;;:40;2635:57;;2715:2;2706:6;:11;2702:69;;;2740:20;;;;;;;;;;;;;;2702:69;2787:6;2780:13;;;2555:245;;;:::o;7:99:133:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:77::-;4890:7;4919:5;4908:16;;4853:77;;;:::o;4936:118::-;5023:24;5041:5;5023:24;:::i;:::-;5018:3;5011:37;4936:118;;:::o;5060:222::-;5153:4;5191:2;5180:9;5176:18;5168:26;;5204:71;5272:1;5261:9;5257:17;5248:6;5204:71;:::i;:::-;5060:222;;;;:::o;5288:329::-;5347:6;5396:2;5384:9;5375:7;5371:23;5367:32;5364:119;;;5402:79;;:::i;:::-;5364:119;5522:1;5547:53;5592:7;5583:6;5572:9;5568:22;5547:53;:::i;:::-;5537:63;;5493:117;5288:329;;;;:::o;5623:::-;5682:6;5731:2;5719:9;5710:7;5706:23;5702:32;5699:119;;;5737:79;;:::i;:::-;5699:119;5857:1;5882:53;5927:7;5918:6;5907:9;5903:22;5882:53;:::i;:::-;5872:63;;5828:117;5623:329;;;;:::o;5958:149::-;5994:7;6034:66;6027:5;6023:78;6012:89;;5958:149;;;:::o;6113:115::-;6198:23;6215:5;6198:23;:::i;:::-;6193:3;6186:36;6113:115;;:::o;6234:118::-;6321:24;6339:5;6321:24;:::i;:::-;6316:3;6309:37;6234:118;;:::o;6358:114::-;6425:6;6459:5;6453:12;6443:22;;6358:114;;;:::o;6478:184::-;6577:11;6611:6;6606:3;6599:19;6651:4;6646:3;6642:14;6627:29;;6478:184;;;;:::o;6668:132::-;6735:4;6758:3;6750:11;;6788:4;6783:3;6779:14;6771:22;;6668:132;;;:::o;6806:108::-;6883:24;6901:5;6883:24;:::i;:::-;6878:3;6871:37;6806:108;;:::o;6920:179::-;6989:10;7010:46;7052:3;7044:6;7010:46;:::i;:::-;7088:4;7083:3;7079:14;7065:28;;6920:179;;;;:::o;7105:113::-;7175:4;7207;7202:3;7198:14;7190:22;;7105:113;;;:::o;7254:732::-;7373:3;7402:54;7450:5;7402:54;:::i;:::-;7472:86;7551:6;7546:3;7472:86;:::i;:::-;7465:93;;7582:56;7632:5;7582:56;:::i;:::-;7661:7;7692:1;7677:284;7702:6;7699:1;7696:13;7677:284;;;7778:6;7772:13;7805:63;7864:3;7849:13;7805:63;:::i;:::-;7798:70;;7891:60;7944:6;7891:60;:::i;:::-;7881:70;;7737:224;7724:1;7721;7717:9;7712:14;;7677:284;;;7681:14;7977:3;7970:10;;7378:608;;;7254:732;;;;:::o;7992:1215::-;8341:4;8379:3;8368:9;8364:19;8356:27;;8393:69;8459:1;8448:9;8444:17;8435:6;8393:69;:::i;:::-;8509:9;8503:4;8499:20;8494:2;8483:9;8479:18;8472:48;8537:78;8610:4;8601:6;8537:78;:::i;:::-;8529:86;;8662:9;8656:4;8652:20;8647:2;8636:9;8632:18;8625:48;8690:78;8763:4;8754:6;8690:78;:::i;:::-;8682:86;;8778:72;8846:2;8835:9;8831:18;8822:6;8778:72;:::i;:::-;8860:73;8928:3;8917:9;8913:19;8904:6;8860:73;:::i;:::-;8943;9011:3;9000:9;8996:19;8987:6;8943:73;:::i;:::-;9064:9;9058:4;9054:20;9048:3;9037:9;9033:19;9026:49;9092:108;9195:4;9186:6;9092:108;:::i;:::-;9084:116;;7992:1215;;;;;;;;;;:::o;9213:60::-;9241:3;9262:5;9255:12;;9213:60;;;:::o;9279:142::-;9329:9;9362:53;9380:34;9389:24;9407:5;9389:24;:::i;:::-;9380:34;:::i;:::-;9362:53;:::i;:::-;9349:66;;9279:142;;;:::o;9427:126::-;9477:9;9510:37;9541:5;9510:37;:::i;:::-;9497:50;;9427:126;;;:::o;9559:151::-;9634:9;9667:37;9698:5;9667:37;:::i;:::-;9654:50;;9559:151;;;:::o;9716:181::-;9828:62;9884:5;9828:62;:::i;:::-;9823:3;9816:75;9716:181;;:::o;9903:272::-;10021:4;10059:2;10048:9;10044:18;10036:26;;10072:96;10165:1;10154:9;10150:17;10141:6;10072:96;:::i;:::-;9903:272;;;;:::o;10181:118::-;10252:22;10268:5;10252:22;:::i;:::-;10245:5;10242:33;10232:61;;10289:1;10286;10279:12;10232:61;10181:118;:::o;10305:135::-;10349:5;10387:6;10374:20;10365:29;;10403:31;10428:5;10403:31;:::i;:::-;10305:135;;;;:::o;10446:122::-;10519:24;10537:5;10519:24;:::i;:::-;10512:5;10509:35;10499:63;;10558:1;10555;10548:12;10499:63;10446:122;:::o;10574:139::-;10620:5;10658:6;10645:20;10636:29;;10674:33;10701:5;10674:33;:::i;:::-;10574:139;;;;:::o;10719:1199::-;10830:6;10838;10846;10854;10862;10870;10878;10927:3;10915:9;10906:7;10902:23;10898:33;10895:120;;;10934:79;;:::i;:::-;10895:120;11054:1;11079:53;11124:7;11115:6;11104:9;11100:22;11079:53;:::i;:::-;11069:63;;11025:117;11181:2;11207:53;11252:7;11243:6;11232:9;11228:22;11207:53;:::i;:::-;11197:63;;11152:118;11309:2;11335:53;11380:7;11371:6;11360:9;11356:22;11335:53;:::i;:::-;11325:63;;11280:118;11437:2;11463:53;11508:7;11499:6;11488:9;11484:22;11463:53;:::i;:::-;11453:63;;11408:118;11565:3;11592:51;11635:7;11626:6;11615:9;11611:22;11592:51;:::i;:::-;11582:61;;11536:117;11692:3;11719:53;11764:7;11755:6;11744:9;11740:22;11719:53;:::i;:::-;11709:63;;11663:119;11821:3;11848:53;11893:7;11884:6;11873:9;11869:22;11848:53;:::i;:::-;11838:63;;11792:119;10719:1199;;;;;;;;;;:::o;11924:474::-;11992:6;12000;12049:2;12037:9;12028:7;12024:23;12020:32;12017:119;;;12055:79;;:::i;:::-;12017:119;12175:1;12200:53;12245:7;12236:6;12225:9;12221:22;12200:53;:::i;:::-;12190:63;;12146:117;12302:2;12328:53;12373:7;12364:6;12353:9;12349:22;12328:53;:::i;:::-;12318:63;;12273:118;11924:474;;;;;:::o;12404:180::-;12452:77;12449:1;12442:88;12549:4;12546:1;12539:15;12573:4;12570:1;12563:15;12590:320;12634:6;12671:1;12665:4;12661:12;12651:22;;12718:1;12712:4;12708:12;12739:18;12729:81;;12795:4;12787:6;12783:17;12773:27;;12729:81;12857:2;12849:6;12846:14;12826:18;12823:38;12820:84;;12876:18;;:::i;:::-;12820:84;12641:269;12590:320;;;:::o;12916:222::-;13009:4;13047:2;13036:9;13032:18;13024:26;;13060:71;13128:1;13117:9;13113:17;13104:6;13060:71;:::i;:::-;12916:222;;;;:::o;13144:180::-;13192:77;13189:1;13182:88;13289:4;13286:1;13279:15;13313:4;13310:1;13303:15;13330:775;13563:4;13601:3;13590:9;13586:19;13578:27;;13615:71;13683:1;13672:9;13668:17;13659:6;13615:71;:::i;:::-;13696:72;13764:2;13753:9;13749:18;13740:6;13696:72;:::i;:::-;13778;13846:2;13835:9;13831:18;13822:6;13778:72;:::i;:::-;13860;13928:2;13917:9;13913:18;13904:6;13860:72;:::i;:::-;13942:73;14010:3;13999:9;13995:19;13986:6;13942:73;:::i;:::-;14025;14093:3;14082:9;14078:19;14069:6;14025:73;:::i;:::-;13330:775;;;;;;;;;:::o;14111:332::-;14232:4;14270:2;14259:9;14255:18;14247:26;;14283:71;14351:1;14340:9;14336:17;14327:6;14283:71;:::i;:::-;14364:72;14432:2;14421:9;14417:18;14408:6;14364:72;:::i;:::-;14111:332;;;;;:::o;14449:442::-;14598:4;14636:2;14625:9;14621:18;14613:26;;14649:71;14717:1;14706:9;14702:17;14693:6;14649:71;:::i;:::-;14730:72;14798:2;14787:9;14783:18;14774:6;14730:72;:::i;:::-;14812;14880:2;14869:9;14865:18;14856:6;14812:72;:::i;:::-;14449:442;;;;;;:::o;14897:143::-;14954:5;14985:6;14979:13;14970:22;;15001:33;15028:5;15001:33;:::i;:::-;14897:143;;;;:::o;15046:351::-;15116:6;15165:2;15153:9;15144:7;15140:23;15136:32;15133:119;;;15171:79;;:::i;:::-;15133:119;15291:1;15316:64;15372:7;15363:6;15352:9;15348:22;15316:64;:::i;:::-;15306:74;;15262:128;15046:351;;;;:::o;15403:180::-;15451:77;15448:1;15441:88;15548:4;15545:1;15538:15;15572:4;15569:1;15562:15;15589:191;15629:3;15648:20;15666:1;15648:20;:::i;:::-;15643:25;;15682:20;15700:1;15682:20;:::i;:::-;15677:25;;15725:1;15722;15718:9;15711:16;;15746:3;15743:1;15740:10;15737:36;;;15753:18;;:::i;:::-;15737:36;15589:191;;;;:::o;15786:664::-;15991:4;16029:3;16018:9;16014:19;16006:27;;16043:71;16111:1;16100:9;16096:17;16087:6;16043:71;:::i;:::-;16124:72;16192:2;16181:9;16177:18;16168:6;16124:72;:::i;:::-;16206;16274:2;16263:9;16259:18;16250:6;16206:72;:::i;:::-;16288;16356:2;16345:9;16341:18;16332:6;16288:72;:::i;:::-;16370:73;16438:3;16427:9;16423:19;16414:6;16370:73;:::i;:::-;15786:664;;;;;;;;:::o;16456:545::-;16629:4;16667:3;16656:9;16652:19;16644:27;;16681:71;16749:1;16738:9;16734:17;16725:6;16681:71;:::i;:::-;16762:68;16826:2;16815:9;16811:18;16802:6;16762:68;:::i;:::-;16840:72;16908:2;16897:9;16893:18;16884:6;16840:72;:::i;:::-;16922;16990:2;16979:9;16975:18;16966:6;16922:72;:::i;:::-;16456:545;;;;;;;:::o;17007:180::-;17055:77;17052:1;17045:88;17152:4;17149:1;17142:15;17176:4;17173:1;17166:15","linkReferences":{},"immutableReferences":{"8316":[{"start":2820,"length":32}],"8318":[{"start":2779,"length":32}],"8320":[{"start":2693,"length":32}],"8322":[{"start":5024,"length":32}],"8324":[{"start":5057,"length":32}],"8327":[{"start":3725,"length":32}],"8330":[{"start":3784,"length":32}]}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","authority()":"bf7e214f","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","setAuthority(address)":"7a9e5e4b","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_authority\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"internalType\":\"contract IGhostAuthority\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/FatsoERC20.sol\":\"Fatso\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/FatsoERC20.sol\":{\"keccak256\":\"0x94bc6283e803912558c95fd03cb44e9093d4283ab341947066cf11ca1c6674d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87ec2428db75c101d0f393f0a028463fef6133b0ed95923e42f832c30fe05d5c\",\"dweb:/ipfs/QmVqJU5EvdpbqAtGGS5HVhqYZCgntdbeNUHnyhgLNh8EQ9\"]},\"src/interfaces/IFTSO.sol\":{\"keccak256\":\"0x2350b4ada28bd220fdb3917bb2229859e7bb785abc052f02c3802294efd55f9e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc9fe7ab8f6a691b612e2c8b1955d49f3fd30f7bf4327d723ce1f29a7a098f15\",\"dweb:/ipfs/QmWwyhEM3TvzHG3KWiiPeLtBXy2vSw2fhjvEggUrDFsVk2\"]},\"src/interfaces/IGhostAuthority.sol\":{\"keccak256\":\"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b\",\"dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd\"]},\"src/types/GhostAccessControlled.sol\":{\"keccak256\":\"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0\",\"dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidShortString"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"type":"error","name":"StringTooLong"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"authority","type":"address","indexed":false}],"type":"event","name":"AuthorityUpdated","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"authority","outputs":[{"internalType":"contract IGhostAuthority","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[{"internalType":"address","name":"newAuthority","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAuthority"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/FatsoERC20.sol":"Fatso"},"evmVersion":"shanghai","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol":{"keccak256":"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80","urls":["bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229","dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol":{"keccak256":"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee","urls":["bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2","dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol":{"keccak256":"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f","urls":["bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e","dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol":{"keccak256":"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6","urls":["bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c","dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol":{"keccak256":"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf","urls":["bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c","dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol":{"keccak256":"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0","urls":["bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21","dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435","urls":["bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c","dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/FatsoERC20.sol":{"keccak256":"0x94bc6283e803912558c95fd03cb44e9093d4283ab341947066cf11ca1c6674d7","urls":["bzz-raw://87ec2428db75c101d0f393f0a028463fef6133b0ed95923e42f832c30fe05d5c","dweb:/ipfs/QmVqJU5EvdpbqAtGGS5HVhqYZCgntdbeNUHnyhgLNh8EQ9"],"license":"MIT"},"src/interfaces/IFTSO.sol":{"keccak256":"0x2350b4ada28bd220fdb3917bb2229859e7bb785abc052f02c3802294efd55f9e","urls":["bzz-raw://fc9fe7ab8f6a691b612e2c8b1955d49f3fd30f7bf4327d723ce1f29a7a098f15","dweb:/ipfs/QmWwyhEM3TvzHG3KWiiPeLtBXy2vSw2fhjvEggUrDFsVk2"],"license":"MIT"},"src/interfaces/IGhostAuthority.sol":{"keccak256":"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b","urls":["bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b","dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd"],"license":"MIT"},"src/types/GhostAccessControlled.sol":{"keccak256":"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d","urls":["bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0","dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW"],"license":"MIT"}},"version":1},"id":87} \ No newline at end of file diff --git a/src/abi/Ghost.json b/src/abi/Ghost.json new file mode 100644 index 0000000..38227db --- /dev/null +++ b/src/abi/Ghost.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_stnk","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"CLOCK_MODE","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceFrom","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"balanceTo","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"checkpoints","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"pos","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Checkpoints.Checkpoint208","components":[{"name":"_key","type":"uint48","internalType":"uint48"},{"name":"_value","type":"uint208","internalType":"uint208"}]}],"stateMutability":"view"},{"type":"function","name":"clock","inputs":[],"outputs":[{"name":"","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"delegate","inputs":[{"name":"delegatee","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"delegateBySig","inputs":[{"name":"delegatee","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"expiry","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"delegates","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getPastTotalSupply","inputs":[{"name":"timepoint","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPastVotes","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"timepoint","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getVotes","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"index","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_staking","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"numCheckpoints","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"staking","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"stnk","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DelegateChanged","inputs":[{"name":"delegator","type":"address","indexed":true,"internalType":"address"},{"name":"fromDelegate","type":"address","indexed":true,"internalType":"address"},{"name":"toDelegate","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"DelegateVotesChanged","inputs":[{"name":"delegate","type":"address","indexed":true,"internalType":"address"},{"name":"previousVotes","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newVotes","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"CheckpointUnorderedInsertion","inputs":[]},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20ExceededSafeSupply","inputs":[{"name":"increasedSupply","type":"uint256","internalType":"uint256"},{"name":"cap","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC5805FutureLookup","inputs":[{"name":"timepoint","type":"uint256","internalType":"uint256"},{"name":"clock","type":"uint48","internalType":"uint48"}]},{"type":"error","name":"ERC6372InconsistentClock","inputs":[]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidShortString","inputs":[]},{"type":"error","name":"NotStakingContract","inputs":[]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"StringTooLong","inputs":[{"name":"str","type":"string","internalType":"string"}]},{"type":"error","name":"VotesExpiredSignature","inputs":[{"name":"expiry","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x61016060405234801562000011575f80fd5b506040516200473f3803806200473f8339818101604052810190620000379190620003f7565b6040518060400160405280600581526020017f47686f7374000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f47686f73740000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f474853540000000000000000000000000000000000000000000000000000000081525081600390816200012191906200068b565b5080600490816200013391906200068b565b5050506200014c6005836200026e60201b90919060201c565b61012081815250506200016a6006826200026e60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001a9620002c360201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000950565b5f60208351101562000293576200028b836200031f60201b60201c565b9050620002bd565b82620002a5836200038960201b60201c565b5f019081620002b591906200068b565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e05161010051463060405160200162000304959493929190620007ab565b60405160208183030381529060405280519060200120905090565b5f80829050601f815111156200036e57826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040162000365919062000890565b60405180910390fd5b8051816200037c90620008e1565b5f1c175f1b915050919050565b5f819050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003c18262000396565b9050919050565b620003d381620003b5565b8114620003de575f80fd5b50565b5f81519050620003f181620003c8565b92915050565b5f602082840312156200040f576200040e62000392565b5b5f6200041e84828501620003e1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620004a357607f821691505b602082108103620004b957620004b86200045e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200051d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004e0565b620005298683620004e0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620005736200056d620005678462000541565b6200054a565b62000541565b9050919050565b5f819050919050565b6200058e8362000553565b620005a66200059d826200057a565b848454620004ec565b825550505050565b5f90565b620005bc620005ae565b620005c981848462000583565b505050565b5b81811015620005f057620005e45f82620005b2565b600181019050620005cf565b5050565b601f8211156200063f576200060981620004bf565b6200061484620004d1565b8101602085101562000624578190505b6200063c6200063385620004d1565b830182620005ce565b50505b505050565b5f82821c905092915050565b5f620006615f198460080262000644565b1980831691505092915050565b5f6200067b838362000650565b9150826002028217905092915050565b620006968262000427565b67ffffffffffffffff811115620006b257620006b162000431565b5b620006be82546200048b565b620006cb828285620005f4565b5f60209050601f83116001811462000701575f8415620006ec578287015190505b620006f885826200066e565b86555062000767565b601f1984166200071186620004bf565b5f5b828110156200073a5784890151825560018201915060208501945060208101905062000713565b868310156200075a578489015162000756601f89168262000650565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b62000783816200076f565b82525050565b620007948162000541565b82525050565b620007a581620003b5565b82525050565b5f60a082019050620007c05f83018862000778565b620007cf602083018762000778565b620007de604083018662000778565b620007ed606083018562000789565b620007fc60808301846200079a565b9695505050505050565b5f82825260208201905092915050565b5f5b838110156200083557808201518184015260208101905062000818565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6200085c8262000427565b62000868818562000806565b93506200087a81856020860162000816565b620008858162000840565b840191505092915050565b5f6020820190508181035f830152620008aa818462000850565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f620008d882516200076f565b80915050919050565b5f620008ed82620008b2565b82620008f984620008bc565b90506200090681620008cb565b925060208210156200094957620009447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802620004e0565b831692505b5050919050565b60805160a05160c05160e051610100516101205161014051613d9d620009a25f395f61182501525f6117ea01525f611cac01525f611c8b01525f6113e401525f61143a01525f6114630152613d9d5ff3fe608060405234801561000f575f80fd5b50600436106101e3575f3560e01c80636fcfff451161010d5780639dc29fac116100a0578063c4d66de81161006f578063c4d66de8146105e7578063d505accf14610603578063dd62ed3e1461061f578063f1127ed81461064f576101e3565b80639dc29fac1461054f578063a82487681461056b578063a9059cbb1461059b578063c3cda520146105cb576101e3565b80638e539e8c116100dc5780638e539e8c146104b357806391ddadf4146104e357806395d89b41146105015780639ab24eb01461051f576101e3565b80636fcfff45146103ff57806370a082311461042f5780637ecebe001461045f57806384b0196e1461048f576101e3565b80633a46b1a8116101855780634cf088d9116101545780634cf088d914610365578063587cde1e146103835780635c19a95c146103b357806366a5236c146103cf576101e3565b80633a46b1a8146102dd57806340c10f191461030d57806345c57eb5146103295780634bf5d7e914610347576101e3565b806323b872dd116101c157806323b872dd146102535780632986c0e514610283578063313ce567146102a15780633644e515146102bf576101e3565b806306fdde03146101e7578063095ea7b31461020557806318160ddd14610235575b5f80fd5b6101ef61067f565b6040516101fc9190613040565b60405180910390f35b61021f600480360381019061021a91906130f1565b61070f565b60405161022c9190613149565b60405180910390f35b61023d610731565b60405161024a9190613171565b60405180910390f35b61026d6004803603810190610268919061318a565b61073a565b60405161027a9190613149565b60405180910390f35b61028b610768565b6040516102989190613171565b60405180910390f35b6102a96107fc565b6040516102b691906131f5565b60405180910390f35b6102c7610804565b6040516102d49190613226565b60405180910390f35b6102f760048036038101906102f291906130f1565b610812565b6040516103049190613171565b60405180910390f35b610327600480360381019061032291906130f1565b6108e8565b005b61033161097c565b60405161033e919061324e565b60405180910390f35b61034f6109a1565b60405161035c9190613040565b60405180910390f35b61036d610a35565b60405161037a919061324e565b60405180910390f35b61039d60048036038101906103989190613267565b610a5a565b6040516103aa919061324e565b60405180910390f35b6103cd60048036038101906103c89190613267565b610abf565b005b6103e960048036038101906103e49190613292565b610ad8565b6040516103f69190613171565b60405180910390f35b61041960048036038101906104149190613267565b610b06565b60405161042691906132db565b60405180910390f35b61044960048036038101906104449190613267565b610b17565b6040516104569190613171565b60405180910390f35b61047960048036038101906104749190613267565b610b5c565b6040516104869190613171565b60405180910390f35b610497610b6d565b6040516104aa97969594939291906133e5565b60405180910390f35b6104cd60048036038101906104c89190613292565b610c12565b6040516104da9190613171565b60405180910390f35b6104eb610cac565b6040516104f89190613487565b60405180910390f35b610509610cba565b6040516105169190613040565b60405180910390f35b61053960048036038101906105349190613267565b610d4a565b6040516105469190613171565b60405180910390f35b610569600480360381019061056491906130f1565b610db3565b005b61058560048036038101906105809190613292565b610e47565b6040516105929190613171565b60405180910390f35b6105b560048036038101906105b091906130f1565b610e75565b6040516105c29190613149565b60405180910390f35b6105e560048036038101906105e091906134f4565b610e97565b005b61060160048036038101906105fc9190613267565b610f5c565b005b61061d6004803603810190610618919061357d565b611065565b005b6106396004803603810190610634919061361a565b6111aa565b6040516106469190613171565b60405180910390f35b61066960048036038101906106649190613682565b61122c565b6040516106769190613730565b60405180910390f35b60606003805461068e90613776565b80601f01602080910402602001604051908101604052809291908181526020018280546106ba90613776565b80156107055780601f106106dc57610100808354040283529160200191610705565b820191905f5260205f20905b8154815290600101906020018083116106e857829003601f168201915b5050505050905090565b5f80610719611246565b905061072681858561124d565b600191505092915050565b5f600254905090565b5f80610744611246565b905061075185828561125f565b61075c8585856112f1565b60019150509392505050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632986c0e56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f791906137ba565b905090565b5f6012905090565b5f61080d6113e1565b905090565b5f8061081c610cac565b90508065ffffffffffff16831061086c5782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016108639291906137e5565b60405180910390fd5b6108c361087884611497565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206114f090919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096e576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097882826115dd565b5050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606109ab61165c565b65ffffffffffff166109bb610cac565b65ffffffffffff16146109fa576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ac8611246565b9050610ad4818361166b565b5050565b5f610ae1610768565b670de0b6b3a764000083610af59190613839565b610aff91906138a7565b9050919050565b5f610b108261177b565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f610b66826117d0565b9050919050565b5f6060805f805f6060610b7e6117e1565b610b8661181c565b46305f801b5f67ffffffffffffffff811115610ba557610ba46138d7565b5b604051908082528060200260200182016040528015610bd35781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f80610c1c610cac565b90508065ffffffffffff168310610c6c5782816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610c639291906137e5565b60405180910390fd5b610c88610c7884611497565b600a6114f090919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f610cb561165c565b905090565b606060048054610cc990613776565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf590613776565b8015610d405780601f10610d1757610100808354040283529160200191610d40565b820191905f5260205f20905b815481529060010190602001808311610d2357829003601f168201915b5050505050905090565b5f610d9060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611857565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4382826118b9565b5050565b5f670de0b6b3a7640000610e59610768565b83610e649190613839565b610e6e91906138a7565b9050919050565b5f80610e7f611246565b9050610e8c8185856112f1565b600191505092915050565b83421115610edc57836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610ed39190613171565b60405180910390fd5b5f610f3d610f357fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610f1a9493929190613904565b60405160208183030381529060405280519060200120611938565b858585611951565b9050610f49818761197f565b610f53818861166b565b50505050505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe2576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b834211156110aa57836040517f627913020000000000000000000000000000000000000000000000000000000081526004016110a19190613171565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886110d88c6119d6565b896040516020016110ee96959493929190613947565b6040516020818303038152906040528051906020012090505f61111082611938565b90505f61111f82878787611951565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461119357808a6040517f4b800e4600000000000000000000000000000000000000000000000000000000815260040161118a9291906139a6565b60405180910390fd5b61119e8a8a8a61124d565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611234612f7a565b61123e8383611a29565b905092915050565b5f33905090565b61125a8383836001611a88565b505050565b5f61126a84846111aa565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112eb57818110156112dc578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112d3939291906139cd565b60405180910390fd5b6112ea84848484035f611a88565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611361575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611358919061324e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d1575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016113c8919061324e565b60405180910390fd5b6113dc838383611c57565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561145c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611489577f00000000000000000000000000000000000000000000000000000000000000009050611494565b611491611c67565b90505b90565b5f65ffffffffffff80168211156114e8576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016114df929190613a44565b60405180910390fd5b819050919050565b5f80835f018054905090505f808290506005831115611571575f61151384611cfc565b8461151e9190613a6b565b905061152c875f0182611df2565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561155f5780915061156f565b60018161156c9190613a9e565b92505b505b5f611580875f01878585611e04565b90505f81146115cf576115a1875f0160018361159c9190613a6b565b611df2565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166115d1565b5f5b94505050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361164d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611644919061324e565b60405180910390fd5b6116585f8383611c57565b5050565b5f61166643611497565b905090565b5f61167583610a5a565b90508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611776818361177186611e79565b611e8a565b505050565b5f6117c96117c460095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206120fa565b612109565b9050919050565b5f6117da82612160565b9050919050565b606061181760057f00000000000000000000000000000000000000000000000000000000000000006121a690919063ffffffff16565b905090565b606061185260067f00000000000000000000000000000000000000000000000000000000000000006121a690919063ffffffff16565b905090565b5f80825f018054905090505f81146118af57611881835f0160018361187c9190613a6b565b611df2565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166118b1565b5f5b915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611929575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611920919061324e565b60405180910390fd5b611934825f83611c57565b5050565b5f61194a6119446113e1565b83612253565b9050919050565b5f805f8061196188888888612293565b925092509250611971828261237a565b829350505050949350505050565b5f611989836119d6565b90508082146119d15782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016119c8929190613ad1565b60405180910390fd5b505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b611a31612f7a565b611a808260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206124dc90919063ffffffff16565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611af8575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611aef919061324e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b68575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611b5f919061324e565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611c51578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611c489190613171565b60405180910390a35b50505050565b611c628383836125ab565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611ce1959493929190613af8565b60405160208183030381529060405280519060200120905090565b5f808203611d0c575f9050611ded565b5f6001611d1884612659565b901c6001901b90506001818481611d3257611d3161387a565b5b048201901c90506001818481611d4b57611d4a61387a565b5b048201901c90506001818481611d6457611d6361387a565b5b048201901c90506001818481611d7d57611d7c61387a565b5b048201901c90506001818481611d9657611d9561387a565b5b048201901c90506001818481611daf57611dae61387a565b5b048201901c90506001818481611dc857611dc761387a565b5b048201901c9050611de981828581611de357611de261387a565b5b04612730565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015611e6e575f611e198484612748565b90508465ffffffffffff16611e2e8783611df2565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff161115611e5857809250611e68565b600181611e659190613a9e565b93505b50611e06565b819050949350505050565b5f611e8382610b17565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ec557505f81115b156120f5575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611fdf575f80611f5060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061276d611f4b86612782565b6127ef565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611fd4929190613b49565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120f4575f8061206560095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061282e61206086612782565b6127ef565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516120e9929190613b49565b60405180910390a250505b5b505050565b5f815f01805490509050919050565b5f63ffffffff8016821115612158576020826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161214f929190613ba9565b60405180910390fd5b819050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060ff5f1b83146121c2576121bb83612843565b905061224d565b8180546121ce90613776565b80601f01602080910402602001604051908101604052809291908181526020018280546121fa90613776565b80156122455780601f1061221c57610100808354040283529160200191612245565b820191905f5260205f20905b81548152906001019060200180831161222857829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156122cf575f600385925092509250612370565b5f6001888888886040515f81526020016040526040516122f29493929190613bd0565b6020604051602081039080840390855afa158015612312573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612363575f60015f801b93509350935050612370565b805f805f1b935093509350505b9450945094915050565b5f600381111561238d5761238c613c13565b5b8260038111156123a05761239f613c13565b5b03156124d857600160038111156123ba576123b9613c13565b5b8260038111156123cd576123cc613c13565b5b03612404576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561241857612417613c13565b5b82600381111561242b5761242a613c13565b5b0361246f57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016124669190613171565b60405180910390fd5b60038081111561248257612481613c13565b5b82600381111561249557612494613c13565b5b036124d757806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016124ce9190613226565b60405180910390fd5b5b5050565b6124e4612f7a565b825f018263ffffffff16815481106124ff576124fe613c40565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b6125b68383836128b5565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612649575f6125f2610731565b90505f6125fd612ace565b9050808211156126465781816040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260040161263d929190613b49565b60405180910390fd5b50505b612654838383612af1565b505050565b5f805f90505f608084901c111561267857608083901c92506080810190505b5f604084901c111561269257604083901c92506040810190505b5f602084901c11156126ac57602083901c92506020810190505b5f601084901c11156126c657601083901c92506010810190505b5f600884901c11156126e057600883901c92506008810190505b5f600484901c11156126fa57600483901c92506004810190505b5f600284901c111561271457600283901c92506002810190505b5f600184901c1115612727576001810190505b80915050919050565b5f81831061273e5781612740565b825b905092915050565b5f600282841861275891906138a7565b8284166127659190613a9e565b905092915050565b5f818361277a9190613c6d565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156127e75760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016127de929190613cf3565b60405180910390fd5b819050919050565b5f806128226127fc610cac565b61281261280888611857565b868863ffffffff16565b87612ba99092919063ffffffff16565b91509150935093915050565b5f818361283b9190613d1a565b905092915050565b60605f61284f83612bc4565b90505f602067ffffffffffffffff81111561286d5761286c6138d7565b5b6040519080825280601f01601f19166020018201604052801561289f5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612905578060025f8282546128f99190613a9e565b925050819055506129d3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561298e578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612985939291906139cd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a1a578060025f8282540392505081905550612a64565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ac19190613171565b60405180910390a3505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b3d57612b3a600a61282e612b3584612782565b6127ef565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b8957612b86600a61276d612b8184612782565b6127ef565b50505b612ba4612b9584610a5a565b612b9e84610a5a565b83611e8a565b505050565b5f80612bb8855f018585612c12565b91509150935093915050565b5f8060ff835f1c169050601f811115612c09576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f805f858054905090505f811115612e92575f612c3b87600184612c369190613a6b565b611df2565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115612d26576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff1603612da85784612d5788600185612d529190613a6b565b611df2565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612e81565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612f72565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612fed578082015181840152602081019050612fd2565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61301282612fb6565b61301c8185612fc0565b935061302c818560208601612fd0565b61303581612ff8565b840191505092915050565b5f6020820190508181035f8301526130588184613008565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61308d82613064565b9050919050565b61309d81613083565b81146130a7575f80fd5b50565b5f813590506130b881613094565b92915050565b5f819050919050565b6130d0816130be565b81146130da575f80fd5b50565b5f813590506130eb816130c7565b92915050565b5f806040838503121561310757613106613060565b5b5f613114858286016130aa565b9250506020613125858286016130dd565b9150509250929050565b5f8115159050919050565b6131438161312f565b82525050565b5f60208201905061315c5f83018461313a565b92915050565b61316b816130be565b82525050565b5f6020820190506131845f830184613162565b92915050565b5f805f606084860312156131a1576131a0613060565b5b5f6131ae868287016130aa565b93505060206131bf868287016130aa565b92505060406131d0868287016130dd565b9150509250925092565b5f60ff82169050919050565b6131ef816131da565b82525050565b5f6020820190506132085f8301846131e6565b92915050565b5f819050919050565b6132208161320e565b82525050565b5f6020820190506132395f830184613217565b92915050565b61324881613083565b82525050565b5f6020820190506132615f83018461323f565b92915050565b5f6020828403121561327c5761327b613060565b5b5f613289848285016130aa565b91505092915050565b5f602082840312156132a7576132a6613060565b5b5f6132b4848285016130dd565b91505092915050565b5f63ffffffff82169050919050565b6132d5816132bd565b82525050565b5f6020820190506132ee5f8301846132cc565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613328816132f4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613360816130be565b82525050565b5f6133718383613357565b60208301905092915050565b5f602082019050919050565b5f6133938261332e565b61339d8185613338565b93506133a883613348565b805f5b838110156133d85781516133bf8882613366565b97506133ca8361337d565b9250506001810190506133ab565b5085935050505092915050565b5f60e0820190506133f85f83018a61331f565b818103602083015261340a8189613008565b9050818103604083015261341e8188613008565b905061342d6060830187613162565b61343a608083018661323f565b61344760a0830185613217565b81810360c08301526134598184613389565b905098975050505050505050565b5f65ffffffffffff82169050919050565b61348181613467565b82525050565b5f60208201905061349a5f830184613478565b92915050565b6134a9816131da565b81146134b3575f80fd5b50565b5f813590506134c4816134a0565b92915050565b6134d38161320e565b81146134dd575f80fd5b50565b5f813590506134ee816134ca565b92915050565b5f805f805f8060c0878903121561350e5761350d613060565b5b5f61351b89828a016130aa565b965050602061352c89828a016130dd565b955050604061353d89828a016130dd565b945050606061354e89828a016134b6565b935050608061355f89828a016134e0565b92505060a061357089828a016134e0565b9150509295509295509295565b5f805f805f805f60e0888a03121561359857613597613060565b5b5f6135a58a828b016130aa565b97505060206135b68a828b016130aa565b96505060406135c78a828b016130dd565b95505060606135d88a828b016130dd565b94505060806135e98a828b016134b6565b93505060a06135fa8a828b016134e0565b92505060c061360b8a828b016134e0565b91505092959891949750929550565b5f80604083850312156136305761362f613060565b5b5f61363d858286016130aa565b925050602061364e858286016130aa565b9150509250929050565b613661816132bd565b811461366b575f80fd5b50565b5f8135905061367c81613658565b92915050565b5f806040838503121561369857613697613060565b5b5f6136a5858286016130aa565b92505060206136b68582860161366e565b9150509250929050565b6136c981613467565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6136fd816136cf565b82525050565b604082015f8201516137175f8501826136c0565b50602082015161372a60208501826136f4565b50505050565b5f6040820190506137435f830184613703565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061378d57607f821691505b6020821081036137a05761379f613749565b5b50919050565b5f815190506137b4816130c7565b92915050565b5f602082840312156137cf576137ce613060565b5b5f6137dc848285016137a6565b91505092915050565b5f6040820190506137f85f830185613162565b6138056020830184613478565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613843826130be565b915061384e836130be565b925082820261385c816130be565b915082820484148315176138735761387261380c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138b1826130be565b91506138bc836130be565b9250826138cc576138cb61387a565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6080820190506139175f830187613217565b613924602083018661323f565b6139316040830185613162565b61393e6060830184613162565b95945050505050565b5f60c08201905061395a5f830189613217565b613967602083018861323f565b613974604083018761323f565b6139816060830186613162565b61398e6080830185613162565b61399b60a0830184613162565b979650505050505050565b5f6040820190506139b95f83018561323f565b6139c6602083018461323f565b9392505050565b5f6060820190506139e05f83018661323f565b6139ed6020830185613162565b6139fa6040830184613162565b949350505050565b5f819050919050565b5f819050919050565b5f613a2e613a29613a2484613a02565b613a0b565b6131da565b9050919050565b613a3e81613a14565b82525050565b5f604082019050613a575f830185613a35565b613a646020830184613162565b9392505050565b5f613a75826130be565b9150613a80836130be565b9250828203905081811115613a9857613a9761380c565b5b92915050565b5f613aa8826130be565b9150613ab3836130be565b9250828201905080821115613acb57613aca61380c565b5b92915050565b5f604082019050613ae45f83018561323f565b613af16020830184613162565b9392505050565b5f60a082019050613b0b5f830188613217565b613b186020830187613217565b613b256040830186613217565b613b326060830185613162565b613b3f608083018461323f565b9695505050505050565b5f604082019050613b5c5f830185613162565b613b696020830184613162565b9392505050565b5f819050919050565b5f613b93613b8e613b8984613b70565b613a0b565b6131da565b9050919050565b613ba381613b79565b82525050565b5f604082019050613bbc5f830185613b9a565b613bc96020830184613162565b9392505050565b5f608082019050613be35f830187613217565b613bf060208301866131e6565b613bfd6040830185613217565b613c0a6060830184613217565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613c77826136cf565b9150613c82836136cf565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613cb457613cb361380c565b5b92915050565b5f819050919050565b5f613cdd613cd8613cd384613cba565b613a0b565b6131da565b9050919050565b613ced81613cc3565b82525050565b5f604082019050613d065f830185613ce4565b613d136020830184613162565b9392505050565b5f613d24826136cf565b9150613d2f836136cf565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613d6157613d6061380c565b5b9291505056fea2646970667358221220c94b2cec1eed0b504ef03aaa866e71b8c8992c0fe58635afee1225b248fd6c1364736f6c63430008140033","sourceMap":"327:1500:89:-:0;;;495:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1574:52:23;;;;;;;;;;;;;;;;;1613:4;3328:431:37;;;;;;;;;;;;;;;;;1896:113:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1970:5;1962;:13;;;;;;:::i;:::-;;1995:7;1985;:17;;;;;;:::i;:::-;;1896:113;;3401:45:37;3432:13;3401:4;:30;;;;:45;;;;:::i;:::-;3393:53;;;;;;3467:51;3501:16;3467:7;:33;;;;:51;;;;:::i;:::-;3456:62;;;;;;3558:4;3542:22;;;;;;3528:36;;;;;;3607:7;3591:25;;;;;;3574:42;;;;;;3644:13;3627:30;;;;;;3692:23;:21;;;:23;;:::i;:::-;3667:48;;;;;;3747:4;3725:27;;;;;;;;;;3328:431;;1574:52:23;583:5:89::2;576:4;;:12;;;;;;;;;;;;;;;;;;613:10;598:12;;:25;;;;;;;;;;;;;;;;;;495:135:::0;327:1500;;2914:340:33;3010:11;3059:2;3043:5;3037:19;:24;3033:215;;;3084:20;3098:5;3084:13;;;:20;;:::i;:::-;3077:27;;;;3033:215;3176:5;3135:32;3161:5;3135:25;;;:32;;:::i;:::-;:38;;:46;;;;;;:::i;:::-;;1390:66;3219:17;;3195:42;;2914:340;;;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;;4239:14;;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;1708:286:33:-;1773:11;1796:17;1822:3;1796:30;;1854:2;1840:4;:11;:16;1836:72;;;1893:3;1879:18;;;;;;;;;;;:::i;:::-;;;;;;;;1836:72;1974:4;:11;1965:4;1957:13;;;:::i;:::-;1949:22;;:36;1941:45;;1917:70;;;1708:286;;;:::o;3135:202:34:-;3203:20;3311:10;3301:20;;3135:202;;;:::o;88:117:133:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;1202:99::-;1254:6;1288:5;1282:12;1272:22;;1202:99;;;:::o;1307:180::-;1355:77;1352:1;1345:88;1452:4;1449:1;1442:15;1476:4;1473:1;1466:15;1493:180;1541:77;1538:1;1531:88;1638:4;1635:1;1628:15;1662:4;1659:1;1652:15;1679:320;1723:6;1760:1;1754:4;1750:12;1740:22;;1807:1;1801:4;1797:12;1828:18;1818:81;;1884:4;1876:6;1872:17;1862:27;;1818:81;1946:2;1938:6;1935:14;1915:18;1912:38;1909:84;;1965:18;;:::i;:::-;1909:84;1730:269;1679:320;;;:::o;2005:141::-;2054:4;2077:3;2069:11;;2100:3;2097:1;2090:14;2134:4;2131:1;2121:18;2113:26;;2005:141;;;:::o;2152:93::-;2189:6;2236:2;2231;2224:5;2220:14;2216:23;2206:33;;2152:93;;;:::o;2251:107::-;2295:8;2345:5;2339:4;2335:16;2314:37;;2251:107;;;;:::o;2364:393::-;2433:6;2483:1;2471:10;2467:18;2506:97;2536:66;2525:9;2506:97;:::i;:::-;2624:39;2654:8;2643:9;2624:39;:::i;:::-;2612:51;;2696:4;2692:9;2685:5;2681:21;2672:30;;2745:4;2735:8;2731:19;2724:5;2721:30;2711:40;;2440:317;;2364:393;;;;;:::o;2763:77::-;2800:7;2829:5;2818:16;;2763:77;;;:::o;2846:60::-;2874:3;2895:5;2888:12;;2846:60;;;:::o;2912:142::-;2962:9;2995:53;3013:34;3022:24;3040:5;3022:24;:::i;:::-;3013:34;:::i;:::-;2995:53;:::i;:::-;2982:66;;2912:142;;;:::o;3060:75::-;3103:3;3124:5;3117:12;;3060:75;;;:::o;3141:269::-;3251:39;3282:7;3251:39;:::i;:::-;3312:91;3361:41;3385:16;3361:41;:::i;:::-;3353:6;3346:4;3340:11;3312:91;:::i;:::-;3306:4;3299:105;3217:193;3141:269;;;:::o;3416:73::-;3461:3;3416:73;:::o;3495:189::-;3572:32;;:::i;:::-;3613:65;3671:6;3663;3657:4;3613:65;:::i;:::-;3548:136;3495:189;;:::o;3690:186::-;3750:120;3767:3;3760:5;3757:14;3750:120;;;3821:39;3858:1;3851:5;3821:39;:::i;:::-;3794:1;3787:5;3783:13;3774:22;;3750:120;;;3690:186;;:::o;3882:543::-;3983:2;3978:3;3975:11;3972:446;;;4017:38;4049:5;4017:38;:::i;:::-;4101:29;4119:10;4101:29;:::i;:::-;4091:8;4087:44;4284:2;4272:10;4269:18;4266:49;;;4305:8;4290:23;;4266:49;4328:80;4384:22;4402:3;4384:22;:::i;:::-;4374:8;4370:37;4357:11;4328:80;:::i;:::-;3987:431;;3972:446;3882:543;;;:::o;4431:117::-;4485:8;4535:5;4529:4;4525:16;4504:37;;4431:117;;;;:::o;4554:169::-;4598:6;4631:51;4679:1;4675:6;4667:5;4664:1;4660:13;4631:51;:::i;:::-;4627:56;4712:4;4706;4702:15;4692:25;;4605:118;4554:169;;;;:::o;4728:295::-;4804:4;4950:29;4975:3;4969:4;4950:29;:::i;:::-;4942:37;;5012:3;5009:1;5005:11;4999:4;4996:21;4988:29;;4728:295;;;;:::o;5028:1395::-;5145:37;5178:3;5145:37;:::i;:::-;5247:18;5239:6;5236:30;5233:56;;;5269:18;;:::i;:::-;5233:56;5313:38;5345:4;5339:11;5313:38;:::i;:::-;5398:67;5458:6;5450;5444:4;5398:67;:::i;:::-;5492:1;5516:4;5503:17;;5548:2;5540:6;5537:14;5565:1;5560:618;;;;6222:1;6239:6;6236:77;;;6288:9;6283:3;6279:19;6273:26;6264:35;;6236:77;6339:67;6399:6;6392:5;6339:67;:::i;:::-;6333:4;6326:81;6195:222;5530:887;;5560:618;5612:4;5608:9;5600:6;5596:22;5646:37;5678:4;5646:37;:::i;:::-;5705:1;5719:208;5733:7;5730:1;5727:14;5719:208;;;5812:9;5807:3;5803:19;5797:26;5789:6;5782:42;5863:1;5855:6;5851:14;5841:24;;5910:2;5899:9;5895:18;5882:31;;5756:4;5753:1;5749:12;5744:17;;5719:208;;;5955:6;5946:7;5943:19;5940:179;;;6013:9;6008:3;6004:19;5998:26;6056:48;6098:4;6090:6;6086:17;6075:9;6056:48;:::i;:::-;6048:6;6041:64;5963:156;5940:179;6165:1;6161;6153:6;6149:14;6145:22;6139:4;6132:36;5567:611;;;5530:887;;5120:1303;;;5028:1395;;:::o;6429:77::-;6466:7;6495:5;6484:16;;6429:77;;;:::o;6512:118::-;6599:24;6617:5;6599:24;:::i;:::-;6594:3;6587:37;6512:118;;:::o;6636:::-;6723:24;6741:5;6723:24;:::i;:::-;6718:3;6711:37;6636:118;;:::o;6760:::-;6847:24;6865:5;6847:24;:::i;:::-;6842:3;6835:37;6760:118;;:::o;6884:664::-;7089:4;7127:3;7116:9;7112:19;7104:27;;7141:71;7209:1;7198:9;7194:17;7185:6;7141:71;:::i;:::-;7222:72;7290:2;7279:9;7275:18;7266:6;7222:72;:::i;:::-;7304;7372:2;7361:9;7357:18;7348:6;7304:72;:::i;:::-;7386;7454:2;7443:9;7439:18;7430:6;7386:72;:::i;:::-;7468:73;7536:3;7525:9;7521:19;7512:6;7468:73;:::i;:::-;6884:664;;;;;;;;:::o;7554:169::-;7638:11;7672:6;7667:3;7660:19;7712:4;7707:3;7703:14;7688:29;;7554:169;;;;:::o;7729:246::-;7810:1;7820:113;7834:6;7831:1;7828:13;7820:113;;;7919:1;7914:3;7910:11;7904:18;7900:1;7895:3;7891:11;7884:39;7856:2;7853:1;7849:10;7844:15;;7820:113;;;7967:1;7958:6;7953:3;7949:16;7942:27;7791:184;7729:246;;;:::o;7981:102::-;8022:6;8073:2;8069:7;8064:2;8057:5;8053:14;8049:28;8039:38;;7981:102;;;:::o;8089:377::-;8177:3;8205:39;8238:5;8205:39;:::i;:::-;8260:71;8324:6;8319:3;8260:71;:::i;:::-;8253:78;;8340:65;8398:6;8393:3;8386:4;8379:5;8375:16;8340:65;:::i;:::-;8430:29;8452:6;8430:29;:::i;:::-;8425:3;8421:39;8414:46;;8181:285;8089:377;;;;:::o;8472:313::-;8585:4;8623:2;8612:9;8608:18;8600:26;;8672:9;8666:4;8662:20;8658:1;8647:9;8643:17;8636:47;8700:78;8773:4;8764:6;8700:78;:::i;:::-;8692:86;;8472:313;;;;:::o;8791:98::-;8842:6;8876:5;8870:12;8860:22;;8791:98;;;:::o;8895:116::-;8946:4;8969:3;8961:11;;8999:4;8994:3;8990:14;8982:22;;8895:116;;;:::o;9017:154::-;9060:11;9096:29;9120:3;9114:10;9096:29;:::i;:::-;9159:5;9135:29;;9072:99;9017:154;;;:::o;9177:594::-;9261:5;9292:38;9324:5;9292:38;:::i;:::-;9355:5;9382:40;9416:5;9382:40;:::i;:::-;9370:52;;9441:35;9467:8;9441:35;:::i;:::-;9432:44;;9500:2;9492:6;9489:14;9486:278;;;9571:169;9656:66;9626:6;9622:2;9618:15;9615:1;9611:23;9571:169;:::i;:::-;9548:5;9527:227;9518:236;;9486:278;9267:504;;9177:594;;;:::o;327:1500:89:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106101e3575f3560e01c80636fcfff451161010d5780639dc29fac116100a0578063c4d66de81161006f578063c4d66de8146105e7578063d505accf14610603578063dd62ed3e1461061f578063f1127ed81461064f576101e3565b80639dc29fac1461054f578063a82487681461056b578063a9059cbb1461059b578063c3cda520146105cb576101e3565b80638e539e8c116100dc5780638e539e8c146104b357806391ddadf4146104e357806395d89b41146105015780639ab24eb01461051f576101e3565b80636fcfff45146103ff57806370a082311461042f5780637ecebe001461045f57806384b0196e1461048f576101e3565b80633a46b1a8116101855780634cf088d9116101545780634cf088d914610365578063587cde1e146103835780635c19a95c146103b357806366a5236c146103cf576101e3565b80633a46b1a8146102dd57806340c10f191461030d57806345c57eb5146103295780634bf5d7e914610347576101e3565b806323b872dd116101c157806323b872dd146102535780632986c0e514610283578063313ce567146102a15780633644e515146102bf576101e3565b806306fdde03146101e7578063095ea7b31461020557806318160ddd14610235575b5f80fd5b6101ef61067f565b6040516101fc9190613040565b60405180910390f35b61021f600480360381019061021a91906130f1565b61070f565b60405161022c9190613149565b60405180910390f35b61023d610731565b60405161024a9190613171565b60405180910390f35b61026d6004803603810190610268919061318a565b61073a565b60405161027a9190613149565b60405180910390f35b61028b610768565b6040516102989190613171565b60405180910390f35b6102a96107fc565b6040516102b691906131f5565b60405180910390f35b6102c7610804565b6040516102d49190613226565b60405180910390f35b6102f760048036038101906102f291906130f1565b610812565b6040516103049190613171565b60405180910390f35b610327600480360381019061032291906130f1565b6108e8565b005b61033161097c565b60405161033e919061324e565b60405180910390f35b61034f6109a1565b60405161035c9190613040565b60405180910390f35b61036d610a35565b60405161037a919061324e565b60405180910390f35b61039d60048036038101906103989190613267565b610a5a565b6040516103aa919061324e565b60405180910390f35b6103cd60048036038101906103c89190613267565b610abf565b005b6103e960048036038101906103e49190613292565b610ad8565b6040516103f69190613171565b60405180910390f35b61041960048036038101906104149190613267565b610b06565b60405161042691906132db565b60405180910390f35b61044960048036038101906104449190613267565b610b17565b6040516104569190613171565b60405180910390f35b61047960048036038101906104749190613267565b610b5c565b6040516104869190613171565b60405180910390f35b610497610b6d565b6040516104aa97969594939291906133e5565b60405180910390f35b6104cd60048036038101906104c89190613292565b610c12565b6040516104da9190613171565b60405180910390f35b6104eb610cac565b6040516104f89190613487565b60405180910390f35b610509610cba565b6040516105169190613040565b60405180910390f35b61053960048036038101906105349190613267565b610d4a565b6040516105469190613171565b60405180910390f35b610569600480360381019061056491906130f1565b610db3565b005b61058560048036038101906105809190613292565b610e47565b6040516105929190613171565b60405180910390f35b6105b560048036038101906105b091906130f1565b610e75565b6040516105c29190613149565b60405180910390f35b6105e560048036038101906105e091906134f4565b610e97565b005b61060160048036038101906105fc9190613267565b610f5c565b005b61061d6004803603810190610618919061357d565b611065565b005b6106396004803603810190610634919061361a565b6111aa565b6040516106469190613171565b60405180910390f35b61066960048036038101906106649190613682565b61122c565b6040516106769190613730565b60405180910390f35b60606003805461068e90613776565b80601f01602080910402602001604051908101604052809291908181526020018280546106ba90613776565b80156107055780601f106106dc57610100808354040283529160200191610705565b820191905f5260205f20905b8154815290600101906020018083116106e857829003601f168201915b5050505050905090565b5f80610719611246565b905061072681858561124d565b600191505092915050565b5f600254905090565b5f80610744611246565b905061075185828561125f565b61075c8585856112f1565b60019150509392505050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632986c0e56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f791906137ba565b905090565b5f6012905090565b5f61080d6113e1565b905090565b5f8061081c610cac565b90508065ffffffffffff16831061086c5782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016108639291906137e5565b60405180910390fd5b6108c361087884611497565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206114f090919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096e576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097882826115dd565b5050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606109ab61165c565b65ffffffffffff166109bb610cac565b65ffffffffffff16146109fa576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ac8611246565b9050610ad4818361166b565b5050565b5f610ae1610768565b670de0b6b3a764000083610af59190613839565b610aff91906138a7565b9050919050565b5f610b108261177b565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f610b66826117d0565b9050919050565b5f6060805f805f6060610b7e6117e1565b610b8661181c565b46305f801b5f67ffffffffffffffff811115610ba557610ba46138d7565b5b604051908082528060200260200182016040528015610bd35781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f80610c1c610cac565b90508065ffffffffffff168310610c6c5782816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610c639291906137e5565b60405180910390fd5b610c88610c7884611497565b600a6114f090919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f610cb561165c565b905090565b606060048054610cc990613776565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf590613776565b8015610d405780601f10610d1757610100808354040283529160200191610d40565b820191905f5260205f20905b815481529060010190602001808311610d2357829003601f168201915b5050505050905090565b5f610d9060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611857565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4382826118b9565b5050565b5f670de0b6b3a7640000610e59610768565b83610e649190613839565b610e6e91906138a7565b9050919050565b5f80610e7f611246565b9050610e8c8185856112f1565b600191505092915050565b83421115610edc57836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610ed39190613171565b60405180910390fd5b5f610f3d610f357fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610f1a9493929190613904565b60405160208183030381529060405280519060200120611938565b858585611951565b9050610f49818761197f565b610f53818861166b565b50505050505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fe2576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b834211156110aa57836040517f627913020000000000000000000000000000000000000000000000000000000081526004016110a19190613171565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886110d88c6119d6565b896040516020016110ee96959493929190613947565b6040516020818303038152906040528051906020012090505f61111082611938565b90505f61111f82878787611951565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461119357808a6040517f4b800e4600000000000000000000000000000000000000000000000000000000815260040161118a9291906139a6565b60405180910390fd5b61119e8a8a8a61124d565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611234612f7a565b61123e8383611a29565b905092915050565b5f33905090565b61125a8383836001611a88565b505050565b5f61126a84846111aa565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112eb57818110156112dc578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112d3939291906139cd565b60405180910390fd5b6112ea84848484035f611a88565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611361575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611358919061324e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d1575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016113c8919061324e565b60405180910390fd5b6113dc838383611c57565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561145c57507f000000000000000000000000000000000000000000000000000000000000000046145b15611489577f00000000000000000000000000000000000000000000000000000000000000009050611494565b611491611c67565b90505b90565b5f65ffffffffffff80168211156114e8576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016114df929190613a44565b60405180910390fd5b819050919050565b5f80835f018054905090505f808290506005831115611571575f61151384611cfc565b8461151e9190613a6b565b905061152c875f0182611df2565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561155f5780915061156f565b60018161156c9190613a9e565b92505b505b5f611580875f01878585611e04565b90505f81146115cf576115a1875f0160018361159c9190613a6b565b611df2565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166115d1565b5f5b94505050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361164d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611644919061324e565b60405180910390fd5b6116585f8383611c57565b5050565b5f61166643611497565b905090565b5f61167583610a5a565b90508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611776818361177186611e79565b611e8a565b505050565b5f6117c96117c460095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206120fa565b612109565b9050919050565b5f6117da82612160565b9050919050565b606061181760057f00000000000000000000000000000000000000000000000000000000000000006121a690919063ffffffff16565b905090565b606061185260067f00000000000000000000000000000000000000000000000000000000000000006121a690919063ffffffff16565b905090565b5f80825f018054905090505f81146118af57611881835f0160018361187c9190613a6b565b611df2565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166118b1565b5f5b915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611929575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611920919061324e565b60405180910390fd5b611934825f83611c57565b5050565b5f61194a6119446113e1565b83612253565b9050919050565b5f805f8061196188888888612293565b925092509250611971828261237a565b829350505050949350505050565b5f611989836119d6565b90508082146119d15782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016119c8929190613ad1565b60405180910390fd5b505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b611a31612f7a565b611a808260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206124dc90919063ffffffff16565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611af8575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611aef919061324e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b68575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611b5f919061324e565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611c51578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611c489190613171565b60405180910390a35b50505050565b611c628383836125ab565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611ce1959493929190613af8565b60405160208183030381529060405280519060200120905090565b5f808203611d0c575f9050611ded565b5f6001611d1884612659565b901c6001901b90506001818481611d3257611d3161387a565b5b048201901c90506001818481611d4b57611d4a61387a565b5b048201901c90506001818481611d6457611d6361387a565b5b048201901c90506001818481611d7d57611d7c61387a565b5b048201901c90506001818481611d9657611d9561387a565b5b048201901c90506001818481611daf57611dae61387a565b5b048201901c90506001818481611dc857611dc761387a565b5b048201901c9050611de981828581611de357611de261387a565b5b04612730565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015611e6e575f611e198484612748565b90508465ffffffffffff16611e2e8783611df2565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff161115611e5857809250611e68565b600181611e659190613a9e565b93505b50611e06565b819050949350505050565b5f611e8382610b17565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ec557505f81115b156120f5575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611fdf575f80611f5060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061276d611f4b86612782565b6127ef565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611fd4929190613b49565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120f4575f8061206560095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061282e61206086612782565b6127ef565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516120e9929190613b49565b60405180910390a250505b5b505050565b5f815f01805490509050919050565b5f63ffffffff8016821115612158576020826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161214f929190613ba9565b60405180910390fd5b819050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060ff5f1b83146121c2576121bb83612843565b905061224d565b8180546121ce90613776565b80601f01602080910402602001604051908101604052809291908181526020018280546121fa90613776565b80156122455780601f1061221c57610100808354040283529160200191612245565b820191905f5260205f20905b81548152906001019060200180831161222857829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156122cf575f600385925092509250612370565b5f6001888888886040515f81526020016040526040516122f29493929190613bd0565b6020604051602081039080840390855afa158015612312573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612363575f60015f801b93509350935050612370565b805f805f1b935093509350505b9450945094915050565b5f600381111561238d5761238c613c13565b5b8260038111156123a05761239f613c13565b5b03156124d857600160038111156123ba576123b9613c13565b5b8260038111156123cd576123cc613c13565b5b03612404576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561241857612417613c13565b5b82600381111561242b5761242a613c13565b5b0361246f57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016124669190613171565b60405180910390fd5b60038081111561248257612481613c13565b5b82600381111561249557612494613c13565b5b036124d757806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016124ce9190613226565b60405180910390fd5b5b5050565b6124e4612f7a565b825f018263ffffffff16815481106124ff576124fe613c40565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b6125b68383836128b5565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612649575f6125f2610731565b90505f6125fd612ace565b9050808211156126465781816040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260040161263d929190613b49565b60405180910390fd5b50505b612654838383612af1565b505050565b5f805f90505f608084901c111561267857608083901c92506080810190505b5f604084901c111561269257604083901c92506040810190505b5f602084901c11156126ac57602083901c92506020810190505b5f601084901c11156126c657601083901c92506010810190505b5f600884901c11156126e057600883901c92506008810190505b5f600484901c11156126fa57600483901c92506004810190505b5f600284901c111561271457600283901c92506002810190505b5f600184901c1115612727576001810190505b80915050919050565b5f81831061273e5781612740565b825b905092915050565b5f600282841861275891906138a7565b8284166127659190613a9e565b905092915050565b5f818361277a9190613c6d565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156127e75760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016127de929190613cf3565b60405180910390fd5b819050919050565b5f806128226127fc610cac565b61281261280888611857565b868863ffffffff16565b87612ba99092919063ffffffff16565b91509150935093915050565b5f818361283b9190613d1a565b905092915050565b60605f61284f83612bc4565b90505f602067ffffffffffffffff81111561286d5761286c6138d7565b5b6040519080825280601f01601f19166020018201604052801561289f5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612905578060025f8282546128f99190613a9e565b925050819055506129d3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561298e578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612985939291906139cd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a1a578060025f8282540392505081905550612a64565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ac19190613171565b60405180910390a3505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b3d57612b3a600a61282e612b3584612782565b6127ef565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b8957612b86600a61276d612b8184612782565b6127ef565b50505b612ba4612b9584610a5a565b612b9e84610a5a565b83611e8a565b505050565b5f80612bb8855f018585612c12565b91509150935093915050565b5f8060ff835f1c169050601f811115612c09576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f805f858054905090505f811115612e92575f612c3b87600184612c369190613a6b565b611df2565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115612d26576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff1603612da85784612d5788600185612d529190613a6b565b611df2565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612e81565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612f72565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612fed578082015181840152602081019050612fd2565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61301282612fb6565b61301c8185612fc0565b935061302c818560208601612fd0565b61303581612ff8565b840191505092915050565b5f6020820190508181035f8301526130588184613008565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61308d82613064565b9050919050565b61309d81613083565b81146130a7575f80fd5b50565b5f813590506130b881613094565b92915050565b5f819050919050565b6130d0816130be565b81146130da575f80fd5b50565b5f813590506130eb816130c7565b92915050565b5f806040838503121561310757613106613060565b5b5f613114858286016130aa565b9250506020613125858286016130dd565b9150509250929050565b5f8115159050919050565b6131438161312f565b82525050565b5f60208201905061315c5f83018461313a565b92915050565b61316b816130be565b82525050565b5f6020820190506131845f830184613162565b92915050565b5f805f606084860312156131a1576131a0613060565b5b5f6131ae868287016130aa565b93505060206131bf868287016130aa565b92505060406131d0868287016130dd565b9150509250925092565b5f60ff82169050919050565b6131ef816131da565b82525050565b5f6020820190506132085f8301846131e6565b92915050565b5f819050919050565b6132208161320e565b82525050565b5f6020820190506132395f830184613217565b92915050565b61324881613083565b82525050565b5f6020820190506132615f83018461323f565b92915050565b5f6020828403121561327c5761327b613060565b5b5f613289848285016130aa565b91505092915050565b5f602082840312156132a7576132a6613060565b5b5f6132b4848285016130dd565b91505092915050565b5f63ffffffff82169050919050565b6132d5816132bd565b82525050565b5f6020820190506132ee5f8301846132cc565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613328816132f4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613360816130be565b82525050565b5f6133718383613357565b60208301905092915050565b5f602082019050919050565b5f6133938261332e565b61339d8185613338565b93506133a883613348565b805f5b838110156133d85781516133bf8882613366565b97506133ca8361337d565b9250506001810190506133ab565b5085935050505092915050565b5f60e0820190506133f85f83018a61331f565b818103602083015261340a8189613008565b9050818103604083015261341e8188613008565b905061342d6060830187613162565b61343a608083018661323f565b61344760a0830185613217565b81810360c08301526134598184613389565b905098975050505050505050565b5f65ffffffffffff82169050919050565b61348181613467565b82525050565b5f60208201905061349a5f830184613478565b92915050565b6134a9816131da565b81146134b3575f80fd5b50565b5f813590506134c4816134a0565b92915050565b6134d38161320e565b81146134dd575f80fd5b50565b5f813590506134ee816134ca565b92915050565b5f805f805f8060c0878903121561350e5761350d613060565b5b5f61351b89828a016130aa565b965050602061352c89828a016130dd565b955050604061353d89828a016130dd565b945050606061354e89828a016134b6565b935050608061355f89828a016134e0565b92505060a061357089828a016134e0565b9150509295509295509295565b5f805f805f805f60e0888a03121561359857613597613060565b5b5f6135a58a828b016130aa565b97505060206135b68a828b016130aa565b96505060406135c78a828b016130dd565b95505060606135d88a828b016130dd565b94505060806135e98a828b016134b6565b93505060a06135fa8a828b016134e0565b92505060c061360b8a828b016134e0565b91505092959891949750929550565b5f80604083850312156136305761362f613060565b5b5f61363d858286016130aa565b925050602061364e858286016130aa565b9150509250929050565b613661816132bd565b811461366b575f80fd5b50565b5f8135905061367c81613658565b92915050565b5f806040838503121561369857613697613060565b5b5f6136a5858286016130aa565b92505060206136b68582860161366e565b9150509250929050565b6136c981613467565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6136fd816136cf565b82525050565b604082015f8201516137175f8501826136c0565b50602082015161372a60208501826136f4565b50505050565b5f6040820190506137435f830184613703565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061378d57607f821691505b6020821081036137a05761379f613749565b5b50919050565b5f815190506137b4816130c7565b92915050565b5f602082840312156137cf576137ce613060565b5b5f6137dc848285016137a6565b91505092915050565b5f6040820190506137f85f830185613162565b6138056020830184613478565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613843826130be565b915061384e836130be565b925082820261385c816130be565b915082820484148315176138735761387261380c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138b1826130be565b91506138bc836130be565b9250826138cc576138cb61387a565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6080820190506139175f830187613217565b613924602083018661323f565b6139316040830185613162565b61393e6060830184613162565b95945050505050565b5f60c08201905061395a5f830189613217565b613967602083018861323f565b613974604083018761323f565b6139816060830186613162565b61398e6080830185613162565b61399b60a0830184613162565b979650505050505050565b5f6040820190506139b95f83018561323f565b6139c6602083018461323f565b9392505050565b5f6060820190506139e05f83018661323f565b6139ed6020830185613162565b6139fa6040830184613162565b949350505050565b5f819050919050565b5f819050919050565b5f613a2e613a29613a2484613a02565b613a0b565b6131da565b9050919050565b613a3e81613a14565b82525050565b5f604082019050613a575f830185613a35565b613a646020830184613162565b9392505050565b5f613a75826130be565b9150613a80836130be565b9250828203905081811115613a9857613a9761380c565b5b92915050565b5f613aa8826130be565b9150613ab3836130be565b9250828201905080821115613acb57613aca61380c565b5b92915050565b5f604082019050613ae45f83018561323f565b613af16020830184613162565b9392505050565b5f60a082019050613b0b5f830188613217565b613b186020830187613217565b613b256040830186613217565b613b326060830185613162565b613b3f608083018461323f565b9695505050505050565b5f604082019050613b5c5f830185613162565b613b696020830184613162565b9392505050565b5f819050919050565b5f613b93613b8e613b8984613b70565b613a0b565b6131da565b9050919050565b613ba381613b79565b82525050565b5f604082019050613bbc5f830185613b9a565b613bc96020830184613162565b9392505050565b5f608082019050613be35f830187613217565b613bf060208301866131e6565b613bfd6040830185613217565b613c0a6060830184613217565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613c77826136cf565b9150613c82836136cf565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613cb457613cb361380c565b5b92915050565b5f819050919050565b5f613cdd613cd8613cd384613cba565b613a0b565b6131da565b9050919050565b613ced81613cc3565b82525050565b5f604082019050613d065f830185613ce4565b613d136020830184613162565b9392505050565b5f613d24826136cf565b9150613d2f836136cf565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613d6157613d6061380c565b5b9291505056fea2646970667358221220c94b2cec1eed0b504ef03aaa866e71b8c8992c0fe58635afee1225b248fd6c1364736f6c63430008140033","sourceMap":"327:1500:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5039:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1168:99:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3002:82:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2656:112:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3922:364:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;828:162:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;426:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3040:272:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;389:31:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5539:117:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5738:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1404:123:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3208:126:24;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3299:116:21;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1683:142:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:557:37;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;4922:341:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2789:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2276:93:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3402:135:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;996:166:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1273:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3610:178:21;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5954:554:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;636:186:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1680:672:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3846:140:21;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3411:163:24;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2074:89:21;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;4382:13;4398:12;:10;:12::i;:::-;4382:28;;4420:31;4429:5;4436:7;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;:::o;3144:97::-;3196:7;3222:12;;3215:19;;3144:97;:::o;5039:244::-;5126:4;5142:15;5160:12;:10;:12::i;:::-;5142:30;;5182:37;5198:4;5204:7;5213:5;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;:::o;1168:99:89:-;1215:7;1247:4;;;;;;;;;;;1241:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1234:26;;1168:99;:::o;3002:82:21:-;3051:5;3075:2;3068:9;;3002:82;:::o;2656:112:23:-;2715:7;2741:20;:18;:20::i;:::-;2734:27;;2656:112;:::o;3922:364:12:-;4009:7;4028:23;4054:7;:5;:7::i;:::-;4028:33;;4088:16;4075:29;;:9;:29;4071:115;;4147:9;4158:16;4127:48;;;;;;;;;;;;:::i;:::-;;;;;;;;4071:115;4202:77;4250:28;4268:9;4250:17;:28::i;:::-;4202:20;:29;4223:7;4202:29;;;;;;;;;;;;;;;:47;;:77;;;;:::i;:::-;4195:84;;;;;3922:364;;;;:::o;828:162:89:-;918:7;;;;;;;;;;;904:21;;:10;:21;;;900:54;;934:20;;;;;;;;;;;;;;900:54;964:19;970:3;975:7;964:5;:19::i;:::-;828:162;;:::o;426:28::-;;;;;;;;;;;;;:::o;3040:272:12:-;3091:13;3180:18;:16;:18::i;:::-;3169:29;;:7;:5;:7::i;:::-;:29;;;3165:93;;3221:26;;;;;;;;;;;;;;3165:93;3267:38;;;;;;;;;;;;;;;;;;;3040:272;:::o;389:31:89:-;;;;;;;;;;;;;:::o;5539:117:12:-;5604:7;5630:10;:19;5641:7;5630:19;;;;;;;;;;;;;;;;;;;;;;;;;5623:26;;5539:117;;;:::o;5738:138::-;5800:15;5818:12;:10;:12::i;:::-;5800:30;;5840:29;5850:7;5859:9;5840;:29::i;:::-;5790:86;5738:138;:::o;1404:123:89:-;1470:7;1513;:5;:7::i;:::-;1506:4;1496:7;:14;;;;:::i;:::-;:24;;;;:::i;:::-;1489:31;;1404:123;;;:::o;3208:126:24:-;3278:6;3303:24;3319:7;3303:15;:24::i;:::-;3296:31;;3208:126;;;:::o;3299:116:21:-;3364:7;3390:9;:18;3400:7;3390:18;;;;;;;;;;;;;;;;3383:25;;3299:116;;;:::o;1683:142:89:-;1773:7;1799:19;1812:5;1799:12;:19::i;:::-;1792:26;;1683:142;;;:::o;5144:557:37:-;5242:13;5269:18;5301:21;5336:15;5365:25;5404:12;5430:27;5533:13;:11;:13::i;:::-;5560:16;:14;:16::i;:::-;5590:13;5625:4;5652:1;5644:10;;5682:1;5668:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:212;;;;;;;;;;;;;;;;;;;;;5144:557;;;;;;;:::o;4922:341:12:-;4998:7;5017:23;5043:7;:5;:7::i;:::-;5017:33;;5077:16;5064:29;;:9;:29;5060:115;;5136:9;5147:16;5116:48;;;;;;;;;;;;:::i;:::-;;;;;;;;5060:115;5191:65;5227:28;5245:9;5227:17;:28::i;:::-;5191:17;:35;;:65;;;;:::i;:::-;5184:72;;;;;4922:341;;;:::o;2789:96::-;2835:6;2860:18;:16;:18::i;:::-;2853:25;;2789:96;:::o;2276:93:21:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;3402:135:12:-;3466:7;3492:38;:20;:29;3513:7;3492:29;;;;;;;;;;;;;;;:36;:38::i;:::-;3485:45;;;;3402:135;;;:::o;996:166:89:-;1088:7;;;;;;;;;;;1074:21;;:10;:21;;;1070:54;;1104:20;;;;;;;;;;;;;;1070:54;1134:21;1140:5;1147:7;1134:5;:21::i;:::-;996:166;;:::o;1273:125::-;1341:7;1387:4;1377:7;:5;:7::i;:::-;1367;:17;;;;:::i;:::-;:24;;;;:::i;:::-;1360:31;;1273:125;;;:::o;3610:178:21:-;3679:4;3695:13;3711:12;:10;:12::i;:::-;3695:28;;3733:27;3743:5;3750:2;3754:5;3733:9;:27::i;:::-;3777:4;3770:11;;;3610:178;;;;:::o;5954:554:12:-;6159:6;6141:15;:24;6137:91;;;6210:6;6188:29;;;;;;;;;;;:::i;:::-;;;;;;;;6137:91;6237:14;6254:168;6281:86;2063:71;6340:9;6351:5;6358:6;6308:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6298:68;;;;;;6281:16;:86::i;:::-;6381:1;6396;6411;6254:13;:168::i;:::-;6237:185;;6432:31;6449:6;6457:5;6432:16;:31::i;:::-;6473:28;6483:6;6491:9;6473;:28::i;:::-;6127:381;5954:554;;;;;;:::o;636:186:89:-;711:12;;;;;;;;;;;697:26;;:10;:26;;;693:59;;732:20;;;;;;;;;;;;;;693:59;772:8;762:7;;:18;;;;;;;;;;;;;;;;;;813:1;790:12;;:25;;;;;;;;;;;;;;;;;;636:186;:::o;1680:672:23:-;1901:8;1883:15;:26;1879:97;;;1956:8;1932:33;;;;;;;;;;;:::i;:::-;;;;;;;;1879:97;1986:18;1022:95;2045:5;2052:7;2061:5;2068:16;2078:5;2068:9;:16::i;:::-;2086:8;2017:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2007:89;;;;;;1986:110;;2107:12;2122:28;2139:10;2122:16;:28::i;:::-;2107:43;;2161:14;2178:28;2192:4;2198:1;2201;2204;2178:13;:28::i;:::-;2161:45;;2230:5;2220:15;;:6;:15;;;2216:88;;2279:6;2287:5;2258:35;;;;;;;;;;;;:::i;:::-;;;;;;;;2216:88;2314:31;2323:5;2330:7;2339:5;2314:8;:31::i;:::-;1869:483;;;1680:672;;;;;;;:::o;3846:140:21:-;3926:7;3952:11;:18;3964:5;3952:18;;;;;;;;;;;;;;;:27;3971:7;3952:27;;;;;;;;;;;;;;;;3945:34;;3846:140;;;;:::o;3411:163:24:-;3490:32;;:::i;:::-;3541:26;3554:7;3563:3;3541:12;:26::i;:::-;3534:33;;3411:163;;;;:::o;656:96:31:-;709:7;735:10;728:17;;656:96;:::o;8989:128:21:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;10663:477::-;10762:24;10789:25;10799:5;10806:7;10789:9;:25::i;:::-;10762:52;;10848:17;10828:16;:37;10824:310;;10904:5;10885:16;:24;10881:130;;;10963:7;10972:16;10990:5;10936:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10881:130;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;:::-;10824:310;10752:388;10663:477;;;:::o;5656:300::-;5755:1;5739:18;;:4;:18;;;5735:86;;5807:1;5780:30;;;;;;;;;;;:::i;:::-;;;;;;;;5735:86;5848:1;5834:16;;:2;:16;;;5830:86;;5902:1;5873:32;;;;;;;;;;;:::i;:::-;;;;;;;;5830:86;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;:::-;5656:300;;;:::o;3845:262:37:-;3898:7;3938:11;3921:28;;3929:4;3921:28;;;:63;;;;;3970:14;3953:13;:31;3921:63;3917:184;;;4007:22;4000:29;;;;3917:184;4067:23;:21;:23::i;:::-;4060:30;;3845:262;;:::o;14291:213:43:-;14347:6;14377:16;14369:24;;:5;:24;14365:103;;;14447:2;14451:5;14416:41;;;;;;;;;;;;:::i;:::-;;;;;;;;14365:103;14491:5;14477:20;;14291:213;;;:::o;9441:606:45:-;9526:7;9545:11;9559:4;:17;;:24;;;;9545:38;;9594:11;9619:12;9634:3;9619:18;;9658:1;9652:3;:7;9648:234;;;9675:11;9695:14;9705:3;9695:9;:14::i;:::-;9689:3;:20;;;;:::i;:::-;9675:34;;9733:37;9747:4;:17;;9766:3;9733:13;:37::i;:::-;:42;;;;;;;;;;;;9727:48;;:3;:48;;;9723:149;;;9802:3;9795:10;;9723:149;;;9856:1;9850:3;:7;;;;:::i;:::-;9844:13;;9723:149;9661:221;9648:234;9892:11;9906:53;9925:4;:17;;9944:3;9949;9954:4;9906:18;:53::i;:::-;9892:67;;9984:1;9977:3;:8;:63;;9992:41;10006:4;:17;;10031:1;10025:3;:7;;;;:::i;:::-;9992:13;:41::i;:::-;:48;;;;;;;;;;;;9977:63;;;9988:1;9977:63;9970:70;;;;;;9441:606;;;;:::o;7721:208:21:-;7810:1;7791:21;;:7;:21;;;7787:91;;7864:1;7835:32;;;;;;;;;;;:::i;:::-;;;;;;;;7787:91;7887:35;7903:1;7907:7;7916:5;7887:7;:35::i;:::-;7721:208;;:::o;931:109:47:-;977:6;1002:31;1020:12;1002:17;:31::i;:::-;995:38;;931:109;:::o;6686:312:12:-;6768:19;6790:18;6800:7;6790:9;:18::i;:::-;6768:40;;6840:9;6818:10;:19;6829:7;6818:19;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;6903:9;6865:48;;6890:11;6865:48;;6881:7;6865:48;;;;;;;;;;;;6923:68;6942:11;6955:9;6966:24;6982:7;6966:15;:24::i;:::-;6923:18;:68::i;:::-;6758:240;6686:312;;:::o;8572:162::-;8645:6;8670:57;8688:38;:20;:29;8709:7;8688:29;;;;;;;;;;;;;;;:36;:38::i;:::-;8670:17;:57::i;:::-;8663:64;;8572:162;;;:::o;2406:143:23:-;2497:7;2523:19;2536:5;2523:12;:19::i;:::-;2516:26;;2406:143;;;:::o;6021:126:37:-;6067:13;6099:41;6126:13;6099:5;:26;;:41;;;;:::i;:::-;6092:48;;6021:126;:::o;6473:135::-;6522:13;6554:47;6584:16;6554:8;:29;;:47;;;;:::i;:::-;6547:54;;6473:135;:::o;10167:206:45:-;10229:7;10248:11;10262:4;:17;;:24;;;;10248:38;;10310:1;10303:3;:8;:63;;10318:41;10332:4;:17;;10357:1;10351:3;:7;;;;:::i;:::-;10318:13;:41::i;:::-;:48;;;;;;;;;;;;10303:63;;;10314:1;10303:63;10296:70;;;10167:206;;;:::o;8247::21:-;8336:1;8317:21;;:7;:21;;;8313:89;;8388:1;8361:30;;;;;;;;;;;:::i;:::-;;;;;;;;8313:89;8411:35;8419:7;8436:1;8440:5;8411:7;:35::i;:::-;8247:206;;:::o;4917:176:37:-;4994:7;5020:66;5053:20;:18;:20::i;:::-;5075:10;5020:32;:66::i;:::-;5013:73;;4917:176;;;:::o;6803:260:36:-;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;7047:9;7040:16;;;;;6803:260;;;;;;:::o;1265:222:32:-;1348:15;1366:16;1376:5;1366:9;:16::i;:::-;1348:34;;1405:7;1396:5;:16;1392:89;;1455:5;1462:7;1435:35;;;;;;;;;;;;:::i;:::-;;;;;;;;1392:89;1338:149;1265:222;;:::o;759:395::-;819:7;1121;:14;1129:5;1121:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;1114:23;;759:395;;;:::o;8811:199:12:-;8915:32;;:::i;:::-;8966:37;8999:3;8966:20;:29;8987:7;8966:29;;;;;;;;;;;;;;;:32;;:37;;;;:::i;:::-;8959:44;;8811:199;;;;:::o;9949:432:21:-;10078:1;10061:19;;:5;:19;;;10057:89;;10132:1;10103:32;;;;;;;;;;;:::i;:::-;;;;;;;;10057:89;10178:1;10159:21;;:7;:21;;;10155:90;;10231:1;10203:31;;;;;;;;;;;:::i;:::-;;;;;;;;10155:90;10284:5;10254:11;:18;10266:5;10254:18;;;;;;;;;;;;;;;:27;10273:7;10254:27;;;;;;;;;;;;;;;:35;;;;10303:9;10299:76;;;10349:7;10333:31;;10342:5;10333:31;;;10358:5;10333:31;;;;;;:::i;:::-;;;;;;;;10299:76;9949:432;;;;:::o;1533:144:89:-;1639:31;1653:4;1659:2;1663:6;1639:13;:31::i;:::-;1533:144;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;4239:14;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;8587:1642:42:-;8635:7;8663:1;8658;:6;8654:45;;8687:1;8680:8;;;;8654:45;9378:14;9412:1;9401:7;9406:1;9401:4;:7::i;:::-;:12;;9395:1;:19;;9378:36;;9873:1;9862:6;9858:1;:10;;;;;:::i;:::-;;;9849:6;:19;9848:26;;9839:35;;9922:1;9911:6;9907:1;:10;;;;;:::i;:::-;;;9898:6;:19;9897:26;;9888:35;;9971:1;9960:6;9956:1;:10;;;;;:::i;:::-;;;9947:6;:19;9946:26;;9937:35;;10020:1;10009:6;10005:1;:10;;;;;:::i;:::-;;;9996:6;:19;9995:26;;9986:35;;10069:1;10058:6;10054:1;:10;;;;;:::i;:::-;;;10045:6;:19;10044:26;;10035:35;;10118:1;10107:6;10103:1;:10;;;;;:::i;:::-;;;10094:6;:19;10093:26;;10084:35;;10167:1;10156:6;10152:1;:10;;;;;:::i;:::-;;;10143:6;:19;10142:26;;10133:35;;10189:23;10193:6;10205;10201:1;:10;;;;;:::i;:::-;;;10189:3;:23::i;:::-;10182:30;;;8587:1642;;;;:::o;14099:265:45:-;14209:28;14282:9;14279:1;14272:20;14344:3;14337:4;14334:1;14324:18;14320:28;14305:43;;14099:265;;;;:::o;12736:433::-;12893:7;12912:230;12925:4;12919:3;:10;12912:230;;;12945:11;12959:23;12972:3;12977:4;12959:12;:23::i;:::-;12945:37;;13032:3;13000:35;;:24;13014:4;13020:3;13000:13;:24::i;:::-;:29;;;;;;;;;;;;:35;;;12996:136;;;13062:3;13055:10;;12996:136;;;13116:1;13110:3;:7;;;;:::i;:::-;13104:13;;12996:136;12931:211;12912:230;;;13158:4;13151:11;;12736:433;;;;;;:::o;3000:133:24:-;3082:7;3108:18;3118:7;3108:9;:18::i;:::-;3101:25;;3000:133;;;:::o;7717:780:12:-;7817:2;7809:10;;:4;:10;;;;:24;;;;;7832:1;7823:6;:10;7809:24;7805:686;;;7869:1;7853:18;;:4;:18;;;7849:315;;7892:16;7910;7930:150;7957:20;:26;7978:4;7957:26;;;;;;;;;;;;;;;8005:9;8036:26;8055:6;8036:18;:26::i;:::-;7930:5;:150::i;:::-;7891:189;;;;;;;;8124:4;8103:46;;;8130:8;8140;8103:46;;;;;;;:::i;:::-;;;;;;;;7873:291;;7849:315;8195:1;8181:16;;:2;:16;;;8177:304;;8218:16;8236;8256:143;8283:20;:24;8304:2;8283:24;;;;;;;;;;;;;;;8329:4;8355:26;8374:6;8355:18;:26::i;:::-;8256:5;:143::i;:::-;8217:182;;;;;;;;8443:2;8422:44;;;8447:8;8457;8422:44;;;;;;;:::i;:::-;;;;;;;;8199:282;;8177:304;7805:686;7717:780;;;:::o;11008:119:45:-;11070:7;11096:4;:17;;:24;;;;11089:31;;11008:119;;;:::o;15291:213:43:-;15347:6;15377:16;15369:24;;:5;:24;15365:103;;;15447:2;15451:5;15416:41;;;;;;;;;;;;:::i;:::-;;;;;;;;15365:103;15491:5;15477:20;;15291:213;;;:::o;538:107:32:-;598:7;624;:14;632:5;624:14;;;;;;;;;;;;;;;;617:21;;538:107;;;:::o;3385:267:33:-;3479:13;1390:66;3537:17;;3527:5;3508:46;3504:142;;3577:15;3586:5;3577:8;:15::i;:::-;3570:22;;;;3504:142;3630:5;3623:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3385:267;;;;;:::o;3353:401:38:-;3446:14;3555:4;3549:11;3585:10;3580:3;3573:23;3632:15;3625:4;3620:3;3616:14;3609:39;3684:10;3677:4;3672:3;3668:14;3661:34;3733:4;3728:3;3718:20;3708:30;;3524:224;3353:401;;;;:::o;5140:1530:36:-;5266:7;5275:12;5289:7;6199:66;6194:1;6186:10;;:79;6182:164;;;6297:1;6301:30;6333:1;6281:54;;;;;;;;6182:164;6440:14;6457:24;6467:4;6473:1;6476;6479;6457:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6440:41;;6513:1;6495:20;;:6;:20;;;6491:113;;6547:1;6551:29;6590:1;6582:10;;6531:62;;;;;;;;;6491:113;6622:6;6630:20;6660:1;6652:10;;6614:49;;;;;;;5140:1530;;;;;;;;;:::o;7196:532::-;7291:20;7282:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;7278:444;7327:7;7278:444;7387:29;7378:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;7374:348;;7439:23;;;;;;;;;;;;;;7374:348;7492:35;7483:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;7479:243;;7586:8;7578:17;;7550:46;;;;;;;;;;;:::i;:::-;;;;;;;;7479:243;7626:30;7617:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;7613:109;;7702:8;7679:32;;;;;;;;;;;:::i;:::-;;;;;;;;7613:109;7196:532;;;:::o;11199:138:45:-;11269:20;;:::i;:::-;11308:4;:17;;11326:3;11308:22;;;;;;;;;;:::i;:::-;;;;;;;;;11301:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11199:138;;;;:::o;2327:413:24:-;2421:30;2435:4;2441:2;2445:5;2421:13;:30::i;:::-;2481:1;2465:18;;:4;:18;;;2461:226;;2499:14;2516:13;:11;:13::i;:::-;2499:30;;2543:11;2557:12;:10;:12::i;:::-;2543:26;;2596:3;2587:6;:12;2583:94;;;2650:6;2658:3;2626:36;;;;;;;;;;;;:::i;:::-;;;;;;;;2583:94;2485:202;;2461:226;2696:37;2717:4;2723:2;2727:5;2696:20;:37::i;:::-;2327:413;;;:::o;10699:983:42:-;10751:7;10770:14;10787:1;10770:18;;10841:1;10835:3;10826:5;:12;;:16;10822:99;;;10872:3;10862:13;;;;;10903:3;10893:13;;;;10822:99;10952:1;10947:2;10938:5;:11;;:15;10934:96;;;10983:2;10973:12;;;;;11013:2;11003:12;;;;10934:96;11061:1;11056:2;11047:5;:11;;:15;11043:96;;;11092:2;11082:12;;;;;11122:2;11112:12;;;;11043:96;11170:1;11165:2;11156:5;:11;;:15;11152:96;;;11201:2;11191:12;;;;;11231:2;11221:12;;;;11152:96;11278:1;11274;11265:5;:10;;:14;11261:93;;;11309:1;11299:11;;;;;11338:1;11328:11;;;;11261:93;11384:1;11380;11371:5;:10;;:14;11367:93;;;11415:1;11405:11;;;;;11444:1;11434:11;;;;11367:93;11490:1;11486;11477:5;:10;;:14;11473:93;;;11521:1;11511:11;;;;;11550:1;11540:11;;;;11473:93;11596:1;11592;11583:5;:10;;:14;11579:64;;;11627:1;11617:11;;;;11579:64;11669:6;11662:13;;;10699:983;;;:::o;2557:104::-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;2649:1;2641:13;2634:20;;2557:104;;;;:::o;2774:153::-;2836:7;2919:1;2914;2910;:5;2909:11;;;;:::i;:::-;2904:1;2900;:5;2899:21;;;;:::i;:::-;2892:28;;2774:153;;;;:::o;9379:101:12:-;9442:7;9472:1;9468;:5;;;;:::i;:::-;9461:12;;9379:101;;;;:::o;4169:218:43:-;4226:7;4257:17;4249:25;;:5;:25;4245:105;;;4328:3;4333:5;4297:42;;;;;;;;;;;;:::i;:::-;;;;;;;;4245:105;4374:5;4359:21;;4169:218;;;:::o;9016:255:12:-;9183:7;9192;9218:46;9229:7;:5;:7::i;:::-;9238:25;9241:14;:5;:12;:14::i;:::-;9257:5;9238:2;:25;;:::i;:::-;9218:5;:10;;:46;;;;;:::i;:::-;9211:53;;;;9016:255;;;;;;:::o;9277:96::-;9335:7;9365:1;9361;:5;;;;:::i;:::-;9354:12;;9277:96;;;;:::o;2078:405:33:-;2137:13;2162:11;2176:16;2187:4;2176:10;:16::i;:::-;2162:30;;2280:17;2311:2;2300:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2280:34;;2402:3;2397;2390:16;2442:4;2435;2430:3;2426:14;2419:28;2473:3;2466:10;;;;2078:405;;;:::o;6271:1107:21:-;6376:1;6360:18;;:4;:18;;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;;;;;6356:540;;;6548:19;6570:9;:15;6580:4;6570:15;;;;;;;;;;;;;;;;6548:37;;6617:5;6603:11;:19;6599:115;;;6674:4;6680:11;6693:5;6649:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6599:115;6866:5;6852:11;:19;6834:9;:15;6844:4;6834:15;;;;;;;;;;;;;;;:37;;;;6534:362;6356:540;6924:1;6910:16;;:2;:16;;;6906:425;;7089:5;7073:12;;:21;;;;;;;;;;;6906:425;;;7301:5;7284:9;:13;7294:2;7284:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6906:425;7361:2;7346:25;;7355:4;7346:25;;;7365:5;7346:25;;;;;;:::i;:::-;;;;;;;;6271:1107;;;:::o;2084:103:24:-;2137:7;2163:17;2156:24;;;;2084:103;:::o;7232:399:12:-;7351:1;7335:18;;:4;:18;;;7331:107;;7369:58;7375:17;7394:4;7400:26;7419:6;7400:18;:26::i;:::-;7369:5;:58::i;:::-;;;7331:107;7465:1;7451:16;;:2;:16;;;7447:110;;7483:63;7489:17;7508:9;7519:26;7538:6;7519:18;:26::i;:::-;7483:5;:63::i;:::-;;;7447:110;7566:58;7585:15;7595:4;7585:9;:15::i;:::-;7602:13;7612:2;7602:9;:13::i;:::-;7617:6;7566:18;:58::i;:::-;7232:399;;;:::o;8050:162:45:-;8132:7;8141;8167:38;8175:4;:17;;8194:3;8199:5;8167:7;:38::i;:::-;8160:45;;;;8050:162;;;;;;:::o;2555:245:33:-;2616:7;2635:14;2688:4;2679;2652:33;;:40;2635:57;;2715:2;2706:6;:11;2702:69;;;2740:20;;;;;;;;;;;;;;2702:69;2787:6;2780:13;;;2555:245;;;:::o;11513:870:45:-;11604:7;11613;11632:11;11646:4;:11;;;;11632:25;;11678:1;11672:3;:7;11668:709;;;11747:25;11775:28;11789:4;11801:1;11795:3;:7;;;;:::i;:::-;11775:13;:28::i;:::-;11747:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11889:3;11877:15;;:4;:9;;;:15;;;11873:91;;;11919:30;;;;;;;;;;;;;;11873:91;12040:3;12027:16;;:4;:9;;;:16;;;12023:189;;12101:5;12063:28;12077:4;12089:1;12083:3;:7;;;;:::i;:::-;12063:13;:28::i;:::-;:35;;;:43;;;;;;;;;;;;;;;;;;12023:189;;;12145:4;12155:41;;;;;;;;12176:3;12155:41;;;;;;12189:5;12155:41;;;;;12145:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12023:189;12233:4;:11;;;12246:5;12225:27;;;;;;;;11668:709;12283:4;12293:41;;;;;;;;12314:3;12293:41;;;;;;12327:5;12293:41;;;;;12283:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12357:1;12360:5;12349:17;;;;;11513:870;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:133:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:77::-;4890:7;4919:5;4908:16;;4853:77;;;:::o;4936:118::-;5023:24;5041:5;5023:24;:::i;:::-;5018:3;5011:37;4936:118;;:::o;5060:222::-;5153:4;5191:2;5180:9;5176:18;5168:26;;5204:71;5272:1;5261:9;5257:17;5248:6;5204:71;:::i;:::-;5060:222;;;;:::o;5288:118::-;5375:24;5393:5;5375:24;:::i;:::-;5370:3;5363:37;5288:118;;:::o;5412:222::-;5505:4;5543:2;5532:9;5528:18;5520:26;;5556:71;5624:1;5613:9;5609:17;5600:6;5556:71;:::i;:::-;5412:222;;;;:::o;5640:329::-;5699:6;5748:2;5736:9;5727:7;5723:23;5719:32;5716:119;;;5754:79;;:::i;:::-;5716:119;5874:1;5899:53;5944:7;5935:6;5924:9;5920:22;5899:53;:::i;:::-;5889:63;;5845:117;5640:329;;;;:::o;5975:::-;6034:6;6083:2;6071:9;6062:7;6058:23;6054:32;6051:119;;;6089:79;;:::i;:::-;6051:119;6209:1;6234:53;6279:7;6270:6;6259:9;6255:22;6234:53;:::i;:::-;6224:63;;6180:117;5975:329;;;;:::o;6310:93::-;6346:7;6386:10;6379:5;6375:22;6364:33;;6310:93;;;:::o;6409:115::-;6494:23;6511:5;6494:23;:::i;:::-;6489:3;6482:36;6409:115;;:::o;6530:218::-;6621:4;6659:2;6648:9;6644:18;6636:26;;6672:69;6738:1;6727:9;6723:17;6714:6;6672:69;:::i;:::-;6530:218;;;;:::o;6754:149::-;6790:7;6830:66;6823:5;6819:78;6808:89;;6754:149;;;:::o;6909:115::-;6994:23;7011:5;6994:23;:::i;:::-;6989:3;6982:36;6909:115;;:::o;7030:114::-;7097:6;7131:5;7125:12;7115:22;;7030:114;;;:::o;7150:184::-;7249:11;7283:6;7278:3;7271:19;7323:4;7318:3;7314:14;7299:29;;7150:184;;;;:::o;7340:132::-;7407:4;7430:3;7422:11;;7460:4;7455:3;7451:14;7443:22;;7340:132;;;:::o;7478:108::-;7555:24;7573:5;7555:24;:::i;:::-;7550:3;7543:37;7478:108;;:::o;7592:179::-;7661:10;7682:46;7724:3;7716:6;7682:46;:::i;:::-;7760:4;7755:3;7751:14;7737:28;;7592:179;;;;:::o;7777:113::-;7847:4;7879;7874:3;7870:14;7862:22;;7777:113;;;:::o;7926:732::-;8045:3;8074:54;8122:5;8074:54;:::i;:::-;8144:86;8223:6;8218:3;8144:86;:::i;:::-;8137:93;;8254:56;8304:5;8254:56;:::i;:::-;8333:7;8364:1;8349:284;8374:6;8371:1;8368:13;8349:284;;;8450:6;8444:13;8477:63;8536:3;8521:13;8477:63;:::i;:::-;8470:70;;8563:60;8616:6;8563:60;:::i;:::-;8553:70;;8409:224;8396:1;8393;8389:9;8384:14;;8349:284;;;8353:14;8649:3;8642:10;;8050:608;;;7926:732;;;;:::o;8664:1215::-;9013:4;9051:3;9040:9;9036:19;9028:27;;9065:69;9131:1;9120:9;9116:17;9107:6;9065:69;:::i;:::-;9181:9;9175:4;9171:20;9166:2;9155:9;9151:18;9144:48;9209:78;9282:4;9273:6;9209:78;:::i;:::-;9201:86;;9334:9;9328:4;9324:20;9319:2;9308:9;9304:18;9297:48;9362:78;9435:4;9426:6;9362:78;:::i;:::-;9354:86;;9450:72;9518:2;9507:9;9503:18;9494:6;9450:72;:::i;:::-;9532:73;9600:3;9589:9;9585:19;9576:6;9532:73;:::i;:::-;9615;9683:3;9672:9;9668:19;9659:6;9615:73;:::i;:::-;9736:9;9730:4;9726:20;9720:3;9709:9;9705:19;9698:49;9764:108;9867:4;9858:6;9764:108;:::i;:::-;9756:116;;8664:1215;;;;;;;;;;:::o;9885:97::-;9921:7;9961:14;9954:5;9950:26;9939:37;;9885:97;;;:::o;9988:115::-;10073:23;10090:5;10073:23;:::i;:::-;10068:3;10061:36;9988:115;;:::o;10109:218::-;10200:4;10238:2;10227:9;10223:18;10215:26;;10251:69;10317:1;10306:9;10302:17;10293:6;10251:69;:::i;:::-;10109:218;;;;:::o;10333:118::-;10404:22;10420:5;10404:22;:::i;:::-;10397:5;10394:33;10384:61;;10441:1;10438;10431:12;10384:61;10333:118;:::o;10457:135::-;10501:5;10539:6;10526:20;10517:29;;10555:31;10580:5;10555:31;:::i;:::-;10457:135;;;;:::o;10598:122::-;10671:24;10689:5;10671:24;:::i;:::-;10664:5;10661:35;10651:63;;10710:1;10707;10700:12;10651:63;10598:122;:::o;10726:139::-;10772:5;10810:6;10797:20;10788:29;;10826:33;10853:5;10826:33;:::i;:::-;10726:139;;;;:::o;10871:1053::-;10973:6;10981;10989;10997;11005;11013;11062:3;11050:9;11041:7;11037:23;11033:33;11030:120;;;11069:79;;:::i;:::-;11030:120;11189:1;11214:53;11259:7;11250:6;11239:9;11235:22;11214:53;:::i;:::-;11204:63;;11160:117;11316:2;11342:53;11387:7;11378:6;11367:9;11363:22;11342:53;:::i;:::-;11332:63;;11287:118;11444:2;11470:53;11515:7;11506:6;11495:9;11491:22;11470:53;:::i;:::-;11460:63;;11415:118;11572:2;11598:51;11641:7;11632:6;11621:9;11617:22;11598:51;:::i;:::-;11588:61;;11543:116;11698:3;11725:53;11770:7;11761:6;11750:9;11746:22;11725:53;:::i;:::-;11715:63;;11669:119;11827:3;11854:53;11899:7;11890:6;11879:9;11875:22;11854:53;:::i;:::-;11844:63;;11798:119;10871:1053;;;;;;;;:::o;11930:1199::-;12041:6;12049;12057;12065;12073;12081;12089;12138:3;12126:9;12117:7;12113:23;12109:33;12106:120;;;12145:79;;:::i;:::-;12106:120;12265:1;12290:53;12335:7;12326:6;12315:9;12311:22;12290:53;:::i;:::-;12280:63;;12236:117;12392:2;12418:53;12463:7;12454:6;12443:9;12439:22;12418:53;:::i;:::-;12408:63;;12363:118;12520:2;12546:53;12591:7;12582:6;12571:9;12567:22;12546:53;:::i;:::-;12536:63;;12491:118;12648:2;12674:53;12719:7;12710:6;12699:9;12695:22;12674:53;:::i;:::-;12664:63;;12619:118;12776:3;12803:51;12846:7;12837:6;12826:9;12822:22;12803:51;:::i;:::-;12793:61;;12747:117;12903:3;12930:53;12975:7;12966:6;12955:9;12951:22;12930:53;:::i;:::-;12920:63;;12874:119;13032:3;13059:53;13104:7;13095:6;13084:9;13080:22;13059:53;:::i;:::-;13049:63;;13003:119;11930:1199;;;;;;;;;;:::o;13135:474::-;13203:6;13211;13260:2;13248:9;13239:7;13235:23;13231:32;13228:119;;;13266:79;;:::i;:::-;13228:119;13386:1;13411:53;13456:7;13447:6;13436:9;13432:22;13411:53;:::i;:::-;13401:63;;13357:117;13513:2;13539:53;13584:7;13575:6;13564:9;13560:22;13539:53;:::i;:::-;13529:63;;13484:118;13135:474;;;;;:::o;13615:120::-;13687:23;13704:5;13687:23;:::i;:::-;13680:5;13677:34;13667:62;;13725:1;13722;13715:12;13667:62;13615:120;:::o;13741:137::-;13786:5;13824:6;13811:20;13802:29;;13840:32;13866:5;13840:32;:::i;:::-;13741:137;;;;:::o;13884:472::-;13951:6;13959;14008:2;13996:9;13987:7;13983:23;13979:32;13976:119;;;14014:79;;:::i;:::-;13976:119;14134:1;14159:53;14204:7;14195:6;14184:9;14180:22;14159:53;:::i;:::-;14149:63;;14105:117;14261:2;14287:52;14331:7;14322:6;14311:9;14307:22;14287:52;:::i;:::-;14277:62;;14232:117;13884:472;;;;;:::o;14362:105::-;14437:23;14454:5;14437:23;:::i;:::-;14432:3;14425:36;14362:105;;:::o;14473:138::-;14510:7;14550:54;14543:5;14539:66;14528:77;;14473:138;;;:::o;14617:108::-;14694:24;14712:5;14694:24;:::i;:::-;14689:3;14682:37;14617:108;;:::o;14807:521::-;14968:4;14963:3;14959:14;15055:4;15048:5;15044:16;15038:23;15074:61;15129:4;15124:3;15120:14;15106:12;15074:61;:::i;:::-;14983:162;15229:4;15222:5;15218:16;15212:23;15248:63;15305:4;15300:3;15296:14;15282:12;15248:63;:::i;:::-;15155:166;14937:391;14807:521;;:::o;15334:350::-;15491:4;15529:2;15518:9;15514:18;15506:26;;15542:135;15674:1;15663:9;15659:17;15650:6;15542:135;:::i;:::-;15334:350;;;;:::o;15690:180::-;15738:77;15735:1;15728:88;15835:4;15832:1;15825:15;15859:4;15856:1;15849:15;15876:320;15920:6;15957:1;15951:4;15947:12;15937:22;;16004:1;15998:4;15994:12;16025:18;16015:81;;16081:4;16073:6;16069:17;16059:27;;16015:81;16143:2;16135:6;16132:14;16112:18;16109:38;16106:84;;16162:18;;:::i;:::-;16106:84;15927:269;15876:320;;;:::o;16202:143::-;16259:5;16290:6;16284:13;16275:22;;16306:33;16333:5;16306:33;:::i;:::-;16202:143;;;;:::o;16351:351::-;16421:6;16470:2;16458:9;16449:7;16445:23;16441:32;16438:119;;;16476:79;;:::i;:::-;16438:119;16596:1;16621:64;16677:7;16668:6;16657:9;16653:22;16621:64;:::i;:::-;16611:74;;16567:128;16351:351;;;;:::o;16708:328::-;16827:4;16865:2;16854:9;16850:18;16842:26;;16878:71;16946:1;16935:9;16931:17;16922:6;16878:71;:::i;:::-;16959:70;17025:2;17014:9;17010:18;17001:6;16959:70;:::i;:::-;16708:328;;;;;:::o;17042:180::-;17090:77;17087:1;17080:88;17187:4;17184:1;17177:15;17211:4;17208:1;17201:15;17228:410;17268:7;17291:20;17309:1;17291:20;:::i;:::-;17286:25;;17325:20;17343:1;17325:20;:::i;:::-;17320:25;;17380:1;17377;17373:9;17402:30;17420:11;17402:30;:::i;:::-;17391:41;;17581:1;17572:7;17568:15;17565:1;17562:22;17542:1;17535:9;17515:83;17492:139;;17611:18;;:::i;:::-;17492:139;17276:362;17228:410;;;;:::o;17644:180::-;17692:77;17689:1;17682:88;17789:4;17786:1;17779:15;17813:4;17810:1;17803:15;17830:185;17870:1;17887:20;17905:1;17887:20;:::i;:::-;17882:25;;17921:20;17939:1;17921:20;:::i;:::-;17916:25;;17960:1;17950:35;;17965:18;;:::i;:::-;17950:35;18007:1;18004;18000:9;17995:14;;17830:185;;;;:::o;18021:180::-;18069:77;18066:1;18059:88;18166:4;18163:1;18156:15;18190:4;18187:1;18180:15;18207:553;18384:4;18422:3;18411:9;18407:19;18399:27;;18436:71;18504:1;18493:9;18489:17;18480:6;18436:71;:::i;:::-;18517:72;18585:2;18574:9;18570:18;18561:6;18517:72;:::i;:::-;18599;18667:2;18656:9;18652:18;18643:6;18599:72;:::i;:::-;18681;18749:2;18738:9;18734:18;18725:6;18681:72;:::i;:::-;18207:553;;;;;;;:::o;18766:775::-;18999:4;19037:3;19026:9;19022:19;19014:27;;19051:71;19119:1;19108:9;19104:17;19095:6;19051:71;:::i;:::-;19132:72;19200:2;19189:9;19185:18;19176:6;19132:72;:::i;:::-;19214;19282:2;19271:9;19267:18;19258:6;19214:72;:::i;:::-;19296;19364:2;19353:9;19349:18;19340:6;19296:72;:::i;:::-;19378:73;19446:3;19435:9;19431:19;19422:6;19378:73;:::i;:::-;19461;19529:3;19518:9;19514:19;19505:6;19461:73;:::i;:::-;18766:775;;;;;;;;;:::o;19547:332::-;19668:4;19706:2;19695:9;19691:18;19683:26;;19719:71;19787:1;19776:9;19772:17;19763:6;19719:71;:::i;:::-;19800:72;19868:2;19857:9;19853:18;19844:6;19800:72;:::i;:::-;19547:332;;;;;:::o;19885:442::-;20034:4;20072:2;20061:9;20057:18;20049:26;;20085:71;20153:1;20142:9;20138:17;20129:6;20085:71;:::i;:::-;20166:72;20234:2;20223:9;20219:18;20210:6;20166:72;:::i;:::-;20248;20316:2;20305:9;20301:18;20292:6;20248:72;:::i;:::-;19885:442;;;;;;:::o;20333:86::-;20379:7;20408:5;20397:16;;20333:86;;;:::o;20425:60::-;20453:3;20474:5;20467:12;;20425:60;;;:::o;20491:156::-;20548:9;20581:60;20597:43;20606:33;20633:5;20606:33;:::i;:::-;20597:43;:::i;:::-;20581:60;:::i;:::-;20568:73;;20491:156;;;:::o;20653:145::-;20747:44;20785:5;20747:44;:::i;:::-;20742:3;20735:57;20653:145;;:::o;20804:346::-;20932:4;20970:2;20959:9;20955:18;20947:26;;20983:78;21058:1;21047:9;21043:17;21034:6;20983:78;:::i;:::-;21071:72;21139:2;21128:9;21124:18;21115:6;21071:72;:::i;:::-;20804:346;;;;;:::o;21156:194::-;21196:4;21216:20;21234:1;21216:20;:::i;:::-;21211:25;;21250:20;21268:1;21250:20;:::i;:::-;21245:25;;21294:1;21291;21287:9;21279:17;;21318:1;21312:4;21309:11;21306:37;;;21323:18;;:::i;:::-;21306:37;21156:194;;;;:::o;21356:191::-;21396:3;21415:20;21433:1;21415:20;:::i;:::-;21410:25;;21449:20;21467:1;21449:20;:::i;:::-;21444:25;;21492:1;21489;21485:9;21478:16;;21513:3;21510:1;21507:10;21504:36;;;21520:18;;:::i;:::-;21504:36;21356:191;;;;:::o;21553:332::-;21674:4;21712:2;21701:9;21697:18;21689:26;;21725:71;21793:1;21782:9;21778:17;21769:6;21725:71;:::i;:::-;21806:72;21874:2;21863:9;21859:18;21850:6;21806:72;:::i;:::-;21553:332;;;;;:::o;21891:664::-;22096:4;22134:3;22123:9;22119:19;22111:27;;22148:71;22216:1;22205:9;22201:17;22192:6;22148:71;:::i;:::-;22229:72;22297:2;22286:9;22282:18;22273:6;22229:72;:::i;:::-;22311;22379:2;22368:9;22364:18;22355:6;22311:72;:::i;:::-;22393;22461:2;22450:9;22446:18;22437:6;22393:72;:::i;:::-;22475:73;22543:3;22532:9;22528:19;22519:6;22475:73;:::i;:::-;21891:664;;;;;;;;:::o;22561:332::-;22682:4;22720:2;22709:9;22705:18;22697:26;;22733:71;22801:1;22790:9;22786:17;22777:6;22733:71;:::i;:::-;22814:72;22882:2;22871:9;22867:18;22858:6;22814:72;:::i;:::-;22561:332;;;;;:::o;22899:86::-;22945:7;22974:5;22963:16;;22899:86;;;:::o;22991:156::-;23048:9;23081:60;23097:43;23106:33;23133:5;23106:33;:::i;:::-;23097:43;:::i;:::-;23081:60;:::i;:::-;23068:73;;22991:156;;;:::o;23153:145::-;23247:44;23285:5;23247:44;:::i;:::-;23242:3;23235:57;23153:145;;:::o;23304:346::-;23432:4;23470:2;23459:9;23455:18;23447:26;;23483:78;23558:1;23547:9;23543:17;23534:6;23483:78;:::i;:::-;23571:72;23639:2;23628:9;23624:18;23615:6;23571:72;:::i;:::-;23304:346;;;;;:::o;23656:545::-;23829:4;23867:3;23856:9;23852:19;23844:27;;23881:71;23949:1;23938:9;23934:17;23925:6;23881:71;:::i;:::-;23962:68;24026:2;24015:9;24011:18;24002:6;23962:68;:::i;:::-;24040:72;24108:2;24097:9;24093:18;24084:6;24040:72;:::i;:::-;24122;24190:2;24179:9;24175:18;24166:6;24122:72;:::i;:::-;23656:545;;;;;;;:::o;24207:180::-;24255:77;24252:1;24245:88;24352:4;24349:1;24342:15;24376:4;24373:1;24366:15;24393:180;24441:77;24438:1;24431:88;24538:4;24535:1;24528:15;24562:4;24559:1;24552:15;24579:247;24619:4;24639:20;24657:1;24639:20;:::i;:::-;24634:25;;24673:20;24691:1;24673:20;:::i;:::-;24668:25;;24717:1;24714;24710:9;24702:17;;24741:54;24735:4;24732:64;24729:90;;;24799:18;;:::i;:::-;24729:90;24579:247;;;;:::o;24832:87::-;24879:7;24908:5;24897:16;;24832:87;;;:::o;24925:158::-;24983:9;25016:61;25032:44;25041:34;25069:5;25041:34;:::i;:::-;25032:44;:::i;:::-;25016:61;:::i;:::-;25003:74;;24925:158;;;:::o;25089:147::-;25184:45;25223:5;25184:45;:::i;:::-;25179:3;25172:58;25089:147;;:::o;25242:348::-;25371:4;25409:2;25398:9;25394:18;25386:26;;25422:79;25498:1;25487:9;25483:17;25474:6;25422:79;:::i;:::-;25511:72;25579:2;25568:9;25564:18;25555:6;25511:72;:::i;:::-;25242:348;;;;;:::o;25596:244::-;25636:3;25655:20;25673:1;25655:20;:::i;:::-;25650:25;;25689:20;25707:1;25689:20;:::i;:::-;25684:25;;25732:1;25729;25725:9;25718:16;;25755:54;25750:3;25747:63;25744:89;;;25813:18;;:::i;:::-;25744:89;25596:244;;;;:::o","linkReferences":{},"immutableReferences":{"8316":[{"start":5219,"length":32}],"8318":[{"start":5178,"length":32}],"8320":[{"start":5092,"length":32}],"8322":[{"start":7307,"length":32}],"8324":[{"start":7340,"length":32}],"8327":[{"start":6122,"length":32}],"8330":[{"start":6181,"length":32}]}},"methodIdentifiers":{"CLOCK_MODE()":"4bf5d7e9","DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceFrom(uint256)":"a8248768","balanceOf(address)":"70a08231","balanceTo(uint256)":"66a5236c","burn(address,uint256)":"9dc29fac","checkpoints(address,uint32)":"f1127ed8","clock()":"91ddadf4","decimals()":"313ce567","delegate(address)":"5c19a95c","delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)":"c3cda520","delegates(address)":"587cde1e","eip712Domain()":"84b0196e","getPastTotalSupply(uint256)":"8e539e8c","getPastVotes(address,uint256)":"3a46b1a8","getVotes(address)":"9ab24eb0","index()":"2986c0e5","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","numCheckpoints(address)":"6fcfff45","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","staking()":"4cf088d9","stnk()":"45c57eb5","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stnk\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CheckpointUnorderedInsertion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"increasedSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"ERC20ExceededSafeSupply\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"clock\",\"type\":\"uint48\"}],\"name\":\"ERC5805FutureLookup\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC6372InconsistentClock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStakingContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"VotesExpiredSignature\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousVotes\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotes\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"balanceFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"balanceTo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pos\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"_key\",\"type\":\"uint48\"},{\"internalType\":\"uint208\",\"name\":\"_value\",\"type\":\"uint208\"}],\"internalType\":\"struct Checkpoints.Checkpoint208\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"index\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staking\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staking\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stnk\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CheckpointUnorderedInsertion()\":[{\"details\":\"A value was attempted to be inserted on a past checkpoint.\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20ExceededSafeSupply(uint256,uint256)\":[{\"details\":\"Total supply cap has been exceeded, introducing a risk of votes overflowing.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"ERC5805FutureLookup(uint256,uint48)\":[{\"details\":\"Lookup to future votes is not available.\"}],\"ERC6372InconsistentClock()\":[{\"details\":\"The clock was incorrectly modified.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"VotesExpiredSignature(uint256)\":[{\"details\":\"The signature used has expired.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"DelegateChanged(address,address,address)\":{\"details\":\"Emitted when an account changes their delegate.\"},\"DelegateVotesChanged(address,uint256,uint256)\":{\"details\":\"Emitted when a token transfer or delegate change results in changes to a delegate's number of voting units.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"CLOCK_MODE()\":{\"details\":\"Machine-readable description of the clock as specified in EIP-6372.\"},\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"checkpoints(address,uint32)\":{\"details\":\"Get the `pos`-th checkpoint for `account`.\"},\"clock()\":{\"details\":\"Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"delegate(address)\":{\"details\":\"Delegates votes from the sender to `delegatee`.\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Delegates votes from signer to `delegatee`.\"},\"delegates(address)\":{\"details\":\"Returns the delegate that `account` has chosen.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getPastTotalSupply(uint256)\":{\"details\":\"Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getPastVotes(address,uint256)\":{\"details\":\"Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined.\"},\"getVotes(address)\":{\"details\":\"Returns the current amount of votes that `account` has.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"numCheckpoints(address)\":{\"details\":\"Get number of checkpoints for `account`.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GhstERC20.sol\":\"Ghost\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/governance/utils/IVotes.sol\":{\"keccak256\":\"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856\",\"dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2\"]},\"dependencies/@openzeppelin-contracts-5.0.2/governance/utils/Votes.sol\":{\"keccak256\":\"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34\",\"dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim\"]},\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5805.sol\":{\"keccak256\":\"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a\",\"dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2\"]},\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC6372.sol\":{\"keccak256\":\"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb\",\"dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn\"]},\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Votes.sol\":{\"keccak256\":\"0x2a650f6e593cfe5ff2e514a17ea7f593ee70cefa1888066bc983a6308acff4b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9a3477b9665a4b6d19f86bf2cfbfa8c08ba41193f15e68c0d75c0cab7e1fc753\",\"dweb:/ipfs/QmbcurrTatN1PBmkCWdrED8zhAqx5ah9Qp6uR8YwkKWA8V\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/structs/Checkpoints.sol\":{\"keccak256\":\"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b\",\"dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"]},\"src/GhstERC20.sol\":{\"keccak256\":\"0xa6615d2f72502f5867d217a3de60f5e13adcc3496e26b837b74deab5271b3535\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://acb8ddb8a495f8da8a10e0b68aa18333dff21fd68a9a7ecc9b21f10a55e4924c\",\"dweb:/ipfs/QmNkCiK2Yat1TVzm9b3vzQNB46cnYi8JyH5cAyp2jRQpP5\"]},\"src/interfaces/IGHST.sol\":{\"keccak256\":\"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c\",\"dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG\"]},\"src/interfaces/ISTNK.sol\":{\"keccak256\":\"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b\",\"dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_stnk","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"CheckpointUnorderedInsertion"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"uint256","name":"increasedSupply","type":"uint256"},{"internalType":"uint256","name":"cap","type":"uint256"}],"type":"error","name":"ERC20ExceededSafeSupply"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"uint256","name":"timepoint","type":"uint256"},{"internalType":"uint48","name":"clock","type":"uint48"}],"type":"error","name":"ERC5805FutureLookup"},{"inputs":[],"type":"error","name":"ERC6372InconsistentClock"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidShortString"},{"inputs":[],"type":"error","name":"NotStakingContract"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"type":"error","name":"SafeCastOverflowedUintDowncast"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"type":"error","name":"StringTooLong"},{"inputs":[{"internalType":"uint256","name":"expiry","type":"uint256"}],"type":"error","name":"VotesExpiredSignature"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"delegator","type":"address","indexed":true},{"internalType":"address","name":"fromDelegate","type":"address","indexed":true},{"internalType":"address","name":"toDelegate","type":"address","indexed":true}],"type":"event","name":"DelegateChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"delegate","type":"address","indexed":true},{"internalType":"uint256","name":"previousVotes","type":"uint256","indexed":false},{"internalType":"uint256","name":"newVotes","type":"uint256","indexed":false}],"type":"event","name":"DelegateVotesChanged","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"CLOCK_MODE","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"balanceFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"balanceTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"pos","type":"uint32"}],"stateMutability":"view","type":"function","name":"checkpoints","outputs":[{"internalType":"struct Checkpoints.Checkpoint208","name":"","type":"tuple","components":[{"internalType":"uint48","name":"_key","type":"uint48"},{"internalType":"uint208","name":"_value","type":"uint208"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"clock","outputs":[{"internalType":"uint48","name":"","type":"uint48"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"delegate"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"delegateBySig"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"timepoint","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPastTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timepoint","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPastVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"getVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"view","type":"function","name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"stnk","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"CLOCK_MODE()":{"details":"Machine-readable description of the clock as specified in EIP-6372."},"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"checkpoints(address,uint32)":{"details":"Get the `pos`-th checkpoint for `account`."},"clock()":{"details":"Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting), in which case {CLOCK_MODE} should be overridden as well to match."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"delegate(address)":{"details":"Delegates votes from the sender to `delegatee`."},"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Delegates votes from signer to `delegatee`."},"delegates(address)":{"details":"Returns the delegate that `account` has chosen."},"eip712Domain()":{"details":"See {IERC-5267}."},"getPastTotalSupply(uint256)":{"details":"Returns the total supply of votes available at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes. Votes that have not been delegated are still part of total supply, even though they would not participate in a vote. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined."},"getPastVotes(address,uint256)":{"details":"Returns the amount of votes that `account` had at a specific moment in the past. If the `clock()` is configured to use block numbers, this will return the value at the end of the corresponding block. Requirements: - `timepoint` must be in the past. If operating using block numbers, the block must be already mined."},"getVotes(address)":{"details":"Returns the current amount of votes that `account` has."},"name()":{"details":"Returns the name of the token."},"numCheckpoints(address)":{"details":"Get number of checkpoints for `account`."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/GhstERC20.sol":"Ghost"},"evmVersion":"shanghai","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/governance/utils/IVotes.sol":{"keccak256":"0x5e2b397ae88fd5c68e4f6762eb9f65f65c36702eb57796495f471d024ce70947","urls":["bzz-raw://348fc8e291d54314bb22437b532f443d5dbfb80c8cc9591567c1af6554ccf856","dweb:/ipfs/QmP8ZTyitZinxcpwAHeYHhwj7u21zPpKXSiww38V74sXC2"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/governance/utils/Votes.sol":{"keccak256":"0xb8f69828d41b3594afd7a8c6393565901c205d8b5baf5bd2e42dbac637172979","urls":["bzz-raw://c790253821191ac46b2050d87df820d4209871f90c616381e2c2c00ff3eaac34","dweb:/ipfs/QmcPETTyuZBzDRL39JNXj3SBMdx3Y9o4fPQLSZ27py5Jim"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5805.sol":{"keccak256":"0x4b9b89f91adbb7d3574f85394754cfb08c5b4eafca8a7061e2094a019ab8f818","urls":["bzz-raw://7373d5dbb8eb2381aa0883a456fac89283fcaf52f42fa805d4188f270716742a","dweb:/ipfs/QmVnZDmT4ABvNhRJMaQnbCzsCA8HpyHPVaxi4fCi92LFv2"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC6372.sol":{"keccak256":"0xeb2857b7dafb7e0d8526dbfe794e6c047df2851c9e6ee91dc4a55f3c34af5d33","urls":["bzz-raw://49bf13f6c2a38a9bcc7b852d4e2b9cebb4068b832642cce61069cdb5f06bb2fb","dweb:/ipfs/QmdKAJVE7rR2kENCZnEM1yKswrGii7WuE9gZpsQvnXJhwn"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol":{"keccak256":"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80","urls":["bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229","dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol":{"keccak256":"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee","urls":["bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2","dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Votes.sol":{"keccak256":"0x2a650f6e593cfe5ff2e514a17ea7f593ee70cefa1888066bc983a6308acff4b1","urls":["bzz-raw://9a3477b9665a4b6d19f86bf2cfbfa8c08ba41193f15e68c0d75c0cab7e1fc753","dweb:/ipfs/QmbcurrTatN1PBmkCWdrED8zhAqx5ah9Qp6uR8YwkKWA8V"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol":{"keccak256":"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f","urls":["bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e","dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol":{"keccak256":"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6","urls":["bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c","dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol":{"keccak256":"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf","urls":["bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c","dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol":{"keccak256":"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0","urls":["bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21","dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435","urls":["bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c","dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SafeCast.sol":{"keccak256":"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe","urls":["bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c","dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/structs/Checkpoints.sol":{"keccak256":"0xbdc5e074d7dd6678f67e92b1a51a20226801a407b0e1af3da367c5d1ff4519ad","urls":["bzz-raw://a36cca6b22fff3db16fc789ff6c60eea71d4b156065d4d0c83a0bc5e91a77a8b","dweb:/ipfs/QmYN3exd5AemxjBrN8XMB1p5LbbE16uC3sjbYjwi8AjcGR"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/types/Time.sol":{"keccak256":"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58","urls":["bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111","dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb"],"license":"MIT"},"src/GhstERC20.sol":{"keccak256":"0xa6615d2f72502f5867d217a3de60f5e13adcc3496e26b837b74deab5271b3535","urls":["bzz-raw://acb8ddb8a495f8da8a10e0b68aa18333dff21fd68a9a7ecc9b21f10a55e4924c","dweb:/ipfs/QmNkCiK2Yat1TVzm9b3vzQNB46cnYi8JyH5cAyp2jRQpP5"],"license":"MIT"},"src/interfaces/IGHST.sol":{"keccak256":"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89","urls":["bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c","dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG"],"license":"MIT"},"src/interfaces/ISTNK.sol":{"keccak256":"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf","urls":["bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b","dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ"],"license":"MIT"}},"version":1},"id":89} \ No newline at end of file diff --git a/src/abi/GhostBondDepository.json b/src/abi/GhostBondDepository.json new file mode 100644 index 0000000..d628a92 --- /dev/null +++ b/src/abi/GhostBondDepository.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"authority","type":"address","internalType":"address"},{"name":"ftso","type":"address","internalType":"address"},{"name":"ghst","type":"address","internalType":"address"},{"name":"staking","type":"address","internalType":"address"},{"name":"treasury","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"adjustments","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"change","type":"uint64","internalType":"uint64"},{"name":"lastAdjustment","type":"uint48","internalType":"uint48"},{"name":"timeToAdjusted","type":"uint48","internalType":"uint48"},{"name":"active","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"authority","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IGhostAuthority"}],"stateMutability":"view"},{"type":"function","name":"close","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"create","inputs":[{"name":"_market","type":"uint256[3]","internalType":"uint256[3]"},{"name":"_terms","type":"uint256[2]","internalType":"uint256[2]"},{"name":"_quoteToken","type":"address","internalType":"address"},{"name":"_intervals","type":"uint32[2]","internalType":"uint32[2]"},{"name":"_booleans","type":"bool[2]","internalType":"bool[2]"}],"outputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"currentControlVariable","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"currentDebt","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"daoReward","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"debtDecay","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"debtRatio","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"maxPrice","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"},{"name":"referral","type":"address","internalType":"address"}],"outputs":[{"name":"payout","type":"uint256","internalType":"uint256"},{"name":"expiry","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"getReward","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"indexesFor","inputs":[{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"isLive","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"liveMarkets","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"liveMarketsFor","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"marketPrice","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"markets","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"capacity","type":"uint256","internalType":"uint256"},{"name":"quoteToken","type":"address","internalType":"address"},{"name":"capacityInQuote","type":"bool","internalType":"bool"},{"name":"totalDebt","type":"uint64","internalType":"uint64"},{"name":"maxPayout","type":"uint64","internalType":"uint64"},{"name":"sold","type":"uint64","internalType":"uint64"},{"name":"purchased","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"marketsForQuote","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"metadatas","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"lastTune","type":"uint48","internalType":"uint48"},{"name":"lastDecay","type":"uint48","internalType":"uint48"},{"name":"length","type":"uint48","internalType":"uint48"},{"name":"depositInterval","type":"uint48","internalType":"uint48"},{"name":"tuneInterval","type":"uint48","internalType":"uint48"},{"name":"quoteDecimals","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"notes","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"payout","type":"uint256","internalType":"uint256"},{"name":"created","type":"uint48","internalType":"uint48"},{"name":"matured","type":"uint48","internalType":"uint48"},{"name":"redeemed","type":"uint48","internalType":"uint48"},{"name":"marketId","type":"uint48","internalType":"uint48"}],"stateMutability":"view"},{"type":"function","name":"payoutFor","inputs":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pendingFor","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"payout","type":"uint256","internalType":"uint256"},{"name":"matured","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"pullNote","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"newIndex","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"pushNote","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"redeem","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"sendGhst","type":"bool","internalType":"bool"},{"name":"indexes","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"payout","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"redeemAll","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"sendGhst","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"refReward","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rewards","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setAuthority","inputs":[{"name":"newAuthority","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewards","inputs":[{"name":"toFrontEnd","type":"uint256","internalType":"uint256"},{"name":"toDao","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"terms","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"fixedTerm","type":"bool","internalType":"bool"},{"name":"controlVariable","type":"uint64","internalType":"uint64"},{"name":"vesting","type":"uint48","internalType":"uint48"},{"name":"conclusion","type":"uint48","internalType":"uint48"},{"name":"maxDebt","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"updateTreasury","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelist","inputs":[{"name":"operator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelisted","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"AuthorityUpdated","inputs":[{"name":"authority","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Bond","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"price","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MarketClosed","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MarketCreated","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"baseToken","type":"address","indexed":true,"internalType":"address"},{"name":"quoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"initialPrice","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Tuned","inputs":[{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"oldControlVariable","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"newControlVariable","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressInsufficientBalance","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"AlreadyRedeemed","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DepositoryConcluded","inputs":[{"name":"concludedTime","type":"uint48","internalType":"uint48"}]},{"type":"error","name":"DepositoryMaxPrice","inputs":[{"name":"price","type":"uint256","internalType":"uint256"},{"name":"maxPrice","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DepositoryMaxSize","inputs":[{"name":"payout","type":"uint256","internalType":"uint256"},{"name":"maxPayout","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"NoteNotFound","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyAuthorized","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"TransferNotFound","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"Unauthorized","inputs":[]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b5060405162005fcd38038062005fcd8339818101604052810190620000369190620002ad565b8484848484848481805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad81604051620000ae919062000342565b60405180910390a1508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505060805173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620001f992919062000377565b6020604051808303815f875af115801562000216573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200023c9190620003dc565b5050505050506200040c565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000277826200024c565b9050919050565b62000289816200026b565b811462000294575f80fd5b50565b5f81519050620002a7816200027e565b92915050565b5f805f805f60a08688031215620002c957620002c862000248565b5b5f620002d88882890162000297565b9550506020620002eb8882890162000297565b9450506040620002fe8882890162000297565b9350506060620003118882890162000297565b9250506080620003248882890162000297565b9150509295509295909350565b6200033c816200026b565b82525050565b5f602082019050620003575f83018462000331565b92915050565b5f819050919050565b62000371816200035d565b82525050565b5f6040820190506200038c5f83018562000331565b6200039b602083018462000366565b9392505050565b5f8115159050919050565b620003b881620003a2565b8114620003c3575f80fd5b50565b5f81519050620003d681620003ad565b92915050565b5f60208284031215620003f457620003f362000248565b5b5f6200040384828501620003c6565b91505092915050565b60805160a05160c051615b816200044c5f395f81816125910152613bba01525f81816124f0015261396b01525f8181610a030152611ef70152615b815ff3fe608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063a986a19611610118578063c3e0fb1c116100ab578063e0b117ff1161007a578063e0b117ff146106a2578063e481b265146106d6578063e73496cd14610706578063f1b7dc781461073b578063f3191a461461076b57610204565b8063c3e0fb1c14610607578063c9b67af514610638578063d6db4df814610656578063d936547e1461067257610204565b8063bcb29667116100e7578063bcb2966714610555578063bf7e214f14610585578063c0680e20146105a3578063c0aa0e8a146105d357610204565b8063a986a1961461048c578063abbf4b17146104bc578063b1283e77146104ec578063bc3b2b121461052257610204565b8063649144391161019b5780637c770aae1161016a5780637c770aae146103d45780639b19251a146104065780639c76978714610422578063a0139f411461042c578063a42206101461045c57610204565b8063649144391461033c578063654e51e71461036c5780636a6c575d146103885780637a9e5e4b146103b857610204565b806327507458116101d757806327507458146102a25780633adec5a7146102d25780633d18b9121461030257806346aed74e1461030c57610204565b80630700037d146102085780630a9d85eb146102385780630aebeb4e146102685780631885f58014610284575b5f80fd5b610222600480360381019061021d9190614a68565b610789565b60405161022f9190614aab565b60405180910390f35b610252600480360381019061024d9190614aee565b61079e565b60405161025f9190614aab565b60405180910390f35b610282600480360381019061027d9190614aee565b6107fd565b005b61028c61089d565b6040516102999190614aab565b60405180910390f35b6102bc60048036038101906102b79190614aee565b6108a3565b6040516102c99190614b33565b60405180910390f35b6102ec60048036038101906102e79190614aee565b610913565b6040516102f99190614aab565b60405180910390f35b61030a61097e565b005b61032660048036038101906103219190614b76565b610aa0565b6040516103339190614aab565b60405180910390f35b61035660048036038101906103519190614a68565b610abc565b6040516103639190614c6b565b60405180910390f35b61038660048036038101906103819190614c8b565b610c6c565b005b6103a2600480360381019061039d9190614c8b565b610c86565b6040516103af9190614aab565b60405180910390f35b6103d260048036038101906103cd9190614a68565b610cfd565b005b6103ee60048036038101906103e99190614cc9565b610d7e565b6040516103fd93929190614d40565b60405180910390f35b610420600480360381019061041b9190614a68565b61129b565b005b61042a611344565b005b61044660048036038101906104419190614dfd565b611689565b6040516104539190614aab565b60405180910390f35b61047660048036038101906104719190614e76565b611f8b565b6040516104839190614aab565b60405180910390f35b6104a660048036038101906104a19190615000565b6123f1565b6040516104b39190614aab565b60405180910390f35b6104d660048036038101906104d19190614aee565b612635565b6040516104e3919061508e565b60405180910390f35b61050660048036038101906105019190614aee565b6127da565b60405161051997969594939291906150b6565b60405180910390f35b61053c60048036038101906105379190614aee565b61288e565b60405161054c9493929190615143565b60405180910390f35b61056f600480360381019061056a9190614aee565b6128fb565b60405161057c9190614aab565b60405180910390f35b61058d612958565b60405161059a91906151e1565b60405180910390f35b6105bd60048036038101906105b89190614e76565b61297b565b6040516105ca9190614aab565b60405180910390f35b6105ed60048036038101906105e89190614aee565b6129a6565b6040516105fe9594939291906151fa565b60405180910390f35b610621600480360381019061061c9190614e76565b612a37565b60405161062f92919061524b565b60405180910390f35b610640612b9f565b60405161064d9190614c6b565b60405180910390f35b610670600480360381019061066b9190614e76565b612c79565b005b61068c60048036038101906106879190614a68565b612dc4565b6040516106999190614b33565b60405180910390f35b6106bc60048036038101906106b79190614e76565b612de1565b6040516106cd959493929190615272565b60405180910390f35b6106f060048036038101906106eb9190614a68565b612e74565b6040516106fd9190614c6b565b60405180910390f35b610720600480360381019061071b9190614aee565b613124565b604051610732969594939291906152de565b60405180910390f35b61075560048036038101906107509190614aee565b6131c8565b6040516107629190614aab565b60405180910390f35b6107736132b8565b6040516107809190614aab565b60405180910390f35b6003602052805f5260405f205f915090505481565b5f806107a9836132be565b5050905080600984815481106107c2576107c161533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff166107eb9190615397565b67ffffffffffffffff16915050919050565b61080561340b565b426009828154811061081a5761081961533d565b5b905f5260205f20015f01600f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505f6008828154811061085b5761085a61533d565b5b905f5260205f2090600402015f0181905550807f9dc30b8eda31a6a144e092e5de600955523a6a925cc15cc1d1b9b4872cfa615560405160405180910390a250565b60015481565b5f80600883815481106108b9576108b861533d565b5b905f5260205f2090600402015f015411801561090c575042600983815481106108e5576108e461533d565b5b905f5260205f20015f01600f9054906101000a900465ffffffffffff1665ffffffffffff16115b9050919050565b5f8061091e836131c8565b6109278461079e565b61093191906153d2565b9050600a83815481106109475761094661533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a61096b9190615542565b8161097691906155b9565b915050919050565b5f60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610a5c9291906155e9565b6020604051808303815f875af1158015610a78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9c9190615624565b5050565b5f610ab48383610aaf86612e74565b6123f1565b905092915050565b60605f600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610b4457602002820191905f5260205f20905b815481526020019060010190808311610b30575b505050505090505f805f5b8351821015610b9257610b7b848381518110610b6e57610b6d61533d565b5b60200260200101516108a3565b15610b87578260010192505b816001019150610b4f565b5f8367ffffffffffffffff811115610bad57610bac614ec8565b5b604051908082528060200260200182016040528015610bdb5781602001602082028036833780820191505090505b5090505f92505b8451831015610c5f57610c0e858481518110610c0157610c0061533d565b5b60200260200101516108a3565b15610c5457848381518110610c2657610c2561533d565b5b6020026020010151818381518110610c4157610c4061533d565b5b6020026020010181815250508160010191505b826001019250610be2565b8095505050505050919050565b610c746134fd565b81600281905550806001819055505050565b5f80610c9184610913565b670de0b6b3a764000084610ca591906153d2565b610caf91906155b9565b9050600a8481548110610cc557610cc461533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a610ce99190615542565b81610cf491906155b9565b91505092915050565b610d056134fd565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad81604051610d73919061564f565b60405180910390a150565b5f805f8060088981548110610d9657610d9561533d565b5b905f5260205f20906004020190505f60098a81548110610db957610db861533d565b5b905f5260205f20016040518060a00160405290815f82015f9054906101000a900460ff161515151581526020015f820160019054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160099054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090505f429050816060015165ffffffffffff168165ffffffffffff1610610eff5781606001516040517f83399e2d000000000000000000000000000000000000000000000000000000008152600401610ef69190615668565b60405180910390fd5b610f098b826135ef565b5f610f138c61383e565b905089811115610f5c57808a6040517f8f3847e9000000000000000000000000000000000000000000000000000000008152600401610f53929190615681565b60405180910390fd5b825f0151610f6e578260400151610f7f565b818360400151610f7e91906156a8565b5b65ffffffffffff169550600a8c81548110610f9d57610f9c61533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a610fc19190615542565b81670de0b6b3a76400008d610fd691906153d2565b610fe091906155b9565b610fea91906155b9565b9650836002015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1687111561106b5786846002015f9054906101000a900467ffffffffffffffff166040517f9b5ae2d9000000000000000000000000000000000000000000000000000000008152600401611062929190615711565b60405180910390fd5b8360010160149054906101000a900460ff166110875786611089565b8a5b845f015f82825461109a9190615738565b925050819055508a846003015f8282546110b4919061576b565b92505081905550868460020160088282829054906101000a900467ffffffffffffffff166110e2919061579e565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550868460010160158282829054906101000a900467ffffffffffffffff1661112f919061579e565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508b7f7880508a48fd3aee88f7e15917d85e39c3ad059e51ad4aca9bb46e7b4938b9618c83604051611187929190615681565b60405180910390a261119c8988888f8c6138dd565b945061120f3360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d876001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c63909392919063ffffffff16565b8360010160159054906101000a900467ffffffffffffffff1667ffffffffffffffff16836080015167ffffffffffffffff161015611281575f845f01819055508b7f9dc30b8eda31a6a144e092e5de600955523a6a925cc15cc1d1b9b4872cfa615560405160405180910390a261128c565b61128b8c83613ce5565b5b50505050955095509592505050565b6112a361340b565b60045f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161560045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d091906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156114c257505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149291906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b801561158557505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630505c8c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611531573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155591906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156115bc576040517f7d7b71b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611624573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164891906157ed565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61169261340b565b5f42866001600281106116a8576116a761533d565b5b60200201356116b79190615738565b90505f8573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611703573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117279190615842565b60ff1690505f845f600281106117405761173f61533d565b5b602002016020810190611753919061586d565b61177457885f6003811061176a5761176961533d565b5b60200201356117da565b81600a6117819190615898565b896001600381106117955761179461533d565b5b6020020135670de0b6b3a76400008b5f600381106117b6576117b561533d565b5b60200201356117c591906153d2565b6117cf91906155b9565b6117d991906155b9565b5b90505f83875f600281106117f1576117f061533d565b5b602002016020810190611804919061591b565b63ffffffff16836118159190615946565b67ffffffffffffffff1661182991906155b9565b90505f620186a08b6002600381106118445761184361533d565b5b60200201358467ffffffffffffffff1661185e91906153d2565b61186891906155b9565b8367ffffffffffffffff1661187d919061576b565b90505f8367ffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119199190615996565b8d60016003811061192d5761192c61533d565b5b602002013561193c91906153d2565b61194691906155b9565b9050600880549050965060086040518060e001604052808e5f600381106119705761196f61533d565b5b602002013581526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018a5f600281106119a9576119a861533d565b5b6020020160208101906119bc919061586d565b151581526020018667ffffffffffffffff1681526020018567ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506080820151816002015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060a08201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c08201518160030155505060096040518060a001604052808a600160028110611b4457611b4361533d565b5b602002016020810190611b57919061586d565b151581526020018367ffffffffffffffff1681526020018d5f60028110611b8157611b8061533d565b5b602002013565ffffffffffff1681526020018d600160028110611ba757611ba661533d565b5b602002013565ffffffffffff1681526020018467ffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160096101000a81548165ffffffffffff021916908365ffffffffffff1602179055506060820151815f01600f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506080820151815f0160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050600a6040518060c001604052804265ffffffffffff1681526020014265ffffffffffff1681526020018865ffffffffffff1681526020018b5f60028110611d0257611d0161533d565b5b602002016020810190611d15919061591b565b63ffffffff1665ffffffffffff1681526020018b600160028110611d3c57611d3b61533d565b5b602002016020810190611d4f919061591b565b63ffffffff1665ffffffffffff1681526020018760ff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548165ffffffffffff021916908365ffffffffffff1602179055506040820151815f01600c6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506060820151815f0160126101000a81548165ffffffffffff021916908365ffffffffffff1602179055506080820151815f0160186101000a81548165ffffffffffff021916908365ffffffffffff16021790555060a0820151815f01601e6101000a81548160ff021916908360ff1602179055505050600c5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2087908060018154018082558091505060019003905f5260205f20015f90919091909150558973ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16887ff5110a61238afa49549d323d552cac783a8c8104bd1bbf42c5b479d60927f0338f600160038110611f6257611f6161533d565b5b6020020135604051611f749190614aab565b60405180910390a450505050505095945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff1660065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120695782826040517f794398c70000000000000000000000000000000000000000000000000000000081526004016120609291906155e9565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083815481106120b9576120b861533d565b5b905f5260205f209060020201600101600c9054906101000a900465ffffffffffff1665ffffffffffff16146121275782826040517f728d6c4100000000000000000000000000000000000000000000000000000000815260040161211e9291906155e9565b60405180910390fd5b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050905060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083815481106121f6576121f561533d565b5b905f5260205f209060020201908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820154815f0155600182015f9054906101000a900465ffffffffffff16816001015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001820160069054906101000a900465ffffffffffff168160010160066101000a81548165ffffffffffff021916908365ffffffffffff16021790555060018201600c9054906101000a900465ffffffffffff1681600101600c6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001820160129054906101000a900465ffffffffffff168160010160126101000a81548165ffffffffffff021916908365ffffffffffff160217905550505060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106123735761237261533d565b5b905f5260205f2090600202015f8082015f9055600182015f6101000a81549065ffffffffffff02191690556001820160066101000a81549065ffffffffffff021916905560018201600c6101000a81549065ffffffffffff02191690556001820160126101000a81549065ffffffffffff0219169055505092915050565b5f804290505f5b83518110156124e8575f806124278887858151811061241a5761241961533d565b5b6020026020010151612a37565b9150915080156124db578360055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208785815181106124825761248161533d565b5b60200260200101518154811061249b5761249a61533d565b5b905f5260205f209060020201600101600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555081856124d8919061576b565b94505b82600101925050506123f8565b841561258f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87856040518363ffffffff1660e01b81526004016125499291906155e9565b6020604051808303815f875af1158015612565573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125899190615624565b5061262c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166339f4769387856040518363ffffffff1660e01b81526004016125ea9291906155e9565b6020604051808303815f875af1158015612606573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061262a9190615996565b505b50509392505050565b5f80600a838154811061264b5761264a61533d565b5b905f5260205f20016040518060c00160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160189054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff168152505090505f816020015165ffffffffffff164261276b9190615738565b9050816040015165ffffffffffff16816008868154811061278f5761278e61533d565b5b905f5260205f20906004020160010160159054906101000a900467ffffffffffffffff1667ffffffffffffffff166127c791906153d2565b6127d191906155b9565b92505050919050565b600881815481106127e9575f80fd5b905f5260205f2090600402015f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16908060010160159054906101000a900467ffffffffffffffff1690806002015f9054906101000a900467ffffffffffffffff16908060020160089054906101000a900467ffffffffffffffff16908060030154905087565b600b602052805f5260405f205f91509050805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900465ffffffffffff1690805f01600e9054906101000a900465ffffffffffff1690805f0160149054906101000a900460ff16905084565b5f61290582612635565b600883815481106129195761291861533d565b5b905f5260205f20906004020160010160159054906101000a900467ffffffffffffffff166129479190615397565b67ffffffffffffffff169050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c602052815f5260405f208181548110612994575f80fd5b905f5260205f20015f91509150505481565b600981815481106129b5575f80fd5b905f5260205f20015f91509050805f015f9054906101000a900460ff1690805f0160019054906101000a900467ffffffffffffffff1690805f0160099054906101000a900465ffffffffffff1690805f01600f9054906101000a900465ffffffffffff1690805f0160159054906101000a900467ffffffffffffffff16905085565b5f805f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208481548110612a8957612a8861533d565b5b905f5260205f2090600202016040518060a00160405290815f8201548152602001600182015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160018201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050805f015192505f816060015165ffffffffffff16148015612b87575042816040015165ffffffffffff1611155b8015612b9557505f815f0151115b9150509250929050565b60605f805f5b600880549050821015612bd257612bbb826108a3565b15612bc7578260010192505b816001019150612ba5565b5f8367ffffffffffffffff811115612bed57612bec614ec8565b5b604051908082528060200260200182016040528015612c1b5781602001602082028036833780820191505090505b5090505f92505b600880549050831015612c6f57612c38836108a3565b15612c645782818381518110612c5157612c5061533d565b5b6020026020010181815250508160010191505b826001019250612c22565b8094505050505090565b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110612cc957612cc861533d565b5b905f5260205f2090600202016001015f9054906101000a900465ffffffffffff1665ffffffffffff1603612d365733816040517f8fb61065000000000000000000000000000000000000000000000000000000008152600401612d2d9291906155e9565b60405180910390fd5b8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6004602052805f5260405f205f915054906101000a900460ff1681565b6005602052815f5260405f208181548110612dfa575f80fd5b905f5260205f2090600202015f9150915050805f015490806001015f9054906101000a900465ffffffffffff16908060010160069054906101000a900465ffffffffffff169080600101600c9054906101000a900465ffffffffffff16908060010160129054906101000a900465ffffffffffff16905085565b60605f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612fbb578382905f5260205f2090600202016040518060a00160405290815f8201548152602001600182015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160018201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff168152505081526020019060010190612ed3565b5050505090505f805b8251811015613035575f838281518110612fe157612fe061533d565b5b60200260200101516060015165ffffffffffff1614801561301e57505f8382815181106130115761301061533d565b5b60200260200101515f0151115b1561302a578160010191505b806001019050612fc4565b5f8267ffffffffffffffff8111156130505761304f614ec8565b5b60405190808252806020026020018201604052801561307e5781602001602082028036833780820191505090505b5090505f8092505b8451831015613117575f8584815181106130a3576130a261533d565b5b60200260200101516060015165ffffffffffff161480156130e057505f8584815181106130d3576130d261533d565b5b60200260200101515f0151115b1561310c57828282815181106130f9576130f861533d565b5b6020026020010181815250508060010190505b826001019250613086565b8195505050505050919050565b600a8181548110613133575f80fd5b905f5260205f20015f91509050805f015f9054906101000a900465ffffffffffff1690805f0160069054906101000a900465ffffffffffff1690805f01600c9054906101000a900465ffffffffffff1690805f0160129054906101000a900465ffffffffffff1690805f0160189054906101000a900465ffffffffffff1690805f01601e9054906101000a900460ff16905086565b5f80600a83815481106131de576131dd61533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a6132029190615542565b61320b846128fb565b61321591906153d2565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613281573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132a59190615996565b816132b091906155b9565b915050919050565b60025481565b5f805f80600b5f8681526020019081526020015f206040518060800160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600e9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160149054906101000a900460ff16151515158152505090508060600151613398575f805f93509350935050613404565b8060200151426133a891906159c1565b9250806040015165ffffffffffff168365ffffffffffff16109150816133d157805f0151613400565b806040015165ffffffffffff168365ffffffffffff16825f01516133f59190615946565b6133ff91906159fa565b5b9350505b9193909250565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630505c8c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613473573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061349791906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134fb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015613565573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061358991906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135ed576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6135f882612635565b6008838154811061360c5761360b61533d565b5b905f5260205f20906004020160010160158282829054906101000a900467ffffffffffffffff1661363d9190615397565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600a83815481106136785761367761533d565b5b905f5260205f20015f0160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550600b5f8381526020019081526020015f205f0160149054906101000a900460ff161561383a575f600b5f8481526020019081526020015f2090505f805f6136ea866132be565b92509250925082600987815481106137055761370461533d565b5b905f5260205f20015f0160018282829054906101000a900467ffffffffffffffff166137319190615397565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080156138195782845f015f8282829054906101000a900467ffffffffffffffff166137829190615397565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081845f01600e8282829054906101000a900465ffffffffffff166137cc91906159c1565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555084845f0160086101000a81548165ffffffffffff021916908365ffffffffffff160217905550613835565b5f845f0160146101000a81548160ff0219169083151502179055505b505050505b5050565b5f80613849836143cc565b6009848154811061385d5761385c61533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff1667ffffffffffffffff1661389091906153d2565b9050600a83815481106138a6576138a561533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a6138ca9190615542565b816138d591906155b9565b915050919050565b5f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050905060055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060a001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166366a5236c896040518263ffffffff1660e01b81526004016139c29190614aab565b602060405180830381865afa1580156139dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a019190615996565b81526020014265ffffffffffff1681526020018665ffffffffffff1681526020015f65ffffffffffff1681526020018565ffffffffffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160010160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550606082015181600101600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060808201518160010160126101000a81548165ffffffffffff021916908365ffffffffffff16021790555050505f613b2286846144f5565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19308389613b6e919061576b565b6040518363ffffffff1660e01b8152600401613b8b9291906155e9565b5f604051808303815f87803b158015613ba2575f80fd5b505af1158015613bb4573d5f803e3d5ffd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ccd2a5a187305f60016040518563ffffffff1660e01b8152600401613c189493929190615a2a565b6020604051808303815f875af1158015613c34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c589190615996565b505095945050505050565b613cdf848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613c9893929190615a6d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506147b9565b50505050565b5f600a8381548110613cfa57613cf961533d565b5b905f5260205f20016040518060c00160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160189054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff168152505090508060800151815f0151613e1491906156a8565b65ffffffffffff168265ffffffffffff16106143c7575f60088481548110613e3f57613e3e61533d565b5b905f5260205f2090600402016040518060e00160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff161515151581526020016001820160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152602001600282015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160038201548152505090505f8360098681548110613f8657613f8561533d565b5b905f5260205f20015f01600f9054906101000a900465ffffffffffff16613fad91906159c1565b65ffffffffffff1690505f613fc18661383e565b90505f8360400151613fd657835f0151614014565b8460a00151600a613fe79190615542565b82670de0b6b3a7640000865f0151613fff91906153d2565b61400991906155b9565b61401391906155b9565b5b905082856060015165ffffffffffff168261402f91906153d2565b61403991906155b9565b6008888154811061404d5761404c61533d565b5b905f5260205f2090600402016002015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f83866040015165ffffffffffff168361409b91906153d2565b6140a591906155b9565b90505f8160075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614113573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141379190615996565b851661414391906155b9565b9050887f3070b0e3e52b8713c7489d32604ea4b0970024f74c6e05319269a19bc1e3a9d960098b8154811061417b5761417a61533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff16836040516141a9929190615aa2565b60405180910390a2600989815481106141c5576141c461533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1610614248578060098a815481106142135761421261533d565b5b905f5260205f20015f0160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550614380565b5f8160098b8154811061425e5761425d61533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff166142879190615397565b905060405180608001604052808267ffffffffffffffff1681526020018a65ffffffffffff168152602001896080015165ffffffffffff16815260200160011515815250600b5f8c81526020019081526020015f205f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548165ffffffffffff021916908365ffffffffffff1602179055506040820151815f01600e6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506060820151815f0160146101000a81548160ff021916908315150217905550905050505b87600a8a815481106143955761439461533d565b5b905f5260205f20015f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505050505050505b505050565b5f80600a83815481106143e2576143e161533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a6144069190615542565b6008848154811061441a5761441961533d565b5b905f5260205f20906004020160010160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1661445291906153d2565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144e29190615996565b816144ed91906155b9565b915050919050565b5f806127106001548561450891906153d2565b61451291906155b9565b90505f6127106002548661452691906153d2565b61453091906155b9565b905060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156146b8578060035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546145cd919061576b565b925050819055508160035f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015614641573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061466591906157ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546146ac919061576b565b925050819055506147a3565b80826146c4919061576b565b60035f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015614730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061475491906157ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461479b919061576b565b925050819055505b80826147af919061576b565b9250505092915050565b5f6147e3828473ffffffffffffffffffffffffffffffffffffffff1661484e90919063ffffffff16565b90505f8151141580156148075750808060200190518101906148059190615624565b155b1561484957826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401614840919061564f565b60405180910390fd5b505050565b606061485b83835f614863565b905092915050565b6060814710156148aa57306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016148a1919061564f565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff1684866040516148d29190615b35565b5f6040518083038185875af1925050503d805f811461490c576040519150601f19603f3d011682016040523d82523d5f602084013e614911565b606091505b509150915061492186838361492c565b925050509392505050565b6060826149415761493c826149b9565b6149b1565b5f825114801561496757505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156149a957836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016149a0919061564f565b60405180910390fd5b8190506149b2565b5b9392505050565b5f815111156149cb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614a3782614a0e565b9050919050565b614a4781614a2d565b8114614a51575f80fd5b50565b5f81359050614a6281614a3e565b92915050565b5f60208284031215614a7d57614a7c614a06565b5b5f614a8a84828501614a54565b91505092915050565b5f819050919050565b614aa581614a93565b82525050565b5f602082019050614abe5f830184614a9c565b92915050565b614acd81614a93565b8114614ad7575f80fd5b50565b5f81359050614ae881614ac4565b92915050565b5f60208284031215614b0357614b02614a06565b5b5f614b1084828501614ada565b91505092915050565b5f8115159050919050565b614b2d81614b19565b82525050565b5f602082019050614b465f830184614b24565b92915050565b614b5581614b19565b8114614b5f575f80fd5b50565b5f81359050614b7081614b4c565b92915050565b5f8060408385031215614b8c57614b8b614a06565b5b5f614b9985828601614a54565b9250506020614baa85828601614b62565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614be681614a93565b82525050565b5f614bf78383614bdd565b60208301905092915050565b5f602082019050919050565b5f614c1982614bb4565b614c238185614bbe565b9350614c2e83614bce565b805f5b83811015614c5e578151614c458882614bec565b9750614c5083614c03565b925050600181019050614c31565b5085935050505092915050565b5f6020820190508181035f830152614c838184614c0f565b905092915050565b5f8060408385031215614ca157614ca0614a06565b5b5f614cae85828601614ada565b9250506020614cbf85828601614ada565b9150509250929050565b5f805f805f60a08688031215614ce257614ce1614a06565b5b5f614cef88828901614ada565b9550506020614d0088828901614ada565b9450506040614d1188828901614ada565b9350506060614d2288828901614a54565b9250506080614d3388828901614a54565b9150509295509295909350565b5f606082019050614d535f830186614a9c565b614d606020830185614a9c565b614d6d6040830184614a9c565b949350505050565b5f80fd5b5f81905082602060030282011115614d9457614d93614d75565b5b92915050565b5f81905082602060020282011115614db557614db4614d75565b5b92915050565b5f81905082602060020282011115614dd657614dd5614d75565b5b92915050565b5f81905082602060020282011115614df757614df6614d75565b5b92915050565b5f805f805f6101408688031215614e1757614e16614a06565b5b5f614e2488828901614d79565b9550506060614e3588828901614d9a565b94505060a0614e4688828901614a54565b93505060c0614e5788828901614dbb565b925050610100614e6988828901614ddc565b9150509295509295909350565b5f8060408385031215614e8c57614e8b614a06565b5b5f614e9985828601614a54565b9250506020614eaa85828601614ada565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614efe82614eb8565b810181811067ffffffffffffffff82111715614f1d57614f1c614ec8565b5b80604052505050565b5f614f2f6149fd565b9050614f3b8282614ef5565b919050565b5f67ffffffffffffffff821115614f5a57614f59614ec8565b5b602082029050602081019050919050565b5f614f7d614f7884614f40565b614f26565b90508083825260208201905060208402830185811115614fa057614f9f614d75565b5b835b81811015614fc95780614fb58882614ada565b845260208401935050602081019050614fa2565b5050509392505050565b5f82601f830112614fe757614fe6614eb4565b5b8135614ff7848260208601614f6b565b91505092915050565b5f805f6060848603121561501757615016614a06565b5b5f61502486828701614a54565b935050602061503586828701614b62565b925050604084013567ffffffffffffffff81111561505657615055614a0a565b5b61506286828701614fd3565b9150509250925092565b5f67ffffffffffffffff82169050919050565b6150888161506c565b82525050565b5f6020820190506150a15f83018461507f565b92915050565b6150b081614a2d565b82525050565b5f60e0820190506150c95f83018a614a9c565b6150d660208301896150a7565b6150e36040830188614b24565b6150f0606083018761507f565b6150fd608083018661507f565b61510a60a083018561507f565b61511760c0830184614a9c565b98975050505050505050565b5f65ffffffffffff82169050919050565b61513d81615123565b82525050565b5f6080820190506151565f83018761507f565b6151636020830186615134565b6151706040830185615134565b61517d6060830184614b24565b95945050505050565b5f819050919050565b5f6151a96151a461519f84614a0e565b615186565b614a0e565b9050919050565b5f6151ba8261518f565b9050919050565b5f6151cb826151b0565b9050919050565b6151db816151c1565b82525050565b5f6020820190506151f45f8301846151d2565b92915050565b5f60a08201905061520d5f830188614b24565b61521a602083018761507f565b6152276040830186615134565b6152346060830185615134565b615241608083018461507f565b9695505050505050565b5f60408201905061525e5f830185614a9c565b61526b6020830184614b24565b9392505050565b5f60a0820190506152855f830188614a9c565b6152926020830187615134565b61529f6040830186615134565b6152ac6060830185615134565b6152b96080830184615134565b9695505050505050565b5f60ff82169050919050565b6152d8816152c3565b82525050565b5f60c0820190506152f15f830189615134565b6152fe6020830188615134565b61530b6040830187615134565b6153186060830186615134565b6153256080830185615134565b61533260a08301846152cf565b979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6153a18261506c565b91506153ac8361506c565b9250828203905067ffffffffffffffff8111156153cc576153cb61536a565b5b92915050565b5f6153dc82614a93565b91506153e783614a93565b92508282026153f581614a93565b9150828204841483151761540c5761540b61536a565b5b5092915050565b5f8160011c9050919050565b5f808291508390505b6001851115615468578086048111156154445761544361536a565b5b60018516156154535780820291505b808102905061546185615413565b9450615428565b94509492505050565b5f82615480576001905061553b565b8161548d575f905061553b565b81600181146154a357600281146154ad576154dc565b600191505061553b565b60ff8411156154bf576154be61536a565b5b8360020a9150848211156154d6576154d561536a565b5b5061553b565b5060208310610133831016604e8410600b84101617156155115782820a90508381111561550c5761550b61536a565b5b61553b565b61551e848484600161541f565b925090508184048111156155355761553461536a565b5b81810290505b9392505050565b5f61554c82614a93565b9150615557836152c3565b92506155847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615471565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6155c382614a93565b91506155ce83614a93565b9250826155de576155dd61558c565b5b828204905092915050565b5f6040820190506155fc5f8301856150a7565b6156096020830184614a9c565b9392505050565b5f8151905061561e81614b4c565b92915050565b5f6020828403121561563957615638614a06565b5b5f61564684828501615610565b91505092915050565b5f6020820190506156625f8301846150a7565b92915050565b5f60208201905061567b5f830184615134565b92915050565b5f6040820190506156945f830185614a9c565b6156a16020830184614a9c565b9392505050565b5f6156b282615123565b91506156bd83615123565b9250828201905065ffffffffffff8111156156db576156da61536a565b5b92915050565b5f6156fb6156f66156f18461506c565b615186565b614a93565b9050919050565b61570b816156e1565b82525050565b5f6040820190506157245f830185614a9c565b6157316020830184615702565b9392505050565b5f61574282614a93565b915061574d83614a93565b92508282039050818111156157655761576461536a565b5b92915050565b5f61577582614a93565b915061578083614a93565b92508282019050808211156157985761579761536a565b5b92915050565b5f6157a88261506c565b91506157b38361506c565b9250828201905067ffffffffffffffff8111156157d3576157d261536a565b5b92915050565b5f815190506157e781614a3e565b92915050565b5f6020828403121561580257615801614a06565b5b5f61580f848285016157d9565b91505092915050565b615821816152c3565b811461582b575f80fd5b50565b5f8151905061583c81615818565b92915050565b5f6020828403121561585757615856614a06565b5b5f6158648482850161582e565b91505092915050565b5f6020828403121561588257615881614a06565b5b5f61588f84828501614b62565b91505092915050565b5f6158a282614a93565b91506158ad83614a93565b92506158da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615471565b905092915050565b5f63ffffffff82169050919050565b6158fa816158e2565b8114615904575f80fd5b50565b5f81359050615915816158f1565b92915050565b5f602082840312156159305761592f614a06565b5b5f61593d84828501615907565b91505092915050565b5f6159508261506c565b915061595b8361506c565b92508282026159698161506c565b915080821461597b5761597a61536a565b5b5092915050565b5f8151905061599081614ac4565b92915050565b5f602082840312156159ab576159aa614a06565b5b5f6159b884828501615982565b91505092915050565b5f6159cb82615123565b91506159d683615123565b9250828203905065ffffffffffff8111156159f4576159f361536a565b5b92915050565b5f615a048261506c565b9150615a0f8361506c565b925082615a1f57615a1e61558c565b5b828204905092915050565b5f608082019050615a3d5f830187614a9c565b615a4a60208301866150a7565b615a576040830185614b24565b615a646060830184614b24565b95945050505050565b5f606082019050615a805f8301866150a7565b615a8d60208301856150a7565b615a9a6040830184614a9c565b949350505050565b5f604082019050615ab55f83018561507f565b615ac2602083018461507f565b9392505050565b5f81519050919050565b5f81905092915050565b5f5b83811015615afa578082015181840152602081019050615adf565b5f8484015250505050565b5f615b0f82615ac9565b615b198185615ad3565b9350615b29818560208601615add565b80840191505092915050565b5f615b408284615b05565b91508190509291505056fea264697066735822122088f3b90cff3003ab8be7fb6170a674ebfd836bab87d9717dd2b24d6fbc4a873f64736f6c63430008140033","sourceMap":"335:9738:86:-:0;;;636:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;787:9;798:4;804;810:7;819:8;735:10:119;747:12;524:17:117;325:10:118;313:9;;:22;;;;;;;;;;;;;;;;;;350:37;375:10;350:37;;;;;;:::i;:::-;;;;;;;;263:131;573:12:117::1;558:28;;;;;;;;::::0;::::1;417:176:::0;;785:12:119::1;771:27;;;;;;;;::::0;::::1;828:15;808:36;;;;;;;;::::0;::::1;876:16;854:9;;:39;;;;;;;;;;;;;;;;;;545:355:::0;;;;;839:5:86::1;;:13;;;853:7;862:17;839:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;636:251:::0;;;;;335:9738;;88:117:133;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:977::-;951:6;959;967;975;983;1032:3;1020:9;1011:7;1007:23;1003:33;1000:120;;;1039:79;;:::i;:::-;1000:120;1159:1;1184:64;1240:7;1231:6;1220:9;1216:22;1184:64;:::i;:::-;1174:74;;1130:128;1297:2;1323:64;1379:7;1370:6;1359:9;1355:22;1323:64;:::i;:::-;1313:74;;1268:129;1436:2;1462:64;1518:7;1509:6;1498:9;1494:22;1462:64;:::i;:::-;1452:74;;1407:129;1575:2;1601:64;1657:7;1648:6;1637:9;1633:22;1601:64;:::i;:::-;1591:74;;1546:129;1714:3;1741:64;1797:7;1788:6;1777:9;1773:22;1741:64;:::i;:::-;1731:74;;1685:130;845:977;;;;;;;;:::o;1828:118::-;1915:24;1933:5;1915:24;:::i;:::-;1910:3;1903:37;1828:118;;:::o;1952:222::-;2045:4;2083:2;2072:9;2068:18;2060:26;;2096:71;2164:1;2153:9;2149:17;2140:6;2096:71;:::i;:::-;1952:222;;;;:::o;2180:77::-;2217:7;2246:5;2235:16;;2180:77;;;:::o;2263:118::-;2350:24;2368:5;2350:24;:::i;:::-;2345:3;2338:37;2263:118;;:::o;2387:332::-;2508:4;2546:2;2535:9;2531:18;2523:26;;2559:71;2627:1;2616:9;2612:17;2603:6;2559:71;:::i;:::-;2640:72;2708:2;2697:9;2693:18;2684:6;2640:72;:::i;:::-;2387:332;;;;;:::o;2725:90::-;2759:7;2802:5;2795:13;2788:21;2777:32;;2725:90;;;:::o;2821:116::-;2891:21;2906:5;2891:21;:::i;:::-;2884:5;2881:32;2871:60;;2927:1;2924;2917:12;2871:60;2821:116;:::o;2943:137::-;2997:5;3028:6;3022:13;3013:22;;3044:30;3068:5;3044:30;:::i;:::-;2943:137;;;;:::o;3086:345::-;3153:6;3202:2;3190:9;3181:7;3177:23;3173:32;3170:119;;;3208:79;;:::i;:::-;3170:119;3328:1;3353:61;3406:7;3397:6;3386:9;3382:22;3353:61;:::i;:::-;3343:71;;3299:125;3086:345;;;;:::o;335:9738:86:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063a986a19611610118578063c3e0fb1c116100ab578063e0b117ff1161007a578063e0b117ff146106a2578063e481b265146106d6578063e73496cd14610706578063f1b7dc781461073b578063f3191a461461076b57610204565b8063c3e0fb1c14610607578063c9b67af514610638578063d6db4df814610656578063d936547e1461067257610204565b8063bcb29667116100e7578063bcb2966714610555578063bf7e214f14610585578063c0680e20146105a3578063c0aa0e8a146105d357610204565b8063a986a1961461048c578063abbf4b17146104bc578063b1283e77146104ec578063bc3b2b121461052257610204565b8063649144391161019b5780637c770aae1161016a5780637c770aae146103d45780639b19251a146104065780639c76978714610422578063a0139f411461042c578063a42206101461045c57610204565b8063649144391461033c578063654e51e71461036c5780636a6c575d146103885780637a9e5e4b146103b857610204565b806327507458116101d757806327507458146102a25780633adec5a7146102d25780633d18b9121461030257806346aed74e1461030c57610204565b80630700037d146102085780630a9d85eb146102385780630aebeb4e146102685780631885f58014610284575b5f80fd5b610222600480360381019061021d9190614a68565b610789565b60405161022f9190614aab565b60405180910390f35b610252600480360381019061024d9190614aee565b61079e565b60405161025f9190614aab565b60405180910390f35b610282600480360381019061027d9190614aee565b6107fd565b005b61028c61089d565b6040516102999190614aab565b60405180910390f35b6102bc60048036038101906102b79190614aee565b6108a3565b6040516102c99190614b33565b60405180910390f35b6102ec60048036038101906102e79190614aee565b610913565b6040516102f99190614aab565b60405180910390f35b61030a61097e565b005b61032660048036038101906103219190614b76565b610aa0565b6040516103339190614aab565b60405180910390f35b61035660048036038101906103519190614a68565b610abc565b6040516103639190614c6b565b60405180910390f35b61038660048036038101906103819190614c8b565b610c6c565b005b6103a2600480360381019061039d9190614c8b565b610c86565b6040516103af9190614aab565b60405180910390f35b6103d260048036038101906103cd9190614a68565b610cfd565b005b6103ee60048036038101906103e99190614cc9565b610d7e565b6040516103fd93929190614d40565b60405180910390f35b610420600480360381019061041b9190614a68565b61129b565b005b61042a611344565b005b61044660048036038101906104419190614dfd565b611689565b6040516104539190614aab565b60405180910390f35b61047660048036038101906104719190614e76565b611f8b565b6040516104839190614aab565b60405180910390f35b6104a660048036038101906104a19190615000565b6123f1565b6040516104b39190614aab565b60405180910390f35b6104d660048036038101906104d19190614aee565b612635565b6040516104e3919061508e565b60405180910390f35b61050660048036038101906105019190614aee565b6127da565b60405161051997969594939291906150b6565b60405180910390f35b61053c60048036038101906105379190614aee565b61288e565b60405161054c9493929190615143565b60405180910390f35b61056f600480360381019061056a9190614aee565b6128fb565b60405161057c9190614aab565b60405180910390f35b61058d612958565b60405161059a91906151e1565b60405180910390f35b6105bd60048036038101906105b89190614e76565b61297b565b6040516105ca9190614aab565b60405180910390f35b6105ed60048036038101906105e89190614aee565b6129a6565b6040516105fe9594939291906151fa565b60405180910390f35b610621600480360381019061061c9190614e76565b612a37565b60405161062f92919061524b565b60405180910390f35b610640612b9f565b60405161064d9190614c6b565b60405180910390f35b610670600480360381019061066b9190614e76565b612c79565b005b61068c60048036038101906106879190614a68565b612dc4565b6040516106999190614b33565b60405180910390f35b6106bc60048036038101906106b79190614e76565b612de1565b6040516106cd959493929190615272565b60405180910390f35b6106f060048036038101906106eb9190614a68565b612e74565b6040516106fd9190614c6b565b60405180910390f35b610720600480360381019061071b9190614aee565b613124565b604051610732969594939291906152de565b60405180910390f35b61075560048036038101906107509190614aee565b6131c8565b6040516107629190614aab565b60405180910390f35b6107736132b8565b6040516107809190614aab565b60405180910390f35b6003602052805f5260405f205f915090505481565b5f806107a9836132be565b5050905080600984815481106107c2576107c161533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff166107eb9190615397565b67ffffffffffffffff16915050919050565b61080561340b565b426009828154811061081a5761081961533d565b5b905f5260205f20015f01600f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505f6008828154811061085b5761085a61533d565b5b905f5260205f2090600402015f0181905550807f9dc30b8eda31a6a144e092e5de600955523a6a925cc15cc1d1b9b4872cfa615560405160405180910390a250565b60015481565b5f80600883815481106108b9576108b861533d565b5b905f5260205f2090600402015f015411801561090c575042600983815481106108e5576108e461533d565b5b905f5260205f20015f01600f9054906101000a900465ffffffffffff1665ffffffffffff16115b9050919050565b5f8061091e836131c8565b6109278461079e565b61093191906153d2565b9050600a83815481106109475761094661533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a61096b9190615542565b8161097691906155b9565b915050919050565b5f60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610a5c9291906155e9565b6020604051808303815f875af1158015610a78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9c9190615624565b5050565b5f610ab48383610aaf86612e74565b6123f1565b905092915050565b60605f600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610b4457602002820191905f5260205f20905b815481526020019060010190808311610b30575b505050505090505f805f5b8351821015610b9257610b7b848381518110610b6e57610b6d61533d565b5b60200260200101516108a3565b15610b87578260010192505b816001019150610b4f565b5f8367ffffffffffffffff811115610bad57610bac614ec8565b5b604051908082528060200260200182016040528015610bdb5781602001602082028036833780820191505090505b5090505f92505b8451831015610c5f57610c0e858481518110610c0157610c0061533d565b5b60200260200101516108a3565b15610c5457848381518110610c2657610c2561533d565b5b6020026020010151818381518110610c4157610c4061533d565b5b6020026020010181815250508160010191505b826001019250610be2565b8095505050505050919050565b610c746134fd565b81600281905550806001819055505050565b5f80610c9184610913565b670de0b6b3a764000084610ca591906153d2565b610caf91906155b9565b9050600a8481548110610cc557610cc461533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a610ce99190615542565b81610cf491906155b9565b91505092915050565b610d056134fd565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad81604051610d73919061564f565b60405180910390a150565b5f805f8060088981548110610d9657610d9561533d565b5b905f5260205f20906004020190505f60098a81548110610db957610db861533d565b5b905f5260205f20016040518060a00160405290815f82015f9054906101000a900460ff161515151581526020015f820160019054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160099054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090505f429050816060015165ffffffffffff168165ffffffffffff1610610eff5781606001516040517f83399e2d000000000000000000000000000000000000000000000000000000008152600401610ef69190615668565b60405180910390fd5b610f098b826135ef565b5f610f138c61383e565b905089811115610f5c57808a6040517f8f3847e9000000000000000000000000000000000000000000000000000000008152600401610f53929190615681565b60405180910390fd5b825f0151610f6e578260400151610f7f565b818360400151610f7e91906156a8565b5b65ffffffffffff169550600a8c81548110610f9d57610f9c61533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a610fc19190615542565b81670de0b6b3a76400008d610fd691906153d2565b610fe091906155b9565b610fea91906155b9565b9650836002015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1687111561106b5786846002015f9054906101000a900467ffffffffffffffff166040517f9b5ae2d9000000000000000000000000000000000000000000000000000000008152600401611062929190615711565b60405180910390fd5b8360010160149054906101000a900460ff166110875786611089565b8a5b845f015f82825461109a9190615738565b925050819055508a846003015f8282546110b4919061576b565b92505081905550868460020160088282829054906101000a900467ffffffffffffffff166110e2919061579e565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550868460010160158282829054906101000a900467ffffffffffffffff1661112f919061579e565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508b7f7880508a48fd3aee88f7e15917d85e39c3ad059e51ad4aca9bb46e7b4938b9618c83604051611187929190615681565b60405180910390a261119c8988888f8c6138dd565b945061120f3360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d876001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c63909392919063ffffffff16565b8360010160159054906101000a900467ffffffffffffffff1667ffffffffffffffff16836080015167ffffffffffffffff161015611281575f845f01819055508b7f9dc30b8eda31a6a144e092e5de600955523a6a925cc15cc1d1b9b4872cfa615560405160405180910390a261128c565b61128b8c83613ce5565b5b50505050955095509592505050565b6112a361340b565b60045f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161560045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d091906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156114c257505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149291906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b801561158557505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630505c8c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611531573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155591906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156115bc576040517f7d7b71b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611624573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164891906157ed565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61169261340b565b5f42866001600281106116a8576116a761533d565b5b60200201356116b79190615738565b90505f8573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611703573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117279190615842565b60ff1690505f845f600281106117405761173f61533d565b5b602002016020810190611753919061586d565b61177457885f6003811061176a5761176961533d565b5b60200201356117da565b81600a6117819190615898565b896001600381106117955761179461533d565b5b6020020135670de0b6b3a76400008b5f600381106117b6576117b561533d565b5b60200201356117c591906153d2565b6117cf91906155b9565b6117d991906155b9565b5b90505f83875f600281106117f1576117f061533d565b5b602002016020810190611804919061591b565b63ffffffff16836118159190615946565b67ffffffffffffffff1661182991906155b9565b90505f620186a08b6002600381106118445761184361533d565b5b60200201358467ffffffffffffffff1661185e91906153d2565b61186891906155b9565b8367ffffffffffffffff1661187d919061576b565b90505f8367ffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119199190615996565b8d60016003811061192d5761192c61533d565b5b602002013561193c91906153d2565b61194691906155b9565b9050600880549050965060086040518060e001604052808e5f600381106119705761196f61533d565b5b602002013581526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018a5f600281106119a9576119a861533d565b5b6020020160208101906119bc919061586d565b151581526020018667ffffffffffffffff1681526020018567ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506080820151816002015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060a08201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060c08201518160030155505060096040518060a001604052808a600160028110611b4457611b4361533d565b5b602002016020810190611b57919061586d565b151581526020018367ffffffffffffffff1681526020018d5f60028110611b8157611b8061533d565b5b602002013565ffffffffffff1681526020018d600160028110611ba757611ba661533d565b5b602002013565ffffffffffff1681526020018467ffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160096101000a81548165ffffffffffff021916908365ffffffffffff1602179055506060820151815f01600f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506080820151815f0160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050600a6040518060c001604052804265ffffffffffff1681526020014265ffffffffffff1681526020018865ffffffffffff1681526020018b5f60028110611d0257611d0161533d565b5b602002016020810190611d15919061591b565b63ffffffff1665ffffffffffff1681526020018b600160028110611d3c57611d3b61533d565b5b602002016020810190611d4f919061591b565b63ffffffff1665ffffffffffff1681526020018760ff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548165ffffffffffff021916908365ffffffffffff1602179055506040820151815f01600c6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506060820151815f0160126101000a81548165ffffffffffff021916908365ffffffffffff1602179055506080820151815f0160186101000a81548165ffffffffffff021916908365ffffffffffff16021790555060a0820151815f01601e6101000a81548160ff021916908360ff1602179055505050600c5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2087908060018154018082558091505060019003905f5260205f20015f90919091909150558973ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16887ff5110a61238afa49549d323d552cac783a8c8104bd1bbf42c5b479d60927f0338f600160038110611f6257611f6161533d565b5b6020020135604051611f749190614aab565b60405180910390a450505050505095945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff1660065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120695782826040517f794398c70000000000000000000000000000000000000000000000000000000081526004016120609291906155e9565b60405180910390fd5b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083815481106120b9576120b861533d565b5b905f5260205f209060020201600101600c9054906101000a900465ffffffffffff1665ffffffffffff16146121275782826040517f728d6c4100000000000000000000000000000000000000000000000000000000815260040161211e9291906155e9565b60405180910390fd5b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050905060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083815481106121f6576121f561533d565b5b905f5260205f209060020201908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820154815f0155600182015f9054906101000a900465ffffffffffff16816001015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001820160069054906101000a900465ffffffffffff168160010160066101000a81548165ffffffffffff021916908365ffffffffffff16021790555060018201600c9054906101000a900465ffffffffffff1681600101600c6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506001820160129054906101000a900465ffffffffffff168160010160126101000a81548165ffffffffffff021916908365ffffffffffff160217905550505060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106123735761237261533d565b5b905f5260205f2090600202015f8082015f9055600182015f6101000a81549065ffffffffffff02191690556001820160066101000a81549065ffffffffffff021916905560018201600c6101000a81549065ffffffffffff02191690556001820160126101000a81549065ffffffffffff0219169055505092915050565b5f804290505f5b83518110156124e8575f806124278887858151811061241a5761241961533d565b5b6020026020010151612a37565b9150915080156124db578360055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208785815181106124825761248161533d565b5b60200260200101518154811061249b5761249a61533d565b5b905f5260205f209060020201600101600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555081856124d8919061576b565b94505b82600101925050506123f8565b841561258f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87856040518363ffffffff1660e01b81526004016125499291906155e9565b6020604051808303815f875af1158015612565573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125899190615624565b5061262c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166339f4769387856040518363ffffffff1660e01b81526004016125ea9291906155e9565b6020604051808303815f875af1158015612606573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061262a9190615996565b505b50509392505050565b5f80600a838154811061264b5761264a61533d565b5b905f5260205f20016040518060c00160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160189054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff168152505090505f816020015165ffffffffffff164261276b9190615738565b9050816040015165ffffffffffff16816008868154811061278f5761278e61533d565b5b905f5260205f20906004020160010160159054906101000a900467ffffffffffffffff1667ffffffffffffffff166127c791906153d2565b6127d191906155b9565b92505050919050565b600881815481106127e9575f80fd5b905f5260205f2090600402015f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16908060010160159054906101000a900467ffffffffffffffff1690806002015f9054906101000a900467ffffffffffffffff16908060020160089054906101000a900467ffffffffffffffff16908060030154905087565b600b602052805f5260405f205f91509050805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900465ffffffffffff1690805f01600e9054906101000a900465ffffffffffff1690805f0160149054906101000a900460ff16905084565b5f61290582612635565b600883815481106129195761291861533d565b5b905f5260205f20906004020160010160159054906101000a900467ffffffffffffffff166129479190615397565b67ffffffffffffffff169050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c602052815f5260405f208181548110612994575f80fd5b905f5260205f20015f91509150505481565b600981815481106129b5575f80fd5b905f5260205f20015f91509050805f015f9054906101000a900460ff1690805f0160019054906101000a900467ffffffffffffffff1690805f0160099054906101000a900465ffffffffffff1690805f01600f9054906101000a900465ffffffffffff1690805f0160159054906101000a900467ffffffffffffffff16905085565b5f805f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208481548110612a8957612a8861533d565b5b905f5260205f2090600202016040518060a00160405290815f8201548152602001600182015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160018201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050805f015192505f816060015165ffffffffffff16148015612b87575042816040015165ffffffffffff1611155b8015612b9557505f815f0151115b9150509250929050565b60605f805f5b600880549050821015612bd257612bbb826108a3565b15612bc7578260010192505b816001019150612ba5565b5f8367ffffffffffffffff811115612bed57612bec614ec8565b5b604051908082528060200260200182016040528015612c1b5781602001602082028036833780820191505090505b5090505f92505b600880549050831015612c6f57612c38836108a3565b15612c645782818381518110612c5157612c5061533d565b5b6020026020010181815250508160010191505b826001019250612c22565b8094505050505090565b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110612cc957612cc861533d565b5b905f5260205f2090600202016001015f9054906101000a900465ffffffffffff1665ffffffffffff1603612d365733816040517f8fb61065000000000000000000000000000000000000000000000000000000008152600401612d2d9291906155e9565b60405180910390fd5b8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6004602052805f5260405f205f915054906101000a900460ff1681565b6005602052815f5260405f208181548110612dfa575f80fd5b905f5260205f2090600202015f9150915050805f015490806001015f9054906101000a900465ffffffffffff16908060010160069054906101000a900465ffffffffffff169080600101600c9054906101000a900465ffffffffffff16908060010160129054906101000a900465ffffffffffff16905085565b60605f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612fbb578382905f5260205f2090600202016040518060a00160405290815f8201548152602001600182015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160018201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff168152505081526020019060010190612ed3565b5050505090505f805b8251811015613035575f838281518110612fe157612fe061533d565b5b60200260200101516060015165ffffffffffff1614801561301e57505f8382815181106130115761301061533d565b5b60200260200101515f0151115b1561302a578160010191505b806001019050612fc4565b5f8267ffffffffffffffff8111156130505761304f614ec8565b5b60405190808252806020026020018201604052801561307e5781602001602082028036833780820191505090505b5090505f8092505b8451831015613117575f8584815181106130a3576130a261533d565b5b60200260200101516060015165ffffffffffff161480156130e057505f8584815181106130d3576130d261533d565b5b60200260200101515f0151115b1561310c57828282815181106130f9576130f861533d565b5b6020026020010181815250508060010190505b826001019250613086565b8195505050505050919050565b600a8181548110613133575f80fd5b905f5260205f20015f91509050805f015f9054906101000a900465ffffffffffff1690805f0160069054906101000a900465ffffffffffff1690805f01600c9054906101000a900465ffffffffffff1690805f0160129054906101000a900465ffffffffffff1690805f0160189054906101000a900465ffffffffffff1690805f01601e9054906101000a900460ff16905086565b5f80600a83815481106131de576131dd61533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a6132029190615542565b61320b846128fb565b61321591906153d2565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613281573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132a59190615996565b816132b091906155b9565b915050919050565b60025481565b5f805f80600b5f8681526020019081526020015f206040518060800160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600e9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160149054906101000a900460ff16151515158152505090508060600151613398575f805f93509350935050613404565b8060200151426133a891906159c1565b9250806040015165ffffffffffff168365ffffffffffff16109150816133d157805f0151613400565b806040015165ffffffffffff168365ffffffffffff16825f01516133f59190615946565b6133ff91906159fa565b5b9350505b9193909250565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630505c8c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613473573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061349791906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134fb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015613565573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061358991906157ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135ed576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6135f882612635565b6008838154811061360c5761360b61533d565b5b905f5260205f20906004020160010160158282829054906101000a900467ffffffffffffffff1661363d9190615397565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600a83815481106136785761367761533d565b5b905f5260205f20015f0160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550600b5f8381526020019081526020015f205f0160149054906101000a900460ff161561383a575f600b5f8481526020019081526020015f2090505f805f6136ea866132be565b92509250925082600987815481106137055761370461533d565b5b905f5260205f20015f0160018282829054906101000a900467ffffffffffffffff166137319190615397565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080156138195782845f015f8282829054906101000a900467ffffffffffffffff166137829190615397565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081845f01600e8282829054906101000a900465ffffffffffff166137cc91906159c1565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555084845f0160086101000a81548165ffffffffffff021916908365ffffffffffff160217905550613835565b5f845f0160146101000a81548160ff0219169083151502179055505b505050505b5050565b5f80613849836143cc565b6009848154811061385d5761385c61533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff1667ffffffffffffffff1661389091906153d2565b9050600a83815481106138a6576138a561533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a6138ca9190615542565b816138d591906155b9565b915050919050565b5f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050905060055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060a001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166366a5236c896040518263ffffffff1660e01b81526004016139c29190614aab565b602060405180830381865afa1580156139dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a019190615996565b81526020014265ffffffffffff1681526020018665ffffffffffff1681526020015f65ffffffffffff1681526020018565ffffffffffff16815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060408201518160010160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550606082015181600101600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060808201518160010160126101000a81548165ffffffffffff021916908365ffffffffffff16021790555050505f613b2286846144f5565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19308389613b6e919061576b565b6040518363ffffffff1660e01b8152600401613b8b9291906155e9565b5f604051808303815f87803b158015613ba2575f80fd5b505af1158015613bb4573d5f803e3d5ffd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ccd2a5a187305f60016040518563ffffffff1660e01b8152600401613c189493929190615a2a565b6020604051808303815f875af1158015613c34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c589190615996565b505095945050505050565b613cdf848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613c9893929190615a6d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506147b9565b50505050565b5f600a8381548110613cfa57613cf961533d565b5b905f5260205f20016040518060c00160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600c9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160129054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160189054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201601e9054906101000a900460ff1660ff1660ff168152505090508060800151815f0151613e1491906156a8565b65ffffffffffff168265ffffffffffff16106143c7575f60088481548110613e3f57613e3e61533d565b5b905f5260205f2090600402016040518060e00160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff161515151581526020016001820160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152602001600282015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160038201548152505090505f8360098681548110613f8657613f8561533d565b5b905f5260205f20015f01600f9054906101000a900465ffffffffffff16613fad91906159c1565b65ffffffffffff1690505f613fc18661383e565b90505f8360400151613fd657835f0151614014565b8460a00151600a613fe79190615542565b82670de0b6b3a7640000865f0151613fff91906153d2565b61400991906155b9565b61401391906155b9565b5b905082856060015165ffffffffffff168261402f91906153d2565b61403991906155b9565b6008888154811061404d5761404c61533d565b5b905f5260205f2090600402016002015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f83866040015165ffffffffffff168361409b91906153d2565b6140a591906155b9565b90505f8160075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614113573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141379190615996565b851661414391906155b9565b9050887f3070b0e3e52b8713c7489d32604ea4b0970024f74c6e05319269a19bc1e3a9d960098b8154811061417b5761417a61533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff16836040516141a9929190615aa2565b60405180910390a2600989815481106141c5576141c461533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1610614248578060098a815481106142135761421261533d565b5b905f5260205f20015f0160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550614380565b5f8160098b8154811061425e5761425d61533d565b5b905f5260205f20015f0160019054906101000a900467ffffffffffffffff166142879190615397565b905060405180608001604052808267ffffffffffffffff1681526020018a65ffffffffffff168152602001896080015165ffffffffffff16815260200160011515815250600b5f8c81526020019081526020015f205f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548165ffffffffffff021916908365ffffffffffff1602179055506040820151815f01600e6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506060820151815f0160146101000a81548160ff021916908315150217905550905050505b87600a8a815481106143955761439461533d565b5b905f5260205f20015f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055505050505050505b505050565b5f80600a83815481106143e2576143e161533d565b5b905f5260205f20015f01601e9054906101000a900460ff16600a6144069190615542565b6008848154811061441a5761441961533d565b5b905f5260205f20906004020160010160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1661445291906153d2565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860f50486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144e29190615996565b816144ed91906155b9565b915050919050565b5f806127106001548561450891906153d2565b61451291906155b9565b90505f6127106002548661452691906153d2565b61453091906155b9565b905060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156146b8578060035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546145cd919061576b565b925050819055508160035f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015614641573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061466591906157ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546146ac919061576b565b925050819055506147a3565b80826146c4919061576b565b60035f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015614730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061475491906157ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461479b919061576b565b925050819055505b80826147af919061576b565b9250505092915050565b5f6147e3828473ffffffffffffffffffffffffffffffffffffffff1661484e90919063ffffffff16565b90505f8151141580156148075750808060200190518101906148059190615624565b155b1561484957826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401614840919061564f565b60405180910390fd5b505050565b606061485b83835f614863565b905092915050565b6060814710156148aa57306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016148a1919061564f565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff1684866040516148d29190615b35565b5f6040518083038185875af1925050503d805f811461490c576040519150601f19603f3d011682016040523d82523d5f602084013e614911565b606091505b509150915061492186838361492c565b925050509392505050565b6060826149415761493c826149b9565b6149b1565b5f825114801561496757505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156149a957836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016149a0919061564f565b60405180910390fd5b8190506149b2565b5b9392505050565b5f815111156149cb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614a3782614a0e565b9050919050565b614a4781614a2d565b8114614a51575f80fd5b50565b5f81359050614a6281614a3e565b92915050565b5f60208284031215614a7d57614a7c614a06565b5b5f614a8a84828501614a54565b91505092915050565b5f819050919050565b614aa581614a93565b82525050565b5f602082019050614abe5f830184614a9c565b92915050565b614acd81614a93565b8114614ad7575f80fd5b50565b5f81359050614ae881614ac4565b92915050565b5f60208284031215614b0357614b02614a06565b5b5f614b1084828501614ada565b91505092915050565b5f8115159050919050565b614b2d81614b19565b82525050565b5f602082019050614b465f830184614b24565b92915050565b614b5581614b19565b8114614b5f575f80fd5b50565b5f81359050614b7081614b4c565b92915050565b5f8060408385031215614b8c57614b8b614a06565b5b5f614b9985828601614a54565b9250506020614baa85828601614b62565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614be681614a93565b82525050565b5f614bf78383614bdd565b60208301905092915050565b5f602082019050919050565b5f614c1982614bb4565b614c238185614bbe565b9350614c2e83614bce565b805f5b83811015614c5e578151614c458882614bec565b9750614c5083614c03565b925050600181019050614c31565b5085935050505092915050565b5f6020820190508181035f830152614c838184614c0f565b905092915050565b5f8060408385031215614ca157614ca0614a06565b5b5f614cae85828601614ada565b9250506020614cbf85828601614ada565b9150509250929050565b5f805f805f60a08688031215614ce257614ce1614a06565b5b5f614cef88828901614ada565b9550506020614d0088828901614ada565b9450506040614d1188828901614ada565b9350506060614d2288828901614a54565b9250506080614d3388828901614a54565b9150509295509295909350565b5f606082019050614d535f830186614a9c565b614d606020830185614a9c565b614d6d6040830184614a9c565b949350505050565b5f80fd5b5f81905082602060030282011115614d9457614d93614d75565b5b92915050565b5f81905082602060020282011115614db557614db4614d75565b5b92915050565b5f81905082602060020282011115614dd657614dd5614d75565b5b92915050565b5f81905082602060020282011115614df757614df6614d75565b5b92915050565b5f805f805f6101408688031215614e1757614e16614a06565b5b5f614e2488828901614d79565b9550506060614e3588828901614d9a565b94505060a0614e4688828901614a54565b93505060c0614e5788828901614dbb565b925050610100614e6988828901614ddc565b9150509295509295909350565b5f8060408385031215614e8c57614e8b614a06565b5b5f614e9985828601614a54565b9250506020614eaa85828601614ada565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614efe82614eb8565b810181811067ffffffffffffffff82111715614f1d57614f1c614ec8565b5b80604052505050565b5f614f2f6149fd565b9050614f3b8282614ef5565b919050565b5f67ffffffffffffffff821115614f5a57614f59614ec8565b5b602082029050602081019050919050565b5f614f7d614f7884614f40565b614f26565b90508083825260208201905060208402830185811115614fa057614f9f614d75565b5b835b81811015614fc95780614fb58882614ada565b845260208401935050602081019050614fa2565b5050509392505050565b5f82601f830112614fe757614fe6614eb4565b5b8135614ff7848260208601614f6b565b91505092915050565b5f805f6060848603121561501757615016614a06565b5b5f61502486828701614a54565b935050602061503586828701614b62565b925050604084013567ffffffffffffffff81111561505657615055614a0a565b5b61506286828701614fd3565b9150509250925092565b5f67ffffffffffffffff82169050919050565b6150888161506c565b82525050565b5f6020820190506150a15f83018461507f565b92915050565b6150b081614a2d565b82525050565b5f60e0820190506150c95f83018a614a9c565b6150d660208301896150a7565b6150e36040830188614b24565b6150f0606083018761507f565b6150fd608083018661507f565b61510a60a083018561507f565b61511760c0830184614a9c565b98975050505050505050565b5f65ffffffffffff82169050919050565b61513d81615123565b82525050565b5f6080820190506151565f83018761507f565b6151636020830186615134565b6151706040830185615134565b61517d6060830184614b24565b95945050505050565b5f819050919050565b5f6151a96151a461519f84614a0e565b615186565b614a0e565b9050919050565b5f6151ba8261518f565b9050919050565b5f6151cb826151b0565b9050919050565b6151db816151c1565b82525050565b5f6020820190506151f45f8301846151d2565b92915050565b5f60a08201905061520d5f830188614b24565b61521a602083018761507f565b6152276040830186615134565b6152346060830185615134565b615241608083018461507f565b9695505050505050565b5f60408201905061525e5f830185614a9c565b61526b6020830184614b24565b9392505050565b5f60a0820190506152855f830188614a9c565b6152926020830187615134565b61529f6040830186615134565b6152ac6060830185615134565b6152b96080830184615134565b9695505050505050565b5f60ff82169050919050565b6152d8816152c3565b82525050565b5f60c0820190506152f15f830189615134565b6152fe6020830188615134565b61530b6040830187615134565b6153186060830186615134565b6153256080830185615134565b61533260a08301846152cf565b979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6153a18261506c565b91506153ac8361506c565b9250828203905067ffffffffffffffff8111156153cc576153cb61536a565b5b92915050565b5f6153dc82614a93565b91506153e783614a93565b92508282026153f581614a93565b9150828204841483151761540c5761540b61536a565b5b5092915050565b5f8160011c9050919050565b5f808291508390505b6001851115615468578086048111156154445761544361536a565b5b60018516156154535780820291505b808102905061546185615413565b9450615428565b94509492505050565b5f82615480576001905061553b565b8161548d575f905061553b565b81600181146154a357600281146154ad576154dc565b600191505061553b565b60ff8411156154bf576154be61536a565b5b8360020a9150848211156154d6576154d561536a565b5b5061553b565b5060208310610133831016604e8410600b84101617156155115782820a90508381111561550c5761550b61536a565b5b61553b565b61551e848484600161541f565b925090508184048111156155355761553461536a565b5b81810290505b9392505050565b5f61554c82614a93565b9150615557836152c3565b92506155847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615471565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6155c382614a93565b91506155ce83614a93565b9250826155de576155dd61558c565b5b828204905092915050565b5f6040820190506155fc5f8301856150a7565b6156096020830184614a9c565b9392505050565b5f8151905061561e81614b4c565b92915050565b5f6020828403121561563957615638614a06565b5b5f61564684828501615610565b91505092915050565b5f6020820190506156625f8301846150a7565b92915050565b5f60208201905061567b5f830184615134565b92915050565b5f6040820190506156945f830185614a9c565b6156a16020830184614a9c565b9392505050565b5f6156b282615123565b91506156bd83615123565b9250828201905065ffffffffffff8111156156db576156da61536a565b5b92915050565b5f6156fb6156f66156f18461506c565b615186565b614a93565b9050919050565b61570b816156e1565b82525050565b5f6040820190506157245f830185614a9c565b6157316020830184615702565b9392505050565b5f61574282614a93565b915061574d83614a93565b92508282039050818111156157655761576461536a565b5b92915050565b5f61577582614a93565b915061578083614a93565b92508282019050808211156157985761579761536a565b5b92915050565b5f6157a88261506c565b91506157b38361506c565b9250828201905067ffffffffffffffff8111156157d3576157d261536a565b5b92915050565b5f815190506157e781614a3e565b92915050565b5f6020828403121561580257615801614a06565b5b5f61580f848285016157d9565b91505092915050565b615821816152c3565b811461582b575f80fd5b50565b5f8151905061583c81615818565b92915050565b5f6020828403121561585757615856614a06565b5b5f6158648482850161582e565b91505092915050565b5f6020828403121561588257615881614a06565b5b5f61588f84828501614b62565b91505092915050565b5f6158a282614a93565b91506158ad83614a93565b92506158da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615471565b905092915050565b5f63ffffffff82169050919050565b6158fa816158e2565b8114615904575f80fd5b50565b5f81359050615915816158f1565b92915050565b5f602082840312156159305761592f614a06565b5b5f61593d84828501615907565b91505092915050565b5f6159508261506c565b915061595b8361506c565b92508282026159698161506c565b915080821461597b5761597a61536a565b5b5092915050565b5f8151905061599081614ac4565b92915050565b5f602082840312156159ab576159aa614a06565b5b5f6159b884828501615982565b91505092915050565b5f6159cb82615123565b91506159d683615123565b9250828203905065ffffffffffff8111156159f4576159f361536a565b5b92915050565b5f615a048261506c565b9150615a0f8361506c565b925082615a1f57615a1e61558c565b5b828204905092915050565b5f608082019050615a3d5f830187614a9c565b615a4a60208301866150a7565b615a576040830185614b24565b615a646060830184614b24565b95945050505050565b5f606082019050615a805f8301866150a7565b615a8d60208301856150a7565b615a9a6040830184614a9c565b949350505050565b5f604082019050615ab55f83018561507f565b615ac2602083018461507f565b9392505050565b5f81519050919050565b5f81905092915050565b5f5b83811015615afa578082015181840152602081019050615adf565b5f8484015250505050565b5f615b0f82615ac9565b615b198185615ad3565b9350615b29818560208601615add565b80840191505092915050565b5f615b408284615b05565b91508190509291505056fea264697066735822122088f3b90cff3003ab8be7fb6170a674ebfd836bab87d9717dd2b24d6fbc4a873f64736f6c63430008140033","sourceMap":"335:9738:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;281:42:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7496:188:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6217:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;220:24:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7690:156:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6407:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;599:160:117;;;:::i;:::-;;2465:170:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8440:668:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1235:165:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6626:240:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;650:181:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;893:1499:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;1406:120:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;906:285:119;;;:::i;:::-;;4290:1921:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2856:431:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1865:594;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7226:264:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;434:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;522:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;7087:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;224:32:118;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;577:52:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;463:19;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;4065:355:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;7852:582:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2641:209:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;329:43:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;310:39:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;3293:766;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;488:27:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;6872:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;250:24:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;281:42;;;;;;;;;;;;;;;;;:::o;7496:188:86:-;7570:7;7590:12;7610:17;7624:2;7610:13;:17::i;:::-;7589:38;;;;7672:5;7644;7650:2;7644:9;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;:33;;;;:::i;:::-;7637:40;;;;;7496:188;;;:::o;6217:184::-;557:13:118;:11;:13::i;:::-;6313:15:86::1;6283:5;6289:2;6283:9;;;;;;;;:::i;:::-;;;;;;;;;:20;;;:46;;;;;;;;;;;;;;;;;;6362:1;6339:7;6347:2;6339:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;:24;;;;6391:2;6378:16;;;;;;;;;;6217:184:::0;:::o;220:24:117:-;;;;:::o;7690:156:86:-;7748:4;7795:1;7772:7;7780:2;7772:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;:24;:66;;;;;7823:15;7800:5;7806:2;7800:9;;;;;;;;:::i;:::-;;;;;;;;;:20;;;;;;;;;;;;:38;;;7772:66;7764:75;;7690:156;;;:::o;6407:213::-;6470:7;6489:17;6538:13;6548:2;6538:9;:13::i;:::-;6509:26;6532:2;6509:22;:26::i;:::-;:42;;;;:::i;:::-;6489:62;;6585:9;6595:2;6585:13;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;;;;;;;;6581:2;:31;;;;:::i;:::-;6568:9;:45;;;;:::i;:::-;6561:52;;;6407:213;;;:::o;599:160:117:-;639:14;656:7;:19;664:10;656:19;;;;;;;;;;;;;;;;639:36;;707:1;685:7;:19;693:10;685:19;;;;;;;;;;;;;;;:23;;;;718:5;:14;;;733:10;745:6;718:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;629:130;599:160::o;2465:170:119:-;2562:7;2588:40;2595:4;2601:8;2611:16;2622:4;2611:10;:16::i;:::-;2588:6;:40::i;:::-;2581:47;;2465:170;;;;:::o;8440:668:86:-;8511:16;8539:21;8563:15;:22;8579:5;8563:22;;;;;;;;;;;;;;;8539:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8595:14;8619:9;8638;8658:157;8669:4;:11;8665:1;:15;8658:157;;;8702:15;8709:4;8714:1;8709:7;;;;;;;;:::i;:::-;;;;;;;;8702:6;:15::i;:::-;8698:76;;;8749:8;;;;;8698:76;8799:3;;;;;8658:157;;;8825:20;8862:6;8848:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8825:44;;8883:1;8879:5;;8895:186;8906:4;:11;8902:1;:15;8895:186;;;8939:15;8946:4;8951:1;8946:7;;;;;;;;:::i;:::-;;;;;;;;8939:6;:15::i;:::-;8935:105;;;8983:4;8988:1;8983:7;;;;;;;;:::i;:::-;;;;;;;;8974:3;8978:1;8974:6;;;;;;;;:::i;:::-;;;;;;;:16;;;;;9020:3;;;;;8935:105;9065:3;;;;;8895:186;;;9098:3;9091:10;;;;;;;8440:668;;;:::o;1235:165:117:-;429:15:118;:13;:15::i;:::-;1356:10:117::1;1344:9;:22;;;;1388:5;1376:9;:17;;;;1235:165:::0;;:::o;6626:240:86:-;6727:7;6746:17;6784:15;6796:2;6784:11;:15::i;:::-;6776:4;6767:6;:13;;;;:::i;:::-;6766:33;;;;:::i;:::-;6746:53;;6832:9;6842:2;6832:13;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;;;;;;;;6828:2;:31;;;;:::i;:::-;6816:9;:43;;;;:::i;:::-;6809:50;;;6626:240;;;;:::o;650:181:118:-;713:15;:13;:15::i;:::-;766:12;738:9;;:41;;;;;;;;;;;;;;;;;;794:30;811:12;794:30;;;;;;:::i;:::-;;;;;;;;650:181;:::o;893:1499:86:-;1098:14;1126;1154:13;1192:21;1216:7;1224:2;1216:11;;;;;;;;:::i;:::-;;;;;;;;;;;;1192:35;;1237:16;1256:5;1262:2;1256:9;;;;;;;;:::i;:::-;;;;;;;;;1237:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:18;1303:15;1275:44;;1349:4;:15;;;1334:30;;:11;:30;;;1330:79;;1393:4;:15;;;1373:36;;;;;;;;;;;:::i;:::-;;;;;;;;1330:79;1419:23;1426:2;1430:11;1419:6;:23::i;:::-;1453:13;1469:16;1482:2;1469:12;:16::i;:::-;1453:32;;1507:8;1499:5;:16;1495:64;;;1543:5;1550:8;1524:35;;;;;;;;;;;;:::i;:::-;;;;;;;;1495:64;1579:4;:14;;;:58;;1625:4;:12;;;1579:58;;;1611:11;1596:4;:12;;;:26;;;;:::i;:::-;1579:58;1570:67;;;;1689:9;1699:2;1689:13;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;;;;;;;;1685:2;:31;;;;:::i;:::-;1675:5;1667:4;1658:6;:13;;;;:::i;:::-;1657:23;;;;:::i;:::-;1656:61;;;;:::i;:::-;1647:70;;1740:6;:16;;;;;;;;;;;;1731:25;;:6;:25;1727:81;;;1783:6;1791;:16;;;;;;;;;;;;1765:43;;;;;;;;;;;;:::i;:::-;;;;;;;;1727:81;1838:6;:22;;;;;;;;;;;;:40;;1872:6;1838:40;;;1863:6;1838:40;1819:6;:15;;;:59;;;;;;;:::i;:::-;;;;;;;;1908:6;1888;:16;;;:26;;;;;;;:::i;:::-;;;;;;;;1946:6;1924;:11;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1990:6;1963;:16;;;:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2018:2;2013:23;2022:6;2030:5;2013:23;;;;;;;:::i;:::-;;;;;;;;2055:59;2063:4;2069:6;2084;2100:2;2105:8;2055:7;:59::i;:::-;2047:67;;2124:82;2167:10;2187:9;;;;;;;;;;;2199:6;2131;:17;;;;;;;;;;;;2124:42;;;;:82;;;;;;:::i;:::-;2236:6;:16;;;;;;;;;;;;2221:31;;:4;:12;;;:31;;;2217:169;;;2286:1;2268:6;:15;;:19;;;;2319:2;2306:16;;;;;;;;;;2217:169;;;2353:22;2359:2;2363:11;2353:5;:22::i;:::-;2217:169;1182:1210;;;;893:1499;;;;;;;;;:::o;1406:120:117:-;557:13:118;:11;:13::i;:::-;1498:11:117::1;:21;1510:8;1498:21;;;;;;;;;;;;;;;;;;;;;;;;;1497:22;1473:11;:21;1485:8;1473:21;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;1406:120:::0;:::o;906:285:119:-;982:9;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;968:34;;:10;:34;;;;:84;;;;;1032:9;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1018:34;;:10;:34;;;;968:84;:132;;;;;1082:9;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1068:32;;:10;:32;;;;968:132;951:183;;;1118:16;;;;;;;;;;;;;;951:183;1166:9;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1144:9;;:40;;;;;;;;;;;;;;;;;;906:285::o;4290:1921:86:-;4527:10;557:13:118;:11;:13::i;:::-;4549:27:86::1;4591:15;4579:6;4586:1;4579:9;;;;;;;:::i;:::-;;;;;;:27;;;;:::i;:::-;4549:57;;4616:16;4650:11;4635:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4616:57;;;;4683:17;4710:9;4720:1;4710:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:101;;4801:7;4809:1;4801:10;;;;;;;:::i;:::-;;;;;;4710:101;;;4778:8;4774:2;:12;;;;:::i;:::-;4760:7;4768:1;4760:10;;;;;;;:::i;:::-;;;;;;4752:4;4739:7;4747:1;4739:10;;;;;;;:::i;:::-;;;;;;:17;;;;:::i;:::-;4738:32;;;;:::i;:::-;4737:49;;;;:::i;:::-;4710:101;4683:129;;4822:16;4879:19;4862:10;4873:1;4862:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;4849:26;;:10;:26;;;;:::i;:::-;4848:50;;;;;;:::i;:::-;4822:77;;4909:15;4969:3;4955:7;4963:1;4955:10;;;;;;;:::i;:::-;;;;;;4942;:23;;;;;;:::i;:::-;4941:31;;;;:::i;:::-;4927:10;:46;;;;;;:::i;:::-;4909:64;;4983:23;5049:10;5009:50;;5023:9;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5010:7;5018:1;5010:10;;;;;;;:::i;:::-;;;;;;:35;;;;:::i;:::-;5009:50;;;;:::i;:::-;4983:76;;5075:7;:14;;;;5070:19;;5100:7;5126:280;;;;;;;;5249:7;5257:1;5249:10;;;;;;;:::i;:::-;;;;;;5126:280;;;;5163:11;5126:280;;;;;;5209:9;5219:1;5209:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;5126:280;;;;;;5288:10;5126:280;;;;;;5327:9;5126:280;;;;;;5390:1;5126:280;;;;;;5365:1;5126:280;;::::0;5100:316:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5427:5;5451:252;;;;;;;;5485:9;5495:1;5485:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;5451:252;;;;;;5539:15;5451:252;;;;;;5589:6;5596:1;5589:9;;;;;;;:::i;:::-;;;;;;5451:252;;;;;;5636:6;5643:1;5636:9;;;;;;;:::i;:::-;;;;;;5451:252;;;;;;5680:7;5451:252;;;;::::0;5427:286:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5724:9;5752:321;;;;;;;;5796:15;5752:321;;;;;;5848:15;5752:321;;;;;;5897:19;5752:321;;;;;;5952:10;5963:1;5952:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;5752:321;;;;;;;;5997:10;6008:1;5997:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;5752:321;;;;;;;;6049:8;5752:321;;;;::::0;5724:359:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6094:15;:28;6110:11;6094:28;;;;;;;;;;;;;;;6128:2;6094:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6180:11;6146:58;;6172:5;6146:58;;6160:2;6146:58;6193:7;6201:1;6193:10;;;;;;;:::i;:::-;;;;;;6146:58;;;;;;:::i;:::-;;;;;;;;4539:1672;;;;;;4290:1921:::0;;;;;;;:::o;2856:431:119:-;2952:16;3015:10;2984:41;;:14;:20;2999:4;2984:20;;;;;;;;;;;;;;;:27;3005:5;2984:27;;;;;;;;;;;;;;;;;;;;;:41;;;2980:83;;3051:4;3057:5;3034:29;;;;;;;;;;;;:::i;:::-;;;;;;;;2980:83;3108:1;3077:5;:11;3083:4;3077:11;;;;;;;;;;;;;;;3089:5;3077:18;;;;;;;;:::i;:::-;;;;;;;;;;;;:27;;;;;;;;;;;;:32;;;3073:73;;3134:4;3140:5;3118:28;;;;;;;;;;;;:::i;:::-;;;;;;;;3073:73;3168:5;:17;3174:10;3168:17;;;;;;;;;;;;;;;:24;;;;3157:35;;3202:5;:17;3208:10;3202:17;;;;;;;;;;;;;;;3225:5;:11;3231:4;3225:11;;;;;;;;;;;;;;;3237:5;3225:18;;;;;;;;:::i;:::-;;;;;;;;;;;;3202:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3262:5;:11;3268:4;3262:11;;;;;;;;;;;;;;;3274:5;3262:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;3255:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2856:431;;;;:::o;1865:594::-;1991:14;2017:11;2038:15;2017:37;;2064:9;2084:272;2095:7;:14;2091:1;:18;2084:272;;;2128:11;2141:12;2157:28;2168:4;2174:7;2182:1;2174:10;;;;;;;;:::i;:::-;;;;;;;;2157;:28::i;:::-;2127:58;;;;2203:7;2199:116;;;2265:4;2230:5;:11;2236:4;2230:11;;;;;;;;;;;;;;;2242:7;2250:1;2242:10;;;;;;;;:::i;:::-;;;;;;;;2230:23;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;;:39;;;;;;;;;;;;;;;;;;2297:3;2287:13;;;;;:::i;:::-;;;2199:116;2340:3;;;;;2113:243;;2084:272;;;2370:8;2366:86;;;2380:5;:14;;;2395:4;2401:6;2380:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2366:86;;;2423:8;:15;;;2439:4;2445:6;2423:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2366:86;2007:452;;1865:594;;;;;:::o;7226:264:86:-;7287:6;7305:20;7328:9;7338:2;7328:13;;;;;;;;:::i;:::-;;;;;;;;;7305:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7351:20;7392:4;:14;;;7374:32;;:15;:32;;;;:::i;:::-;7351:55;;7471:4;:11;;;7430:52;;7455:12;7431:7;7439:2;7431:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;;;;;;;;;;:36;;;;;;:::i;:::-;7430:52;;;;:::i;:::-;7416:67;;;;7226:264;;;:::o;434:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;522:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7087:133::-;7150:7;7200:13;7210:2;7200:9;:13::i;:::-;7176:7;7184:2;7176:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;;;;;;;;;;:37;;;;:::i;:::-;7169:44;;;;7087:133;;;:::o;224:32:118:-;;;;;;;;;;;;:::o;577:52:86:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;463:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4065:355:119:-;4189:14;4217:12;4254:16;4273:5;:11;4279:4;4273:11;;;;;;;;;;;;;;;4285:5;4273:18;;;;;;;;:::i;:::-;;;;;;;;;;;;4254:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4310:4;:11;;;4301:20;;4358:1;4341:4;:13;;;:18;;;:53;;;;;4379:15;4363:4;:12;;;:31;;;;4341:53;:72;;;;;4412:1;4398:4;:11;;;:15;4341:72;4331:82;;4244:176;4065:355;;;;;:::o;7852:582:86:-;7907:16;7935:14;7959:9;7978;7997:154;8008:7;:14;;;;8004:1;:18;7997:154;;;8044:9;8051:1;8044:6;:9::i;:::-;8040:70;;;8085:8;;;;;8040:70;8135:3;;;;;7997:154;;;8161:20;8198:6;8184:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8161:44;;8219:1;8215:5;;8231:177;8242:7;:14;;;;8238:1;:18;8231:177;;;8278:9;8285:1;8278:6;:9::i;:::-;8274:93;;;8316:1;8307:3;8311:1;8307:6;;;;;;;;:::i;:::-;;;;;;;:10;;;;;8347:3;;;;;8274:93;8392:3;;;;;8231:177;;;8424:3;8417:10;;;;;;7852:582;:::o;2641:209:119:-;2754:1;2718:5;:17;2724:10;2718:17;;;;;;;;;;;;;;;2736:5;2718:24;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;;;;;;;;;;;:37;;;2714:81;;2777:10;2789:5;2764:31;;;;;;;;;;;;:::i;:::-;;;;;;;;2714:81;2841:2;2805:14;:26;2820:10;2805:26;;;;;;;;;;;;;;;:33;2832:5;2805:33;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2641:209;;:::o;329:43:117:-;;;;;;;;;;;;;;;;;;;;;;:::o;310:39:119:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3293:766::-;3389:16;3421:18;3442:5;:11;3448:4;3442:11;;;;;;;;;;;;;;;3421:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3464:14;3488:9;3507:185;3518:4;:11;3514:1;:15;3507:185;;;3571:1;3551:4;3556:1;3551:7;;;;;;;;:::i;:::-;;;;;;;;:16;;;:21;;;:43;;;;;3593:1;3576:4;3581:1;3576:7;;;;;;;;:::i;:::-;;;;;;;;:14;;;:18;3551:43;3547:104;;;3626:8;;;;;3547:104;3676:3;;;;;3507:185;;;3702:24;3743:6;3729:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3702:48;;3760:16;3790:1;3786:5;;3802:226;3813:4;:11;3809:1;:15;3802:226;;;3866:1;3846:4;3851:1;3846:7;;;;;;;;:::i;:::-;;;;;;;;:16;;;:21;;;:43;;;;;3888:1;3871:4;3876:1;3871:7;;;;;;;;:::i;:::-;;;;;;;;:14;;;:18;3846:43;3842:145;;;3929:1;3909:7;3917:8;3909:17;;;;;;;;:::i;:::-;;;;;;;:21;;;;;3960:10;;;;;3842:145;4012:3;;;;;3802:226;;;4045:7;4038:14;;;;;;;3293:766;;;:::o;488:27:86:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6872:209::-;6933:7;6952:17;6995:9;7005:2;6995:13;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;;;;;;;;6991:2;:31;;;;:::i;:::-;6972:15;6984:2;6972:11;:15::i;:::-;:51;;;;:::i;:::-;6952:71;;7052:9;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7040:9;:34;;;;:::i;:::-;7033:41;;;6872:209;;;:::o;250:24:117:-;;;;:::o;9546:525:86:-;9641:12;9667:19;9700:11;9736:22;9761:11;:15;9773:2;9761:15;;;;;;;;;;;9736:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9791:4;:11;;;9786:38;;9812:1;9815;9818:5;9804:20;;;;;;;;;9786:38;9876:4;:19;;;9857:15;9850:45;;;;:::i;:::-;9835:60;;9930:4;:19;;;9915:34;;:12;:34;;;9906:43;;9967:6;:97;;10053:4;:11;;;9967:97;;;10019:4;:19;;;9988:50;;10003:12;9989:26;;:4;:11;;;:26;;;;:::i;:::-;9988:50;;;;:::i;:::-;9967:97;9959:105;;9726:345;9546:525;;;;;;:::o;1083:113:118:-;1148:9;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1134:32;;:10;:32;;;1130:59;;1175:14;;;;;;;;;;;;;;1130:59;1083:113::o;837:117::-;904:9;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;890:34;;:10;:34;;;886:61;;933:14;;;;;;;;;;;;;;886:61;837:117::o;2398:663:86:-;2483:13;2493:2;2483:9;:13::i;:::-;2458:7;2466:2;2458:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2532:4;2506:9;2516:2;2506:13;;;;;;;;:::i;:::-;;;;;;;;;:23;;;:30;;;;;;;;;;;;;;;;;;2551:11;:15;2563:2;2551:15;;;;;;;;;;;:22;;;;;;;;;;;;2547:508;;;2589:29;2621:11;:15;2633:2;2621:15;;;;;;;;;;;2589:47;;2652:15;2669:19;2690:16;2710:17;2724:2;2710:13;:17::i;:::-;2651:76;;;;;;2770:8;2741:5;2747:2;2741:9;;;;;;;;:::i;:::-;;;;;;;;;:25;;;:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2797:11;2793:252;;;2849:8;2828:10;:17;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2904:12;2875:10;:25;;;:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2962:4;2934:10;:25;;;:32;;;;;;;;;;;;;;;;;;2793:252;;;3025:5;3005:10;:17;;;:25;;;;;;;;;;;;;;;;;;2793:252;2575:480;;;;2547:508;2398:663;;:::o;9114:211::-;9172:7;9191:17;9240:15;9251:3;9240:10;:15::i;:::-;9211:5;9217:3;9211:10;;;;;;;;:::i;:::-;;;;;;;;;:26;;;;;;;;;;;;:44;;;;;;:::i;:::-;9191:64;;9289:9;9299:3;9289:14;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;;;;;;;;;9285:2;:32;;;;:::i;:::-;9272:9;:46;;;;:::i;:::-;9265:53;;;9114:211;;;:::o;1197:662:119:-;1358:13;1391:5;:11;1397:4;1391:11;;;;;;;;;;;;;;;:18;;;;1383:26;;1419:5;:11;1425:4;1419:11;;;;;;;;;;;;;;;1449:217;;;;;;;;1480:5;:15;;;1496:6;1480:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1449:217;;;;1537:15;1449:217;;;;;;1580:6;1449:217;;;;;;1614:1;1449:217;;;;;;1643:8;1449:217;;;;;1419:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1687:15;1705:30;1718:6;1726:8;1705:12;:30::i;:::-;1687:48;;1745:9;;;;;;;;;;;:14;;;1768:4;1784:7;1775:6;:16;;;;:::i;:::-;1745:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1802:8;:14;;;1817:6;1833:4;1840:5;1847:4;1802:50;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1373:486;1197:662;;;;;;;:::o;1702:188:27:-;1802:81;1822:5;1844;:18;;;1865:4;1871:2;1875:5;1829:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1802:19;:81::i;:::-;1702:188;;;;:::o;3067:1217:86:-;3126:20;3149:9;3159:2;3149:13;;;;;;;;:::i;:::-;;;;;;;;;3126:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3201:4;:17;;;3185:4;:13;;;:33;;;;:::i;:::-;3177:41;;:4;:41;;;3173:1105;;3234:20;3257:7;3265:2;3257:11;;;;;;;;:::i;:::-;;;;;;;;;;;;3234:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:21;3330:4;3307:5;3313:2;3307:9;;;;;;;;:::i;:::-;;;;;;;;;:20;;;;;;;;;;;;:27;;;;:::i;:::-;3283:51;;;;3348:13;3364:16;3377:2;3364:12;:16::i;:::-;3348:32;;3395:16;3414:6;:22;;;:136;;3535:6;:15;;;3414:136;;;3497:4;:18;;;3493:2;:22;;;;:::i;:::-;3483:5;3475:4;3457:6;:15;;;:22;;;;:::i;:::-;3456:32;;;;:::i;:::-;3455:61;;;;:::i;:::-;3414:136;3395:155;;3632:13;3608:4;:20;;;3597:31;;:8;:31;;;;:::i;:::-;3596:49;;;;:::i;:::-;3565:7;3573:2;3565:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:81;;;;;;;;;;;;;;;;;;3660:18;3708:13;3693:4;:11;;;3682:22;;:8;:22;;;;:::i;:::-;3681:40;;;;:::i;:::-;3660:61;;3735:25;3805:10;3779:9;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3771:5;:30;3770:45;;;;:::i;:::-;3735:81;;3842:2;3836:56;3846:5;3852:2;3846:9;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;3873:18;3836:56;;;;;;;:::i;:::-;;;;;;;;3933:5;3939:2;3933:9;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;3911:47;;:18;:47;;;3907:318;;4006:18;3978:5;3984:2;3978:9;;;;;;;;:::i;:::-;;;;;;;;;:25;;;:46;;;;;;;;;;;;;;;;;;3907:318;;;4063:13;4107:18;4079:5;4085:2;4079:9;;;;;;;;:::i;:::-;;;;;;;;;:25;;;;;;;;;;;;:46;;;;:::i;:::-;4063:62;;4161:49;;;;;;;;4172:6;4161:49;;;;;;4180:4;4161:49;;;;;;4186:4;:17;;;4161:49;;;;;;4205:4;4161:49;;;;;4143:11;:15;4155:2;4143:15;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4045:180;3907:318;4263:4;4238:9;4248:2;4238:13;;;;;;;;:::i;:::-;;;;;;;;;:22;;;:29;;;;;;;;;;;;;;;;;;3220:1058;;;;;;3173:1105;3116:1168;3067:1217;;:::o;9331:209::-;9386:7;9405:17;9454:9;9464:2;9454:13;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;;;;;;;;9450:2;:31;;;;:::i;:::-;9425:7;9433:2;9425:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;;;;;;;;;;:57;;;;;;:::i;:::-;9405:77;;9511:9;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9499:9;:34;;;;:::i;:::-;9492:41;;;9331:209;;;:::o;765:464:117:-;861:7;880:13;919:3;906:9;;897:6;:18;;;;:::i;:::-;896:26;;;;:::i;:::-;880:42;;932:13;971:3;958:9;;949:6;:18;;;;:::i;:::-;948:26;;;;:::i;:::-;932:42;;989:11;:21;1001:8;989:21;;;;;;;;;;;;;;;;;;;;;;;;;985:207;;;1047:5;1026:7;:17;1034:8;1026:17;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;1099:5;1066:7;:29;1074:9;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1066:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;985:207;;;1176:5;1168;:13;;;;:::i;:::-;1135:7;:29;1143:9;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1135:29;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;985:207;1217:5;1209;:13;;;;:::i;:::-;1202:20;;;;765:464;;;;:::o;4059:629:27:-;4478:23;4504:33;4532:4;4512:5;4504:27;;;;:33;;;;:::i;:::-;4478:59;;4572:1;4551:10;:17;:22;;:57;;;;;4589:10;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;4547:135;;;4664:5;4631:40;;;;;;;;;;;:::i;:::-;;;;;;;;4547:135;4129:559;4059:629;;:::o;2705:151:30:-;2780:12;2811:38;2833:6;2841:4;2847:1;2811:21;:38::i;:::-;2804:45;;2705:151;;;;:::o;3180:392::-;3279:12;3331:5;3307:21;:29;3303:108;;;3394:4;3359:41;;;;;;;;;;;:::i;:::-;;;;;;;;3303:108;3421:12;3435:23;3462:6;:11;;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;;;;3180:392;;;;;:::o;4625:582::-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5066:1;5045:10;:17;:22;:49;;;;;5093:1;5071:6;:18;;;:23;5045:49;5041:119;;;5138:6;5121:24;;;;;;;;;;;:::i;:::-;;;;;;;;5041:119;5180:10;5173:17;;;;4793:408;4625:582;;;;;;:::o;5743:516::-;5894:1;5874:10;:17;:21;5870:383;;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;7:75:133;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:90::-;2253:7;2296:5;2289:13;2282:21;2271:32;;2219:90;;;:::o;2315:109::-;2396:21;2411:5;2396:21;:::i;:::-;2391:3;2384:34;2315:109;;:::o;2430:210::-;2517:4;2555:2;2544:9;2540:18;2532:26;;2568:65;2630:1;2619:9;2615:17;2606:6;2568:65;:::i;:::-;2430:210;;;;:::o;2646:116::-;2716:21;2731:5;2716:21;:::i;:::-;2709:5;2706:32;2696:60;;2752:1;2749;2742:12;2696:60;2646:116;:::o;2768:133::-;2811:5;2849:6;2836:20;2827:29;;2865:30;2889:5;2865:30;:::i;:::-;2768:133;;;;:::o;2907:468::-;2972:6;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:50;3350:7;3341:6;3330:9;3326:22;3308:50;:::i;:::-;3298:60;;3253:115;2907:468;;;;;:::o;3381:114::-;3448:6;3482:5;3476:12;3466:22;;3381:114;;;:::o;3501:184::-;3600:11;3634:6;3629:3;3622:19;3674:4;3669:3;3665:14;3650:29;;3501:184;;;;:::o;3691:132::-;3758:4;3781:3;3773:11;;3811:4;3806:3;3802:14;3794:22;;3691:132;;;:::o;3829:108::-;3906:24;3924:5;3906:24;:::i;:::-;3901:3;3894:37;3829:108;;:::o;3943:179::-;4012:10;4033:46;4075:3;4067:6;4033:46;:::i;:::-;4111:4;4106:3;4102:14;4088:28;;3943:179;;;;:::o;4128:113::-;4198:4;4230;4225:3;4221:14;4213:22;;4128:113;;;:::o;4277:732::-;4396:3;4425:54;4473:5;4425:54;:::i;:::-;4495:86;4574:6;4569:3;4495:86;:::i;:::-;4488:93;;4605:56;4655:5;4605:56;:::i;:::-;4684:7;4715:1;4700:284;4725:6;4722:1;4719:13;4700:284;;;4801:6;4795:13;4828:63;4887:3;4872:13;4828:63;:::i;:::-;4821:70;;4914:60;4967:6;4914:60;:::i;:::-;4904:70;;4760:224;4747:1;4744;4740:9;4735:14;;4700:284;;;4704:14;5000:3;4993:10;;4401:608;;;4277:732;;;;:::o;5015:373::-;5158:4;5196:2;5185:9;5181:18;5173:26;;5245:9;5239:4;5235:20;5231:1;5220:9;5216:17;5209:47;5273:108;5376:4;5367:6;5273:108;:::i;:::-;5265:116;;5015:373;;;;:::o;5394:474::-;5462:6;5470;5519:2;5507:9;5498:7;5494:23;5490:32;5487:119;;;5525:79;;:::i;:::-;5487:119;5645:1;5670:53;5715:7;5706:6;5695:9;5691:22;5670:53;:::i;:::-;5660:63;;5616:117;5772:2;5798:53;5843:7;5834:6;5823:9;5819:22;5798:53;:::i;:::-;5788:63;;5743:118;5394:474;;;;;:::o;5874:911::-;5969:6;5977;5985;5993;6001;6050:3;6038:9;6029:7;6025:23;6021:33;6018:120;;;6057:79;;:::i;:::-;6018:120;6177:1;6202:53;6247:7;6238:6;6227:9;6223:22;6202:53;:::i;:::-;6192:63;;6148:117;6304:2;6330:53;6375:7;6366:6;6355:9;6351:22;6330:53;:::i;:::-;6320:63;;6275:118;6432:2;6458:53;6503:7;6494:6;6483:9;6479:22;6458:53;:::i;:::-;6448:63;;6403:118;6560:2;6586:53;6631:7;6622:6;6611:9;6607:22;6586:53;:::i;:::-;6576:63;;6531:118;6688:3;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6659:119;5874:911;;;;;;;;:::o;6791:442::-;6940:4;6978:2;6967:9;6963:18;6955:26;;6991:71;7059:1;7048:9;7044:17;7035:6;6991:71;:::i;:::-;7072:72;7140:2;7129:9;7125:18;7116:6;7072:72;:::i;:::-;7154;7222:2;7211:9;7207:18;7198:6;7154:72;:::i;:::-;6791:442;;;;;;:::o;7239:117::-;7348:1;7345;7338:12;7380:249;7451:8;7482:6;7470:18;;7535:3;7527:4;7521;7517:15;7507:8;7503:30;7500:39;7497:126;;;7542:79;;:::i;:::-;7497:126;7380:249;;;;:::o;7653:::-;7724:8;7755:6;7743:18;;7808:3;7800:4;7794;7790:15;7780:8;7776:30;7773:39;7770:126;;;7815:79;;:::i;:::-;7770:126;7653:249;;;;:::o;7925:248::-;7995:8;8026:6;8014:18;;8079:3;8071:4;8065;8061:15;8051:8;8047:30;8044:39;8041:126;;;8086:79;;:::i;:::-;8041:126;7925:248;;;;:::o;8194:246::-;8262:8;8293:6;8281:18;;8346:3;8338:4;8332;8328:15;8318:8;8314:30;8311:39;8308:126;;;8353:79;;:::i;:::-;8308:126;8194:246;;;;:::o;8446:1105::-;8637:6;8645;8653;8661;8669;8718:3;8706:9;8697:7;8693:23;8689:33;8686:120;;;8725:79;;:::i;:::-;8686:120;8845:1;8870:78;8940:7;8931:6;8920:9;8916:22;8870:78;:::i;:::-;8860:88;;8816:142;8997:2;9023:78;9093:7;9084:6;9073:9;9069:22;9023:78;:::i;:::-;9013:88;;8968:143;9150:3;9177:53;9222:7;9213:6;9202:9;9198:22;9177:53;:::i;:::-;9167:63;;9121:119;9279:3;9306:77;9375:7;9366:6;9355:9;9351:22;9306:77;:::i;:::-;9296:87;;9250:143;9432:3;9459:75;9526:7;9517:6;9506:9;9502:22;9459:75;:::i;:::-;9449:85;;9403:141;8446:1105;;;;;;;;:::o;9557:474::-;9625:6;9633;9682:2;9670:9;9661:7;9657:23;9653:32;9650:119;;;9688:79;;:::i;:::-;9650:119;9808:1;9833:53;9878:7;9869:6;9858:9;9854:22;9833:53;:::i;:::-;9823:63;;9779:117;9935:2;9961:53;10006:7;9997:6;9986:9;9982:22;9961:53;:::i;:::-;9951:63;;9906:118;9557:474;;;;;:::o;10037:117::-;10146:1;10143;10136:12;10160:102;10201:6;10252:2;10248:7;10243:2;10236:5;10232:14;10228:28;10218:38;;10160:102;;;:::o;10268:180::-;10316:77;10313:1;10306:88;10413:4;10410:1;10403:15;10437:4;10434:1;10427:15;10454:281;10537:27;10559:4;10537:27;:::i;:::-;10529:6;10525:40;10667:6;10655:10;10652:22;10631:18;10619:10;10616:34;10613:62;10610:88;;;10678:18;;:::i;:::-;10610:88;10718:10;10714:2;10707:22;10497:238;10454:281;;:::o;10741:129::-;10775:6;10802:20;;:::i;:::-;10792:30;;10831:33;10859:4;10851:6;10831:33;:::i;:::-;10741:129;;;:::o;10876:311::-;10953:4;11043:18;11035:6;11032:30;11029:56;;;11065:18;;:::i;:::-;11029:56;11115:4;11107:6;11103:17;11095:25;;11175:4;11169;11165:15;11157:23;;10876:311;;;:::o;11210:710::-;11306:5;11331:81;11347:64;11404:6;11347:64;:::i;:::-;11331:81;:::i;:::-;11322:90;;11432:5;11461:6;11454:5;11447:21;11495:4;11488:5;11484:16;11477:23;;11548:4;11540:6;11536:17;11528:6;11524:30;11577:3;11569:6;11566:15;11563:122;;;11596:79;;:::i;:::-;11563:122;11711:6;11694:220;11728:6;11723:3;11720:15;11694:220;;;11803:3;11832:37;11865:3;11853:10;11832:37;:::i;:::-;11827:3;11820:50;11899:4;11894:3;11890:14;11883:21;;11770:144;11754:4;11749:3;11745:14;11738:21;;11694:220;;;11698:21;11312:608;;11210:710;;;;;:::o;11943:370::-;12014:5;12063:3;12056:4;12048:6;12044:17;12040:27;12030:122;;12071:79;;:::i;:::-;12030:122;12188:6;12175:20;12213:94;12303:3;12295:6;12288:4;12280:6;12276:17;12213:94;:::i;:::-;12204:103;;12020:293;11943:370;;;;:::o;12319:823::-;12418:6;12426;12434;12483:2;12471:9;12462:7;12458:23;12454:32;12451:119;;;12489:79;;:::i;:::-;12451:119;12609:1;12634:53;12679:7;12670:6;12659:9;12655:22;12634:53;:::i;:::-;12624:63;;12580:117;12736:2;12762:50;12804:7;12795:6;12784:9;12780:22;12762:50;:::i;:::-;12752:60;;12707:115;12889:2;12878:9;12874:18;12861:32;12920:18;12912:6;12909:30;12906:117;;;12942:79;;:::i;:::-;12906:117;13047:78;13117:7;13108:6;13097:9;13093:22;13047:78;:::i;:::-;13037:88;;12832:303;12319:823;;;;;:::o;13148:101::-;13184:7;13224:18;13217:5;13213:30;13202:41;;13148:101;;;:::o;13255:115::-;13340:23;13357:5;13340:23;:::i;:::-;13335:3;13328:36;13255:115;;:::o;13376:218::-;13467:4;13505:2;13494:9;13490:18;13482:26;;13518:69;13584:1;13573:9;13569:17;13560:6;13518:69;:::i;:::-;13376:218;;;;:::o;13600:118::-;13687:24;13705:5;13687:24;:::i;:::-;13682:3;13675:37;13600:118;;:::o;13724:862::-;13973:4;14011:3;14000:9;13996:19;13988:27;;14025:71;14093:1;14082:9;14078:17;14069:6;14025:71;:::i;:::-;14106:72;14174:2;14163:9;14159:18;14150:6;14106:72;:::i;:::-;14188:66;14250:2;14239:9;14235:18;14226:6;14188:66;:::i;:::-;14264:70;14330:2;14319:9;14315:18;14306:6;14264:70;:::i;:::-;14344:71;14410:3;14399:9;14395:19;14386:6;14344:71;:::i;:::-;14425;14491:3;14480:9;14476:19;14467:6;14425:71;:::i;:::-;14506:73;14574:3;14563:9;14559:19;14550:6;14506:73;:::i;:::-;13724:862;;;;;;;;;;:::o;14592:97::-;14628:7;14668:14;14661:5;14657:26;14646:37;;14592:97;;;:::o;14695:115::-;14780:23;14797:5;14780:23;:::i;:::-;14775:3;14768:36;14695:115;;:::o;14816:529::-;14981:4;15019:3;15008:9;15004:19;14996:27;;15033:69;15099:1;15088:9;15084:17;15075:6;15033:69;:::i;:::-;15112:70;15178:2;15167:9;15163:18;15154:6;15112:70;:::i;:::-;15192;15258:2;15247:9;15243:18;15234:6;15192:70;:::i;:::-;15272:66;15334:2;15323:9;15319:18;15310:6;15272:66;:::i;:::-;14816:529;;;;;;;:::o;15351:60::-;15379:3;15400:5;15393:12;;15351:60;;;:::o;15417:142::-;15467:9;15500:53;15518:34;15527:24;15545:5;15527:24;:::i;:::-;15518:34;:::i;:::-;15500:53;:::i;:::-;15487:66;;15417:142;;;:::o;15565:126::-;15615:9;15648:37;15679:5;15648:37;:::i;:::-;15635:50;;15565:126;;;:::o;15697:151::-;15772:9;15805:37;15836:5;15805:37;:::i;:::-;15792:50;;15697:151;;;:::o;15854:181::-;15966:62;16022:5;15966:62;:::i;:::-;15961:3;15954:75;15854:181;;:::o;16041:272::-;16159:4;16197:2;16186:9;16182:18;16174:26;;16210:96;16303:1;16292:9;16288:17;16279:6;16210:96;:::i;:::-;16041:272;;;;:::o;16319:636::-;16510:4;16548:3;16537:9;16533:19;16525:27;;16562:65;16624:1;16613:9;16609:17;16600:6;16562:65;:::i;:::-;16637:70;16703:2;16692:9;16688:18;16679:6;16637:70;:::i;:::-;16717;16783:2;16772:9;16768:18;16759:6;16717:70;:::i;:::-;16797;16863:2;16852:9;16848:18;16839:6;16797:70;:::i;:::-;16877:71;16943:3;16932:9;16928:19;16919:6;16877:71;:::i;:::-;16319:636;;;;;;;;:::o;16961:320::-;17076:4;17114:2;17103:9;17099:18;17091:26;;17127:71;17195:1;17184:9;17180:17;17171:6;17127:71;:::i;:::-;17208:66;17270:2;17259:9;17255:18;17246:6;17208:66;:::i;:::-;16961:320;;;;;:::o;17287:648::-;17484:4;17522:3;17511:9;17507:19;17499:27;;17536:71;17604:1;17593:9;17589:17;17580:6;17536:71;:::i;:::-;17617:70;17683:2;17672:9;17668:18;17659:6;17617:70;:::i;:::-;17697;17763:2;17752:9;17748:18;17739:6;17697:70;:::i;:::-;17777;17843:2;17832:9;17828:18;17819:6;17777:70;:::i;:::-;17857:71;17923:3;17912:9;17908:19;17899:6;17857:71;:::i;:::-;17287:648;;;;;;;;:::o;17941:86::-;17976:7;18016:4;18009:5;18005:16;17994:27;;17941:86;;;:::o;18033:112::-;18116:22;18132:5;18116:22;:::i;:::-;18111:3;18104:35;18033:112;;:::o;18151:747::-;18370:4;18408:3;18397:9;18393:19;18385:27;;18422:69;18488:1;18477:9;18473:17;18464:6;18422:69;:::i;:::-;18501:70;18567:2;18556:9;18552:18;18543:6;18501:70;:::i;:::-;18581;18647:2;18636:9;18632:18;18623:6;18581:70;:::i;:::-;18661;18727:2;18716:9;18712:18;18703:6;18661:70;:::i;:::-;18741:71;18807:3;18796:9;18792:19;18783:6;18741:71;:::i;:::-;18822:69;18886:3;18875:9;18871:19;18862:6;18822:69;:::i;:::-;18151:747;;;;;;;;;:::o;18904:180::-;18952:77;18949:1;18942:88;19049:4;19046:1;19039:15;19073:4;19070:1;19063:15;19090:180;19138:77;19135:1;19128:88;19235:4;19232:1;19225:15;19259:4;19256:1;19249:15;19276:208;19315:4;19335:19;19352:1;19335:19;:::i;:::-;19330:24;;19368:19;19385:1;19368:19;:::i;:::-;19363:24;;19411:1;19408;19404:9;19396:17;;19435:18;19429:4;19426:28;19423:54;;;19457:18;;:::i;:::-;19423:54;19276:208;;;;:::o;19490:410::-;19530:7;19553:20;19571:1;19553:20;:::i;:::-;19548:25;;19587:20;19605:1;19587:20;:::i;:::-;19582:25;;19642:1;19639;19635:9;19664:30;19682:11;19664:30;:::i;:::-;19653:41;;19843:1;19834:7;19830:15;19827:1;19824:22;19804:1;19797:9;19777:83;19754:139;;19873:18;;:::i;:::-;19754:139;19538:362;19490:410;;;;:::o;19906:102::-;19948:8;19995:5;19992:1;19988:13;19967:34;;19906:102;;;:::o;20014:848::-;20075:5;20082:4;20106:6;20097:15;;20130:5;20121:14;;20144:712;20165:1;20155:8;20152:15;20144:712;;;20260:4;20255:3;20251:14;20245:4;20242:24;20239:50;;;20269:18;;:::i;:::-;20239:50;20319:1;20309:8;20305:16;20302:451;;;20734:4;20727:5;20723:16;20714:25;;20302:451;20784:4;20778;20774:15;20766:23;;20814:32;20837:8;20814:32;:::i;:::-;20802:44;;20144:712;;;20014:848;;;;;;;:::o;20868:1073::-;20922:5;21113:8;21103:40;;21134:1;21125:10;;21136:5;;21103:40;21162:4;21152:36;;21179:1;21170:10;;21181:5;;21152:36;21248:4;21296:1;21291:27;;;;21332:1;21327:191;;;;21241:277;;21291:27;21309:1;21300:10;;21311:5;;;21327:191;21372:3;21362:8;21359:17;21356:43;;;21379:18;;:::i;:::-;21356:43;21428:8;21425:1;21421:16;21412:25;;21463:3;21456:5;21453:14;21450:40;;;21470:18;;:::i;:::-;21450:40;21503:5;;;21241:277;;21627:2;21617:8;21614:16;21608:3;21602:4;21599:13;21595:36;21577:2;21567:8;21564:16;21559:2;21553:4;21550:12;21546:35;21530:111;21527:246;;;21683:8;21677:4;21673:19;21664:28;;21718:3;21711:5;21708:14;21705:40;;;21725:18;;:::i;:::-;21705:40;21758:5;;21527:246;21798:42;21836:3;21826:8;21820:4;21817:1;21798:42;:::i;:::-;21783:57;;;;21872:4;21867:3;21863:14;21856:5;21853:25;21850:51;;;21881:18;;:::i;:::-;21850:51;21930:4;21923:5;21919:16;21910:25;;20868:1073;;;;;;:::o;21947:281::-;22005:5;22029:23;22047:4;22029:23;:::i;:::-;22021:31;;22073:25;22089:8;22073:25;:::i;:::-;22061:37;;22117:104;22154:66;22144:8;22138:4;22117:104;:::i;:::-;22108:113;;21947:281;;;;:::o;22234:180::-;22282:77;22279:1;22272:88;22379:4;22376:1;22369:15;22403:4;22400:1;22393:15;22420:185;22460:1;22477:20;22495:1;22477:20;:::i;:::-;22472:25;;22511:20;22529:1;22511:20;:::i;:::-;22506:25;;22550:1;22540:35;;22555:18;;:::i;:::-;22540:35;22597:1;22594;22590:9;22585:14;;22420:185;;;;:::o;22611:332::-;22732:4;22770:2;22759:9;22755:18;22747:26;;22783:71;22851:1;22840:9;22836:17;22827:6;22783:71;:::i;:::-;22864:72;22932:2;22921:9;22917:18;22908:6;22864:72;:::i;:::-;22611:332;;;;;:::o;22949:137::-;23003:5;23034:6;23028:13;23019:22;;23050:30;23074:5;23050:30;:::i;:::-;22949:137;;;;:::o;23092:345::-;23159:6;23208:2;23196:9;23187:7;23183:23;23179:32;23176:119;;;23214:79;;:::i;:::-;23176:119;23334:1;23359:61;23412:7;23403:6;23392:9;23388:22;23359:61;:::i;:::-;23349:71;;23305:125;23092:345;;;;:::o;23443:222::-;23536:4;23574:2;23563:9;23559:18;23551:26;;23587:71;23655:1;23644:9;23640:17;23631:6;23587:71;:::i;:::-;23443:222;;;;:::o;23671:218::-;23762:4;23800:2;23789:9;23785:18;23777:26;;23813:69;23879:1;23868:9;23864:17;23855:6;23813:69;:::i;:::-;23671:218;;;;:::o;23895:332::-;24016:4;24054:2;24043:9;24039:18;24031:26;;24067:71;24135:1;24124:9;24120:17;24111:6;24067:71;:::i;:::-;24148:72;24216:2;24205:9;24201:18;24192:6;24148:72;:::i;:::-;23895:332;;;;;:::o;24233:201::-;24272:3;24291:19;24308:1;24291:19;:::i;:::-;24286:24;;24324:19;24341:1;24324:19;:::i;:::-;24319:24;;24366:1;24363;24359:9;24352:16;;24389:14;24384:3;24381:23;24378:49;;;24407:18;;:::i;:::-;24378:49;24233:201;;;;:::o;24440:140::-;24489:9;24522:52;24540:33;24549:23;24566:5;24549:23;:::i;:::-;24540:33;:::i;:::-;24522:52;:::i;:::-;24509:65;;24440:140;;;:::o;24586:129::-;24672:36;24702:5;24672:36;:::i;:::-;24667:3;24660:49;24586:129;;:::o;24721:330::-;24841:4;24879:2;24868:9;24864:18;24856:26;;24892:71;24960:1;24949:9;24945:17;24936:6;24892:71;:::i;:::-;24973;25040:2;25029:9;25025:18;25016:6;24973:71;:::i;:::-;24721:330;;;;;:::o;25057:194::-;25097:4;25117:20;25135:1;25117:20;:::i;:::-;25112:25;;25151:20;25169:1;25151:20;:::i;:::-;25146:25;;25195:1;25192;25188:9;25180:17;;25219:1;25213:4;25210:11;25207:37;;;25224:18;;:::i;:::-;25207:37;25057:194;;;;:::o;25257:191::-;25297:3;25316:20;25334:1;25316:20;:::i;:::-;25311:25;;25350:20;25368:1;25350:20;:::i;:::-;25345:25;;25393:1;25390;25386:9;25379:16;;25414:3;25411:1;25408:10;25405:36;;;25421:18;;:::i;:::-;25405:36;25257:191;;;;:::o;25454:205::-;25493:3;25512:19;25529:1;25512:19;:::i;:::-;25507:24;;25545:19;25562:1;25545:19;:::i;:::-;25540:24;;25587:1;25584;25580:9;25573:16;;25610:18;25605:3;25602:27;25599:53;;;25632:18;;:::i;:::-;25599:53;25454:205;;;;:::o;25665:143::-;25722:5;25753:6;25747:13;25738:22;;25769:33;25796:5;25769:33;:::i;:::-;25665:143;;;;:::o;25814:351::-;25884:6;25933:2;25921:9;25912:7;25908:23;25904:32;25901:119;;;25939:79;;:::i;:::-;25901:119;26059:1;26084:64;26140:7;26131:6;26120:9;26116:22;26084:64;:::i;:::-;26074:74;;26030:128;25814:351;;;;:::o;26171:118::-;26242:22;26258:5;26242:22;:::i;:::-;26235:5;26232:33;26222:61;;26279:1;26276;26269:12;26222:61;26171:118;:::o;26295:139::-;26350:5;26381:6;26375:13;26366:22;;26397:31;26422:5;26397:31;:::i;:::-;26295:139;;;;:::o;26440:347::-;26508:6;26557:2;26545:9;26536:7;26532:23;26528:32;26525:119;;;26563:79;;:::i;:::-;26525:119;26683:1;26708:62;26762:7;26753:6;26742:9;26738:22;26708:62;:::i;:::-;26698:72;;26654:126;26440:347;;;;:::o;26793:323::-;26849:6;26898:2;26886:9;26877:7;26873:23;26869:32;26866:119;;;26904:79;;:::i;:::-;26866:119;27024:1;27049:50;27091:7;27082:6;27071:9;27067:22;27049:50;:::i;:::-;27039:60;;26995:114;26793:323;;;;:::o;27122:285::-;27182:5;27206:23;27224:4;27206:23;:::i;:::-;27198:31;;27250:27;27268:8;27250:27;:::i;:::-;27238:39;;27296:104;27333:66;27323:8;27317:4;27296:104;:::i;:::-;27287:113;;27122:285;;;;:::o;27413:93::-;27449:7;27489:10;27482:5;27478:22;27467:33;;27413:93;;;:::o;27512:120::-;27584:23;27601:5;27584:23;:::i;:::-;27577:5;27574:34;27564:62;;27622:1;27619;27612:12;27564:62;27512:120;:::o;27638:137::-;27683:5;27721:6;27708:20;27699:29;;27737:32;27763:5;27737:32;:::i;:::-;27638:137;;;;:::o;27781:327::-;27839:6;27888:2;27876:9;27867:7;27863:23;27859:32;27856:119;;;27894:79;;:::i;:::-;27856:119;28014:1;28039:52;28083:7;28074:6;28063:9;28059:22;28039:52;:::i;:::-;28029:62;;27985:116;27781:327;;;;:::o;28114:275::-;28153:7;28176:19;28193:1;28176:19;:::i;:::-;28171:24;;28209:19;28226:1;28209:19;:::i;:::-;28204:24;;28263:1;28260;28256:9;28285:29;28302:11;28285:29;:::i;:::-;28274:40;;28346:11;28337:7;28334:24;28324:58;;28362:18;;:::i;:::-;28324:58;28161:228;28114:275;;;;:::o;28395:143::-;28452:5;28483:6;28477:13;28468:22;;28499:33;28526:5;28499:33;:::i;:::-;28395:143;;;;:::o;28544:351::-;28614:6;28663:2;28651:9;28642:7;28638:23;28634:32;28631:119;;;28669:79;;:::i;:::-;28631:119;28789:1;28814:64;28870:7;28861:6;28850:9;28846:22;28814:64;:::i;:::-;28804:74;;28760:128;28544:351;;;;:::o;28901:204::-;28940:4;28960:19;28977:1;28960:19;:::i;:::-;28955:24;;28993:19;29010:1;28993:19;:::i;:::-;28988:24;;29036:1;29033;29029:9;29021:17;;29060:14;29054:4;29051:24;29048:50;;;29078:18;;:::i;:::-;29048:50;28901:204;;;;:::o;29111:182::-;29150:1;29167:19;29184:1;29167:19;:::i;:::-;29162:24;;29200:19;29217:1;29200:19;:::i;:::-;29195:24;;29238:1;29228:35;;29243:18;;:::i;:::-;29228:35;29285:1;29282;29278:9;29273:14;;29111:182;;;;:::o;29299:529::-;29464:4;29502:3;29491:9;29487:19;29479:27;;29516:71;29584:1;29573:9;29569:17;29560:6;29516:71;:::i;:::-;29597:72;29665:2;29654:9;29650:18;29641:6;29597:72;:::i;:::-;29679:66;29741:2;29730:9;29726:18;29717:6;29679:66;:::i;:::-;29755;29817:2;29806:9;29802:18;29793:6;29755:66;:::i;:::-;29299:529;;;;;;;:::o;29834:442::-;29983:4;30021:2;30010:9;30006:18;29998:26;;30034:71;30102:1;30091:9;30087:17;30078:6;30034:71;:::i;:::-;30115:72;30183:2;30172:9;30168:18;30159:6;30115:72;:::i;:::-;30197;30265:2;30254:9;30250:18;30241:6;30197:72;:::i;:::-;29834:442;;;;;;:::o;30282:324::-;30399:4;30437:2;30426:9;30422:18;30414:26;;30450:69;30516:1;30505:9;30501:17;30492:6;30450:69;:::i;:::-;30529:70;30595:2;30584:9;30580:18;30571:6;30529:70;:::i;:::-;30282:324;;;;;:::o;30612:98::-;30663:6;30697:5;30691:12;30681:22;;30612:98;;;:::o;30716:147::-;30817:11;30854:3;30839:18;;30716:147;;;;:::o;30869:246::-;30950:1;30960:113;30974:6;30971:1;30968:13;30960:113;;;31059:1;31054:3;31050:11;31044:18;31040:1;31035:3;31031:11;31024:39;30996:2;30993:1;30989:10;30984:15;;30960:113;;;31107:1;31098:6;31093:3;31089:16;31082:27;30931:184;30869:246;;;:::o;31121:386::-;31225:3;31253:38;31285:5;31253:38;:::i;:::-;31307:88;31388:6;31383:3;31307:88;:::i;:::-;31300:95;;31404:65;31462:6;31457:3;31450:4;31443:5;31439:16;31404:65;:::i;:::-;31494:6;31489:3;31485:16;31478:23;;31229:278;31121:386;;;;:::o;31513:271::-;31643:3;31665:93;31754:3;31745:6;31665:93;:::i;:::-;31658:100;;31775:3;31768:10;;31513:271;;;;:::o","linkReferences":{},"immutableReferences":{"64178":[{"start":2563,"length":32},{"start":7927,"length":32}],"64481":[{"start":9456,"length":32},{"start":14699,"length":32}],"64484":[{"start":9617,"length":32},{"start":15290,"length":32}]}},"methodIdentifiers":{"adjustments(uint256)":"bc3b2b12","authority()":"bf7e214f","close(uint256)":"0aebeb4e","create(uint256[3],uint256[2],address,uint32[2],bool[2])":"a0139f41","currentControlVariable(uint256)":"0a9d85eb","currentDebt(uint256)":"bcb29667","daoReward()":"1885f580","debtDecay(uint256)":"abbf4b17","debtRatio(uint256)":"f1b7dc78","deposit(uint256,uint256,uint256,address,address)":"7c770aae","getReward()":"3d18b912","indexesFor(address)":"e481b265","isLive(uint256)":"27507458","liveMarkets()":"c9b67af5","liveMarketsFor(address)":"64914439","marketPrice(uint256)":"3adec5a7","markets(uint256)":"b1283e77","marketsForQuote(address,uint256)":"c0680e20","metadatas(uint256)":"e73496cd","notes(address,uint256)":"e0b117ff","payoutFor(uint256,uint256)":"6a6c575d","pendingFor(address,uint256)":"c3e0fb1c","pullNote(address,uint256)":"a4220610","pushNote(address,uint256)":"d6db4df8","redeem(address,bool,uint256[])":"a986a196","redeemAll(address,bool)":"46aed74e","refReward()":"f3191a46","rewards(address)":"0700037d","setAuthority(address)":"7a9e5e4b","setRewards(uint256,uint256)":"654e51e7","terms(uint256)":"c0aa0e8a","updateTreasury()":"9c769787","whitelist(address)":"9b19251a","whitelisted(address)":"d936547e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"ftso\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"ghst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"staking\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AlreadyRedeemed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"concludedTime\",\"type\":\"uint48\"}],\"name\":\"DepositoryConcluded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"}],\"name\":\"DepositoryMaxPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPayout\",\"type\":\"uint256\"}],\"name\":\"DepositoryMaxSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"NoteNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"TransferNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"Bond\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"MarketClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialPrice\",\"type\":\"uint256\"}],\"name\":\"MarketCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"oldControlVariable\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newControlVariable\",\"type\":\"uint64\"}],\"name\":\"Tuned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"adjustments\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"change\",\"type\":\"uint64\"},{\"internalType\":\"uint48\",\"name\":\"lastAdjustment\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"timeToAdjusted\",\"type\":\"uint48\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"internalType\":\"contract IGhostAuthority\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"close\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[3]\",\"name\":\"_market\",\"type\":\"uint256[3]\"},{\"internalType\":\"uint256[2]\",\"name\":\"_terms\",\"type\":\"uint256[2]\"},{\"internalType\":\"address\",\"name\":\"_quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint32[2]\",\"name\":\"_intervals\",\"type\":\"uint32[2]\"},{\"internalType\":\"bool[2]\",\"name\":\"_booleans\",\"type\":\"bool[2]\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"currentControlVariable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"currentDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"daoReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"debtDecay\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"debtRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"referral\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"indexesFor\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"isLive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liveMarkets\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"liveMarketsFor\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"marketPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"markets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"capacityInQuote\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"totalDebt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxPayout\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sold\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"purchased\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"marketsForQuote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"metadatas\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"lastTune\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"lastDecay\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"length\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"depositInterval\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"tuneInterval\",\"type\":\"uint48\"},{\"internalType\":\"uint8\",\"name\":\"quoteDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"notes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"created\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"matured\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"redeemed\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"marketId\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"payoutFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"pendingFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"matured\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"pullNote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"pushNote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"sendGhst\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"indexes\",\"type\":\"uint256[]\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"sendGhst\",\"type\":\"bool\"}],\"name\":\"redeemAll\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"toFrontEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toDao\",\"type\":\"uint256\"}],\"name\":\"setRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"terms\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"fixedTerm\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"controlVariable\",\"type\":\"uint64\"},{\"internalType\":\"uint48\",\"name\":\"vesting\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"conclusion\",\"type\":\"uint48\"},{\"internalType\":\"uint64\",\"name\":\"maxDebt\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"whitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BondDepository.sol\":\"GhostBondDepository\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"src/BondDepository.sol\":{\"keccak256\":\"0x5d0d184f2eb5bb0d5cfeedb7623087b3ae14e095968bc80e9cfcbf9e4d74ffba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e804637b59ceb4f855e61d99132b43bfbb16496a3581920154175a24f06e6f71\",\"dweb:/ipfs/QmbJMigUvMuKmJCW4Q2k6wvqUNiHA9wxCv6RYJzk1sNNWm\"]},\"src/interfaces/IBondDepository.sol\":{\"keccak256\":\"0x305ce7651b0107aaada869b7f7d72f289e8d8035fa097bef454f80ce7f57e65e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e8a3451edd34ca78aee64f558a17f8df7c88c8d03b47d3fce374f721ac76ab9\",\"dweb:/ipfs/QmNc8fpJ3XniAPABKxxWLeeuC6b1b9AgdkQ57oGRyFzeN1\"]},\"src/interfaces/IGHST.sol\":{\"keccak256\":\"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c\",\"dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG\"]},\"src/interfaces/IGhostAuthority.sol\":{\"keccak256\":\"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b\",\"dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd\"]},\"src/interfaces/INoteKeeper.sol\":{\"keccak256\":\"0x8433ae4d5713c05dee4d92ece8cd798e2b5c8604452c8cf026b87a9e04162c7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4dc445d2519911c4abc449aa48528ad4e863114d985aafeb84beb510151e3e9\",\"dweb:/ipfs/QmZrkLbtwAouPTs8SuJ8C28GiHJQFpH4g23pmmaBSHkfZe\"]},\"src/interfaces/IStaking.sol\":{\"keccak256\":\"0xec99f7da7b07c78769cd3d35192568b24e3faa0fa1edcbf107c1af3c6070c7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71c04f0ed15f9f3051f825b38b5d8606d900670ffdeb25b0706c729868ca7947\",\"dweb:/ipfs/QmQDaR1n5bhmGRhTxZFMonBDiB5hiTfHrkaU3qiFF7STe3\"]},\"src/interfaces/ITreasury.sol\":{\"keccak256\":\"0xd1d69ec10aa6f19bc3775c19341b60af9324c0596671d30de5ae97604d3ee800\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6dfb466171b0e6f08d3e577ffdf457d3a12a8e3f2a41331f0a40a6abddd0c95a\",\"dweb:/ipfs/QmdLJtAFwD2B4tTqdaxAWG3qrR6uJw5nM6NMMJCEU9frVR\"]},\"src/types/FrontEndRewarder.sol\":{\"keccak256\":\"0xd0aa35b86c26648b07da01064d1037c494d07f7fc578ed3e1489e6ebb4a0c159\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c0cbff3c8ec283e8db215cc1193a2828c39a3fe0ae0b9a4c6c362d79cc2f8d3\",\"dweb:/ipfs/QmZgBWCPogcQpXzF9734siMNe8uVUfApqX2oh9FGaU3ECt\"]},\"src/types/GhostAccessControlled.sol\":{\"keccak256\":\"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0\",\"dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW\"]},\"src/types/NoteKeeper.sol\":{\"keccak256\":\"0x800f837c4551c3496e89b6bb9bbe8c69d20711aa19049150145634ad6825fabd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19a65d51a2b68e839bb12055648793c014f0e8aa9dabafd58c1428fdd2fee474\",\"dweb:/ipfs/QmZbp9CuF7zx7zQgP6wj9CbLHC5MQpi7Ac6uzCC7n6SAqy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"authority","type":"address"},{"internalType":"address","name":"ftso","type":"address"},{"internalType":"address","name":"ghst","type":"address"},{"internalType":"address","name":"staking","type":"address"},{"internalType":"address","name":"treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"AddressInsufficientBalance"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"AlreadyRedeemed"},{"inputs":[{"internalType":"uint48","name":"concludedTime","type":"uint48"}],"type":"error","name":"DepositoryConcluded"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"type":"error","name":"DepositoryMaxPrice"},{"inputs":[{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint256","name":"maxPayout","type":"uint256"}],"type":"error","name":"DepositoryMaxSize"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"NoteNotFound"},{"inputs":[],"type":"error","name":"OnlyAuthorized"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"TransferNotFound"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[{"internalType":"address","name":"authority","type":"address","indexed":false}],"type":"event","name":"AuthorityUpdated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"price","type":"uint256","indexed":false}],"type":"event","name":"Bond","anonymous":false},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256","indexed":true}],"type":"event","name":"MarketClosed","anonymous":false},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256","indexed":true},{"internalType":"address","name":"baseToken","type":"address","indexed":true},{"internalType":"address","name":"quoteToken","type":"address","indexed":true},{"internalType":"uint256","name":"initialPrice","type":"uint256","indexed":false}],"type":"event","name":"MarketCreated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256","indexed":true},{"internalType":"uint64","name":"oldControlVariable","type":"uint64","indexed":false},{"internalType":"uint64","name":"newControlVariable","type":"uint64","indexed":false}],"type":"event","name":"Tuned","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"adjustments","outputs":[{"internalType":"uint64","name":"change","type":"uint64"},{"internalType":"uint48","name":"lastAdjustment","type":"uint48"},{"internalType":"uint48","name":"timeToAdjusted","type":"uint48"},{"internalType":"bool","name":"active","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"authority","outputs":[{"internalType":"contract IGhostAuthority","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"close"},{"inputs":[{"internalType":"uint256[3]","name":"_market","type":"uint256[3]"},{"internalType":"uint256[2]","name":"_terms","type":"uint256[2]"},{"internalType":"address","name":"_quoteToken","type":"address"},{"internalType":"uint32[2]","name":"_intervals","type":"uint32[2]"},{"internalType":"bool[2]","name":"_booleans","type":"bool[2]"}],"stateMutability":"nonpayable","type":"function","name":"create","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"currentControlVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"currentDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"daoReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"debtDecay","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"debtRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"referral","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deposit","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"getReward"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"stateMutability":"view","type":"function","name":"indexesFor","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"isLive","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"liveMarkets","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"liveMarketsFor","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"marketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"markets","outputs":[{"internalType":"uint256","name":"capacity","type":"uint256"},{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"bool","name":"capacityInQuote","type":"bool"},{"internalType":"uint64","name":"totalDebt","type":"uint64"},{"internalType":"uint64","name":"maxPayout","type":"uint64"},{"internalType":"uint64","name":"sold","type":"uint64"},{"internalType":"uint256","name":"purchased","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"marketsForQuote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"metadatas","outputs":[{"internalType":"uint48","name":"lastTune","type":"uint48"},{"internalType":"uint48","name":"lastDecay","type":"uint48"},{"internalType":"uint48","name":"length","type":"uint48"},{"internalType":"uint48","name":"depositInterval","type":"uint48"},{"internalType":"uint48","name":"tuneInterval","type":"uint48"},{"internalType":"uint8","name":"quoteDecimals","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"notes","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint48","name":"created","type":"uint48"},{"internalType":"uint48","name":"matured","type":"uint48"},{"internalType":"uint48","name":"redeemed","type":"uint48"},{"internalType":"uint48","name":"marketId","type":"uint48"}]},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"payoutFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"pendingFor","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"bool","name":"matured","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"pullNote","outputs":[{"internalType":"uint256","name":"newIndex","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"pushNote"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"sendGhst","type":"bool"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"redeem","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"sendGhst","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"redeemAll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"refReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newAuthority","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAuthority"},{"inputs":[{"internalType":"uint256","name":"toFrontEnd","type":"uint256"},{"internalType":"uint256","name":"toDao","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewards"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"terms","outputs":[{"internalType":"bool","name":"fixedTerm","type":"bool"},{"internalType":"uint64","name":"controlVariable","type":"uint64"},{"internalType":"uint48","name":"vesting","type":"uint48"},{"internalType":"uint48","name":"conclusion","type":"uint48"},{"internalType":"uint64","name":"maxDebt","type":"uint64"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"updateTreasury"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelist"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/BondDepository.sol":"GhostBondDepository"},"evmVersion":"shanghai","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"src/BondDepository.sol":{"keccak256":"0x5d0d184f2eb5bb0d5cfeedb7623087b3ae14e095968bc80e9cfcbf9e4d74ffba","urls":["bzz-raw://e804637b59ceb4f855e61d99132b43bfbb16496a3581920154175a24f06e6f71","dweb:/ipfs/QmbJMigUvMuKmJCW4Q2k6wvqUNiHA9wxCv6RYJzk1sNNWm"],"license":"MIT"},"src/interfaces/IBondDepository.sol":{"keccak256":"0x305ce7651b0107aaada869b7f7d72f289e8d8035fa097bef454f80ce7f57e65e","urls":["bzz-raw://3e8a3451edd34ca78aee64f558a17f8df7c88c8d03b47d3fce374f721ac76ab9","dweb:/ipfs/QmNc8fpJ3XniAPABKxxWLeeuC6b1b9AgdkQ57oGRyFzeN1"],"license":"MIT"},"src/interfaces/IGHST.sol":{"keccak256":"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89","urls":["bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c","dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG"],"license":"MIT"},"src/interfaces/IGhostAuthority.sol":{"keccak256":"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b","urls":["bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b","dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd"],"license":"MIT"},"src/interfaces/INoteKeeper.sol":{"keccak256":"0x8433ae4d5713c05dee4d92ece8cd798e2b5c8604452c8cf026b87a9e04162c7b","urls":["bzz-raw://a4dc445d2519911c4abc449aa48528ad4e863114d985aafeb84beb510151e3e9","dweb:/ipfs/QmZrkLbtwAouPTs8SuJ8C28GiHJQFpH4g23pmmaBSHkfZe"],"license":"MIT"},"src/interfaces/IStaking.sol":{"keccak256":"0xec99f7da7b07c78769cd3d35192568b24e3faa0fa1edcbf107c1af3c6070c7ff","urls":["bzz-raw://71c04f0ed15f9f3051f825b38b5d8606d900670ffdeb25b0706c729868ca7947","dweb:/ipfs/QmQDaR1n5bhmGRhTxZFMonBDiB5hiTfHrkaU3qiFF7STe3"],"license":"MIT"},"src/interfaces/ITreasury.sol":{"keccak256":"0xd1d69ec10aa6f19bc3775c19341b60af9324c0596671d30de5ae97604d3ee800","urls":["bzz-raw://6dfb466171b0e6f08d3e577ffdf457d3a12a8e3f2a41331f0a40a6abddd0c95a","dweb:/ipfs/QmdLJtAFwD2B4tTqdaxAWG3qrR6uJw5nM6NMMJCEU9frVR"],"license":"MIT"},"src/types/FrontEndRewarder.sol":{"keccak256":"0xd0aa35b86c26648b07da01064d1037c494d07f7fc578ed3e1489e6ebb4a0c159","urls":["bzz-raw://2c0cbff3c8ec283e8db215cc1193a2828c39a3fe0ae0b9a4c6c362d79cc2f8d3","dweb:/ipfs/QmZgBWCPogcQpXzF9734siMNe8uVUfApqX2oh9FGaU3ECt"],"license":"MIT"},"src/types/GhostAccessControlled.sol":{"keccak256":"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d","urls":["bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0","dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW"],"license":"MIT"},"src/types/NoteKeeper.sol":{"keccak256":"0x800f837c4551c3496e89b6bb9bbe8c69d20711aa19049150145634ad6825fabd","urls":["bzz-raw://19a65d51a2b68e839bb12055648793c014f0e8aa9dabafd58c1428fdd2fee474","dweb:/ipfs/QmZbp9CuF7zx7zQgP6wj9CbLHC5MQpi7Ac6uzCC7n6SAqy"],"license":"MIT"}},"version":1},"id":86} \ No newline at end of file diff --git a/src/abi/GhostStaking.json b/src/abi/GhostStaking.json new file mode 100644 index 0000000..ef03b53 --- /dev/null +++ b/src/abi/GhostStaking.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_ftso","type":"address","internalType":"address"},{"name":"_stnk","type":"address","internalType":"address"},{"name":"_ghst","type":"address","internalType":"address"},{"name":"_epochLength","type":"uint256","internalType":"uint256"},{"name":"_firstEpochNumber","type":"uint256","internalType":"uint256"},{"name":"_firstEpochTime","type":"uint256","internalType":"uint256"},{"name":"_authority","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"authority","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IGhostAuthority"}],"stateMutability":"view"},{"type":"function","name":"claim","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"isRebase","type":"bool","internalType":"bool"}],"outputs":[{"name":"claimedAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"distributor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"epoch","inputs":[],"outputs":[{"name":"length","type":"uint256","internalType":"uint256"},{"name":"number","type":"uint256","internalType":"uint256"},{"name":"end","type":"uint256","internalType":"uint256"},{"name":"distribute","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"forfeit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"ftso","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getEpoch","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IStaking.Epoch","components":[{"name":"length","type":"uint256","internalType":"uint256"},{"name":"number","type":"uint256","internalType":"uint256"},{"name":"end","type":"uint256","internalType":"uint256"},{"name":"distribute","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getWarmupInfo","inputs":[{"name":"who","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IStaking.Claim","components":[{"name":"deposit","type":"uint256","internalType":"uint256"},{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"expiry","type":"uint256","internalType":"uint256"},{"name":"lock","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"ghst","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"index","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rebase","inputs":[],"outputs":[{"name":"bounty","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"setAuthority","inputs":[{"name":"newAuthority","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDistributor","inputs":[{"name":"_distributor","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setWarmupLength","inputs":[{"name":"_warmupPeriod","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sharesInWarmup","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"stake","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"},{"name":"isRebase","type":"bool","internalType":"bool"},{"name":"isClaim","type":"bool","internalType":"bool"}],"outputs":[{"name":"returnAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"stnk","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"supplyInWarmup","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"toggleLock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstake","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"},{"name":"isTrigger","type":"bool","internalType":"bool"},{"name":"isRebase","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"unwrap","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"warmupInfo","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"deposit","type":"uint256","internalType":"uint256"},{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"expiry","type":"uint256","internalType":"uint256"},{"name":"lock","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"warmupPeriod","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"wrap","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"AuthorityUpdated","inputs":[{"name":"authority","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"DistributorSet","inputs":[{"name":"distributor","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"WarmupSet","inputs":[{"name":"warmup","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressInsufficientBalance","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ExternalClaimsLocked","inputs":[]},{"type":"error","name":"ExternalDepositsLocked","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Unauthorized","inputs":[]}],"bytecode":{"object":"0x60e06040523480156200001157600080fd5b5060405162001c4238038062001c428339810160408190526200003491620000fd565b600080546001600160a01b0319166001600160a01b03831690811790915560405190815281907f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9060200160405180910390a150506001600160a01b03958616608090815294861660a0529290941660c0526040805193840181528184526020840185905283018290526000606090930183905260015560029290925560039190915560045562000177565b80516001600160a01b0381168114620000f857600080fd5b919050565b600080600080600080600060e0888a0312156200011957600080fd5b6200012488620000e0565b96506200013460208901620000e0565b95506200014460408901620000e0565b9450606088015193506080880151925060a088015191506200016960c08901620000e0565b905092959891949750929550565b60805160a05160c0516119f36200024f600039600081816103bc01528181610542015281816105ba01528181610c7f01528181610d1b015281816111ef0152818161126a0152818161153801526115d40152600081816101d701528181610446015281816104c70152818161063e015281816108b90152818161097201528181610b8501528181610c4101528181610f0f015281816110310152818161119a01526114f101526000818161016201528181610b0b01528181610e0e015281816111400152818161130001526113a001526119f36000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063af14052c116100c3578063deac361a1161007c578063deac361a146103ae578063ef2374f2146103b7578063f3d86e4a146103de578063f63418f3146103e6578063fe07c564146103ef578063ff9413d81461040257600080fd5b8063af14052c14610312578063bf376c7a1461031a578063bf7e214f1461032d578063bfe1092814610340578063cad52dfe14610353578063ccd2a5a11461039b57600080fd5b806375619ab51161011557806375619ab514610253578063757991a8146102685780637a9e5e4b146102a3578063900cf0cf146102b65780639238d592146102ec57806392fd2daf146102ff57600080fd5b80630da0c0221461015d57806320138641146101a15780632986c0e5146101b757806339f47693146101bf57806345c57eb5146101d25780636746f4c2146101f9575b600080fd5b6101847f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a9610429565b604051908152602001610198565b6101a96104c3565b6101a96101cd366004611803565b610523565b6101847f000000000000000000000000000000000000000000000000000000000000000081565b61023161020736600461182f565b60086020526000908152604090208054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015215156060820152608001610198565b61026661026136600461182f565b61066b565b005b6102706106c8565b60405161019891908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102666102b136600461182f565b610720565b6001546002546003546004546102cc9392919084565b604080519485526020850193909352918301526060820152608001610198565b6102666102fa36600461184c565b610776565b6101a961030d366004611873565b6107b3565b6101a9610942565b6101a9610328366004611803565b610c32565b600054610184906001600160a01b031681565b600754610184906001600160a01b031681565b61036661036136600461182f565b610d7f565b604051610198919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b6101a96103a93660046118ac565b610dff565b6101a960055481565b6101847f000000000000000000000000000000000000000000000000000000000000000081565b6101a96110b8565b6101a960065481565b6101a96103fd3660046118ac565b61116e565b610266336000908152600860205260409020600301805460ff19811660ff90911615179055565b600654604051630d87725360e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631b0ee4a69161047d9160040190815260200190565b602060405180830381865afa15801561049a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104be91906118ff565b905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632986c0e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561049a573d6000803e3d6000fd5b604051632770a7eb60e21b8152336004820152602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561058e57600080fd5b505af11580156105a2573d6000803e3d6000fd5b505060405163150490ed60e31b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063a82487689150602401602060405180830381865afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f91906118ff565b90506106656001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684836113d1565b92915050565b610673611435565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f86719c518c7d99ac94b3d405d462ea876ba5cd0a978461dc9a7c9862a9485886906020015b60405180910390a150565b6106f36040518060800160405280600081526020016000815260200160008152602001600081525090565b50604080516080810182526001548152600254602082015260035491810191909152600454606082015290565b610728611435565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad906020016106bd565b61077e611435565b60058190556040518181527fac17d51c35ac71d3eddc155985908430e88946d51e2f6093e93c1c0aba08f6c4906020016106bd565b6001600160a01b03821660009081526008602090815260408083208151608081018352815481526001820154938101939093526002810154918301919091526003015460ff1615156060820181905261082f576001600160a01b038416331461082f57604051633db9895d60e01b815260040160405180910390fd5b6040810151600254108015906108485750604081015115155b1561093b576001600160a01b038416600090815260086020908152604082208281556001810183905560028101929092556003909101805460ff19169055810151600654610896919061192e565b6006556020810151604051630d87725360e11b8152610938916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631b0ee4a6916108f09160040190815260200190565b602060405180830381865afa15801561090d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093191906118ff565b85856114dc565b91505b5092915050565b60004260016002015411610c2f5760048054600254604051630163b36d60e21b81529283019190915260248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063058ecdb4906044016020604051808303816000875af11580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e791906118ff565b50600180546003805490910190556002805490910190556007546001600160a01b031615610af357600760009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50505050600760009054906101000a90046001600160a01b03166001600160a01b031663e7187e8a6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af091906118ff565b90505b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e91906118ff565b90506000827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639358928b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0591906118ff565b610c0f9190611941565b9050808211610c1f576000610c29565b610c29818361192e565b60045550505b90565b6000610c696001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561163d565b6040516319a948db60e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366a5236c90602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf291906118ff565b6040516340c10f1960e01b81526001600160a01b038581166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b158015610d6157600080fd5b505af1158015610d75573d6000803e3d6000fd5b5050505092915050565b610dac60405180608001604052806000815260200160008152602001600081526020016000151581525090565b506001600160a01b031660009081526008602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161515606082015290565b6000610e366001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308861163d565b610e3e610942565b610e489086611941565b9050818015610e575750600554155b15610e6e57610e678185856114dc565b90506110b0565b6001600160a01b03841660009081526008602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff16151560608201819052610eed576001600160a01b0385163314610eed57604051633db9895d60e01b815260040160405180910390fd5b6040518060800160405280838360000151610f089190611941565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663775646ed856040518263ffffffff1660e01b8152600401610f5b91815260200190565b602060405180830381865afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c91906118ff565b8360200151610fab9190611941565b81526020016005546001800154610fc29190611941565b815260608381015115156020928301526001600160a01b038881166000908152600884526040908190208551815593850151600185015584810151600285015593909101516003909201805460ff191692151592909217909155905163775646ed60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000009091169063775646ed90602401602060405180830381865afa15801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e91906118ff565b6006546110ab9190611941565b600655505b949350505050565b3360008181526008602081815260408084208151608081018352815481526001820180548286019081526002840180549584019590955260038401805460ff8116151560608601529989529690955291869055908590559084905560ff199094169091555160065491929161112d919061192e565b6006558051611168906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169033906113d1565b51919050565b6000808361117d576000611185565b611185610942565b905082156111d3576111c26001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308961163d565b6111cc8187611941565b95506112eb565b604051632770a7eb60e21b8152336004820152602481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561123b57600080fd5b505af115801561124f573d6000803e3d6000fd5b505060405163150490ed60e31b8152600481018990528392507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063a824876890602401602060405180830381865afa1580156112ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112de91906118ff565b6112e89190611941565b95505b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137391906118ff565b86111561139357604051631e9acf1760e31b815260040160405180910390fd5b6113c76001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686886113d1565b5093949350505050565b6040516001600160a01b0383811660248301526044820183905261143091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061167c565b505050565b60008054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190611954565b6001600160a01b0316336001600160a01b0316146114da576040516282b42960e81b815260040160405180910390fd5b565b6000811561151f576115186001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684866113d1565b5082611636565b6040516319a948db60e21b8152600481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366a5236c90602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab91906118ff565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b15801561161a57600080fd5b505af115801561162e573d6000803e3d6000fd5b509293505050505b9392505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526116769186918216906323b872dd906084016113fe565b50505050565b60006116916001600160a01b038416836116e4565b905080516000141580156116b65750808060200190518101906116b49190611971565b155b1561143057604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b60606116368383600084600080856001600160a01b0316848660405161170a919061198e565b60006040518083038185875af1925050503d8060008114611747576040519150601f19603f3d011682016040523d82523d6000602084013e61174c565b606091505b509150915061175c868383611766565b9695505050505050565b60608261177b57611776826117c2565b611636565b815115801561179257506001600160a01b0384163b155b156117bb57604051639996b31560e01b81526001600160a01b03851660048201526024016116db565b5080611636565b8051156117d25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b03811681146117eb57600080fd5b6000806040838503121561181657600080fd5b8235611821816117ee565b946020939093013593505050565b60006020828403121561184157600080fd5b8135611636816117ee565b60006020828403121561185e57600080fd5b5035919050565b80151581146117eb57600080fd5b6000806040838503121561188657600080fd5b8235611891816117ee565b915060208301356118a181611865565b809150509250929050565b600080600080608085870312156118c257600080fd5b8435935060208501356118d4816117ee565b925060408501356118e481611865565b915060608501356118f481611865565b939692955090935050565b60006020828403121561191157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561066557610665611918565b8082018082111561066557610665611918565b60006020828403121561196657600080fd5b8151611636816117ee565b60006020828403121561198357600080fd5b815161163681611865565b6000825160005b818110156119af5760208186018101518583015201611995565b50600092019182525091905056fea2646970667358221220ee58387464b841fb2bfac257ce88b6c66ee7add0caab098dc415f091097f94ea64736f6c63430008140033","sourceMap":"370:5936:89:-:0;;;810:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;313:9:116;:22;;-1:-1:-1;;;;;;313:22:116;-1:-1:-1;;;;;313:22:116;;;;;;;;350:37;;997:51:130;;;313:22:116;;350:37;;985:2:130;970:18;350:37:116;;;;;;;-1:-1:-1;;;;;;;1084:12:89;;::::1;;::::0;;;1106;;::::1;;::::0;1128;;;::::1;;::::0;1159:151:::1;::::0;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;-1:-1:-1;;1159:151:89;;;;;;1151:5:::1;:159:::0;;;;;;;;;;;;;370:5936;;14:177:130;93:13;;-1:-1:-1;;;;;135:31:130;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:650::-;320:6;328;336;344;352;360;368;421:3;409:9;400:7;396:23;392:33;389:53;;;438:1;435;428:12;389:53;461:40;491:9;461:40;:::i;:::-;451:50;;520:49;565:2;554:9;550:18;520:49;:::i;:::-;510:59;;588:49;633:2;622:9;618:18;588:49;:::i;:::-;578:59;;677:2;666:9;662:18;656:25;646:35;;721:3;710:9;706:19;700:26;690:36;;766:3;755:9;751:19;745:26;735:36;;790:50;835:3;824:9;820:19;790:50;:::i;:::-;780:60;;196:650;;;;;;;;;;:::o;851:203::-;370:5936:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063af14052c116100c3578063deac361a1161007c578063deac361a146103ae578063ef2374f2146103b7578063f3d86e4a146103de578063f63418f3146103e6578063fe07c564146103ef578063ff9413d81461040257600080fd5b8063af14052c14610312578063bf376c7a1461031a578063bf7e214f1461032d578063bfe1092814610340578063cad52dfe14610353578063ccd2a5a11461039b57600080fd5b806375619ab51161011557806375619ab514610253578063757991a8146102685780637a9e5e4b146102a3578063900cf0cf146102b65780639238d592146102ec57806392fd2daf146102ff57600080fd5b80630da0c0221461015d57806320138641146101a15780632986c0e5146101b757806339f47693146101bf57806345c57eb5146101d25780636746f4c2146101f9575b600080fd5b6101847f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101a9610429565b604051908152602001610198565b6101a96104c3565b6101a96101cd366004611803565b610523565b6101847f000000000000000000000000000000000000000000000000000000000000000081565b61023161020736600461182f565b60086020526000908152604090208054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015215156060820152608001610198565b61026661026136600461182f565b61066b565b005b6102706106c8565b60405161019891908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102666102b136600461182f565b610720565b6001546002546003546004546102cc9392919084565b604080519485526020850193909352918301526060820152608001610198565b6102666102fa36600461184c565b610776565b6101a961030d366004611873565b6107b3565b6101a9610942565b6101a9610328366004611803565b610c32565b600054610184906001600160a01b031681565b600754610184906001600160a01b031681565b61036661036136600461182f565b610d7f565b604051610198919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b6101a96103a93660046118ac565b610dff565b6101a960055481565b6101847f000000000000000000000000000000000000000000000000000000000000000081565b6101a96110b8565b6101a960065481565b6101a96103fd3660046118ac565b61116e565b610266336000908152600860205260409020600301805460ff19811660ff90911615179055565b600654604051630d87725360e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631b0ee4a69161047d9160040190815260200190565b602060405180830381865afa15801561049a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104be91906118ff565b905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632986c0e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561049a573d6000803e3d6000fd5b604051632770a7eb60e21b8152336004820152602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561058e57600080fd5b505af11580156105a2573d6000803e3d6000fd5b505060405163150490ed60e31b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063a82487689150602401602060405180830381865afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f91906118ff565b90506106656001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684836113d1565b92915050565b610673611435565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f86719c518c7d99ac94b3d405d462ea876ba5cd0a978461dc9a7c9862a9485886906020015b60405180910390a150565b6106f36040518060800160405280600081526020016000815260200160008152602001600081525090565b50604080516080810182526001548152600254602082015260035491810191909152600454606082015290565b610728611435565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad906020016106bd565b61077e611435565b60058190556040518181527fac17d51c35ac71d3eddc155985908430e88946d51e2f6093e93c1c0aba08f6c4906020016106bd565b6001600160a01b03821660009081526008602090815260408083208151608081018352815481526001820154938101939093526002810154918301919091526003015460ff1615156060820181905261082f576001600160a01b038416331461082f57604051633db9895d60e01b815260040160405180910390fd5b6040810151600254108015906108485750604081015115155b1561093b576001600160a01b038416600090815260086020908152604082208281556001810183905560028101929092556003909101805460ff19169055810151600654610896919061192e565b6006556020810151604051630d87725360e11b8152610938916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691631b0ee4a6916108f09160040190815260200190565b602060405180830381865afa15801561090d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093191906118ff565b85856114dc565b91505b5092915050565b60004260016002015411610c2f5760048054600254604051630163b36d60e21b81529283019190915260248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063058ecdb4906044016020604051808303816000875af11580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e791906118ff565b50600180546003805490910190556002805490910190556007546001600160a01b031615610af357600760009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50505050600760009054906101000a90046001600160a01b03166001600160a01b031663e7187e8a6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af091906118ff565b90505b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e91906118ff565b90506000827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639358928b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0591906118ff565b610c0f9190611941565b9050808211610c1f576000610c29565b610c29818361192e565b60045550505b90565b6000610c696001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561163d565b6040516319a948db60e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366a5236c90602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf291906118ff565b6040516340c10f1960e01b81526001600160a01b038581166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b158015610d6157600080fd5b505af1158015610d75573d6000803e3d6000fd5b5050505092915050565b610dac60405180608001604052806000815260200160008152602001600081526020016000151581525090565b506001600160a01b031660009081526008602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161515606082015290565b6000610e366001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308861163d565b610e3e610942565b610e489086611941565b9050818015610e575750600554155b15610e6e57610e678185856114dc565b90506110b0565b6001600160a01b03841660009081526008602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff16151560608201819052610eed576001600160a01b0385163314610eed57604051633db9895d60e01b815260040160405180910390fd5b6040518060800160405280838360000151610f089190611941565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663775646ed856040518263ffffffff1660e01b8152600401610f5b91815260200190565b602060405180830381865afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c91906118ff565b8360200151610fab9190611941565b81526020016005546001800154610fc29190611941565b815260608381015115156020928301526001600160a01b038881166000908152600884526040908190208551815593850151600185015584810151600285015593909101516003909201805460ff191692151592909217909155905163775646ed60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000009091169063775646ed90602401602060405180830381865afa15801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e91906118ff565b6006546110ab9190611941565b600655505b949350505050565b3360008181526008602081815260408084208151608081018352815481526001820180548286019081526002840180549584019590955260038401805460ff8116151560608601529989529690955291869055908590559084905560ff199094169091555160065491929161112d919061192e565b6006558051611168906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169033906113d1565b51919050565b6000808361117d576000611185565b611185610942565b905082156111d3576111c26001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308961163d565b6111cc8187611941565b95506112eb565b604051632770a7eb60e21b8152336004820152602481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561123b57600080fd5b505af115801561124f573d6000803e3d6000fd5b505060405163150490ed60e31b8152600481018990528392507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063a824876890602401602060405180830381865afa1580156112ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112de91906118ff565b6112e89190611941565b95505b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137391906118ff565b86111561139357604051631e9acf1760e31b815260040160405180910390fd5b6113c76001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686886113d1565b5093949350505050565b6040516001600160a01b0383811660248301526044820183905261143091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061167c565b505050565b60008054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190611954565b6001600160a01b0316336001600160a01b0316146114da576040516282b42960e81b815260040160405180910390fd5b565b6000811561151f576115186001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684866113d1565b5082611636565b6040516319a948db60e21b8152600481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366a5236c90602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab91906118ff565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b15801561161a57600080fd5b505af115801561162e573d6000803e3d6000fd5b509293505050505b9392505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526116769186918216906323b872dd906084016113fe565b50505050565b60006116916001600160a01b038416836116e4565b905080516000141580156116b65750808060200190518101906116b49190611971565b155b1561143057604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b60606116368383600084600080856001600160a01b0316848660405161170a919061198e565b60006040518083038185875af1925050503d8060008114611747576040519150601f19603f3d011682016040523d82523d6000602084013e61174c565b606091505b509150915061175c868383611766565b9695505050505050565b60608261177b57611776826117c2565b611636565b815115801561179257506001600160a01b0384163b155b156117bb57604051639996b31560e01b81526001600160a01b03851660048201526024016116db565b5080611636565b8051156117d25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b03811681146117eb57600080fd5b6000806040838503121561181657600080fd5b8235611821816117ee565b946020939093013593505050565b60006020828403121561184157600080fd5b8135611636816117ee565b60006020828403121561185e57600080fd5b5035919050565b80151581146117eb57600080fd5b6000806040838503121561188657600080fd5b8235611891816117ee565b915060208301356118a181611865565b809150509250929050565b600080600080608085870312156118c257600080fd5b8435935060208501356118d4816117ee565b925060408501356118e481611865565b915060608501356118f481611865565b939692955090935050565b60006020828403121561191157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561066557610665611918565b8082018082111561066557610665611918565b60006020828403121561196657600080fd5b8151611636816117ee565b60006020828403121561198357600080fd5b815161163681611865565b6000825160005b818110156119af5760208186018101518583015201611995565b50600092019182525091905056fea2646970667358221220ee58387464b841fb2bfac257ce88b6c66ee7add0caab098dc415f091097f94ea64736f6c63430008140033","sourceMap":"370:5936:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;528:29;;;;;;;;-1:-1:-1;;;;;178:32:130;;;160:51;;148:2;133:18;528:29:89;;;;;;;;5777:133;;;:::i;:::-;;;368:25:130;;;356:2;341:18;5777:133:89;222:177:130;5672:99:89;;;:::i;4374:261::-;;;;;;:::i;:::-;;:::i;563:29::-;;;;;760:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1337:25:130;;;1393:2;1378:18;;1371:34;;;;1421:18;;;1414:34;1491:14;1484:22;1479:2;1464:18;;1457:50;1324:3;1309:19;760:43:89;1112:401:130;5352:154:89;;;;;;:::i;:::-;;:::i;:::-;;1323:95;;;:::i;:::-;;;;;;1731:13:130;;1713:32;;1801:4;1789:17;;;1783:24;1761:20;;;1754:54;1864:4;1852:17;;;1846:24;1824:20;;;1817:54;1927:4;1915:17;;;1909:24;1887:20;;;1880:54;;;;1700:3;1685:19;;1518:422;650:181:116;;;;;;:::i;:::-;;:::i;634:18:89:-;;;;;;;;;;;;;;;;;;;;2176:25:130;;;2232:2;2217:18;;2210:34;;;;2260:18;;;2253:34;2318:2;2303:18;;2296:34;2163:3;2148:19;634:18:89;1945:391:130;5512:154:89;;;;;;:::i;:::-;;:::i;2501:504::-;;;;;;:::i;:::-;;:::i;4641:705::-;;;:::i;4092:276::-;;;;;;:::i;:::-;;:::i;224:32:116:-;;;;;-1:-1:-1;;;;;224:32:116;;;728:26:89;;;;;-1:-1:-1;;;;;728:26:89;;;1424:121;;;;;;:::i;:::-;;:::i;:::-;;;;;;3482:13:130;;3464:32;;3552:4;3540:17;;;3534:24;3512:20;;;3505:54;3615:4;3603:17;;;3597:24;3575:20;;;3568:54;3692:4;3680:17;;;3674:24;3667:32;3660:40;3638:20;;;3631:70;;;;3451:3;3436:19;;3269:438;1551:944:89;;;;;;:::i;:::-;;:::i;659:27::-;;;;;;598:29;;;;;3011:300;;;:::i;692:29::-;;;;;;3438:648;;;;;;:::i;:::-;;:::i;3317:115::-;;3409:10;3398:22;;;;:10;:22;;;;;:27;;;;-1:-1:-1;;3367:58:89;;3398:27;;;;3397:28;3367:58;;;3317:115;5777:133;5888:14;;5859:44;;-1:-1:-1;;;5859:44:89;;5833:7;;-1:-1:-1;;;;;5865:4:89;5859:28;;;;:44;;;;368:25:130;;;356:2;341:18;;222:177;5859:44:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5852:51;;5777:133;:::o;5672:99::-;5719:7;5751:4;-1:-1:-1;;;;;5745:17:89;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4374:261;4494:36;;-1:-1:-1;;;4494:36:89;;4511:10;4494:36;;;4666:51:130;4733:18;;;4726:34;;;4467:15:89;;4500:4;-1:-1:-1;;;;;4494:16:89;;;;4639:18:130;;4494:36:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4550:31:89;;-1:-1:-1;;;4550:31:89;;;;;368:25:130;;;4556:4:89;-1:-1:-1;;;;;4550:23:89;;-1:-1:-1;4550:23:89;;-1:-1:-1;341:18:130;;4550:31:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4540:41;-1:-1:-1;4591:37:89;-1:-1:-1;;;;;4597:4:89;4591:24;4616:2;4540:41;4591:24;:37::i;:::-;4374:261;;;;:::o;5352:154::-;429:15:116;:13;:15::i;:::-;5430:11:89::1;:26:::0;;-1:-1:-1;;;;;;5430:26:89::1;-1:-1:-1::0;;;;;5430:26:89;::::1;::::0;;::::1;::::0;;;5471:28:::1;::::0;160:51:130;;;5471:28:89::1;::::0;148:2:130;133:18;5471:28:89::1;;;;;;;;5352:154:::0;:::o;1323:95::-;1375:12;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1375:12:89;-1:-1:-1;1399:12:89;;;;;;;;1406:5;1399:12;;;;;;;;;;;;;;;;;;;;;;;;;1323:95::o;650:181:116:-;713:15;:13;:15::i;:::-;738:9;:41;;-1:-1:-1;;;;;;738:41:116;-1:-1:-1;;;;;738:41:116;;;;;;;;794:30;;160:51:130;;;794:30:116;;148:2:130;133:18;794:30:116;14:203:130;5512:154:89;429:15:116;:13;:15::i;:::-;5592:12:89::1;:28:::0;;;5635:24:::1;::::0;368:25:130;;;5635:24:89::1;::::0;356:2:130;341:18;5635:24:89::1;222:177:130::0;2501:504:89;-1:-1:-1;;;;;2621:14:89;;2568:21;2621:14;;;:10;:14;;;;;;;;2601:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2645:94;;-1:-1:-1;;;;;2679:16:89;;2685:10;2679:16;2675:53;;2704:24;;-1:-1:-1;;;2704:24:89;;;;;;;;;;;2675:53;2769:11;;;;2753:12;;:27;;;;:47;;-1:-1:-1;2784:11:89;;;;:16;;2753:47;2749:250;;;-1:-1:-1;;;;;2823:14:89;;;;;;:10;:14;;;;;;;2816:21;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2816:21:89;;;2885:11;;;2868:14;;:28;;2885:11;2868:28;:::i;:::-;2851:14;:45;2961:11;;;;2932:41;;-1:-1:-1;;;2932:41:89;;2926:62;;-1:-1:-1;;;;;2938:4:89;2932:28;;;;:41;;;;368:25:130;;;356:2;341:18;;222:177;2932:41:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2975:2;2979:8;2926:5;:62::i;:::-;2910:78;;2749:250;2591:414;2501:504;;;;:::o;4641:705::-;4684:14;4727:15;4714:5;:9;;;:28;4710:630;;4777:16;;;4795:12;;4758:50;;-1:-1:-1;;;4758:50:89;;;;;5210:25:130;;;;5251:18;;;5244:34;4764:4:89;-1:-1:-1;;;;;4758:18:89;;;;5183::130;;4758:50:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4875:5:89;:12;;4863:9;;;:24;;;4851:36;;4863:9;4905:14;;;;;;;4952:11;;-1:-1:-1;;;;;4952:11:89;:25;4948:171;;5010:11;;;;;;;;;-1:-1:-1;;;;;5010:11:89;-1:-1:-1;;;;;4997:36:89;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5075:11;;;;;;;;;-1:-1:-1;;;;;5075:11:89;-1:-1:-1;;;;;5062:40:89;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5053:51;;4948:171;5151:37;;-1:-1:-1;;;5151:37:89;;5182:4;5151:37;;;160:51:130;5133:15:89;;5158:4;-1:-1:-1;;;;;5151:22:89;;;;133:18:130;;5151:37:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5133:55;;5202:13;5252:6;5224:4;-1:-1:-1;;;;;5218:29:89;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;;:::i;:::-;5202:56;;5302:5;5292:7;:15;:37;;5328:1;5292:37;;;5310:15;5320:5;5310:7;:15;:::i;:::-;5273:16;:56;-1:-1:-1;;4710:630:89;4641:705;:::o;4092:276::-;4183:15;4210:63;-1:-1:-1;;;;;4216:4:89;4210:28;4239:10;4259:4;4266:6;4210:28;:63::i;:::-;4293:29;;-1:-1:-1;;;4293:29:89;;;;;368:25:130;;;4299:4:89;-1:-1:-1;;;;;4293:21:89;;;;341:18:130;;4293:29:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4332;;-1:-1:-1;;;4332:29:89;;-1:-1:-1;;;;;4684:32:130;;;4332:29:89;;;4666:51:130;4733:18;;;4726:34;;;4283:39:89;;-1:-1:-1;4338:4:89;4332:16;;;;;;4639:18:130;;4332:29:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4092:276;;;;:::o;1424:121::-;1492:12;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1492:12:89;-1:-1:-1;;;;;;1523:15:89;;;;;:10;:15;;;;;;;;;1516:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:121::o;1551:944::-;1688:20;1720:64;-1:-1:-1;;;;;1727:4:89;1720:29;1750:10;1770:4;1777:6;1720:29;:64::i;:::-;1818:8;:6;:8::i;:::-;1809:17;;:6;:17;:::i;:::-;1794:32;;1840:7;:28;;;;-1:-1:-1;1851:12:89;;:17;1840:28;1836:653;;;1899:33;1905:12;1919:2;1923:8;1899:5;:33::i;:::-;1884:48;;1836:653;;;-1:-1:-1;;;;;1983:14:89;;1963:17;1983:14;;;:10;:14;;;;;;;;;1963:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2011:102;;-1:-1:-1;;;;;2049:16:89;;2055:10;2049:16;2045:53;;2074:24;;-1:-1:-1;;;2074:24:89;;;;;;;;;;;2045:53;2144:243;;;;;;;;2192:12;2177:4;:12;;;:27;;;;:::i;:::-;2144:243;;;;2250:4;-1:-1:-1;;;;;2244:28:89;;2273:12;2244:42;;;;;;;;;;;;;368:25:130;;356:2;341:18;;222:177;2244:42:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2230:4;:11;;;:56;;;;:::i;:::-;2144:243;;;;2327:12;;2312:5;:12;;;:27;;;;:::i;:::-;2144:243;;2363:9;;;;;2144:243;;;;;;;-1:-1:-1;;;;;2127:14:89;;;-1:-1:-1;2127:14:89;;;:10;:14;;-1:-1:-1;2127:14:89;;;;:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2127:260:89;;;;;;;;;;;2436:42;;-1:-1:-1;;;2436:42:89;;;;;368:25:130;;;2442:4:89;2436:28;;;;;;341:18:130;;2436:42:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2419:14;;:59;;;;:::i;:::-;2402:14;:76;-1:-1:-1;1836:653:89;1551:944;;;;;;:::o;3011:300::-;3107:10;3057:7;3096:22;;;:10;:22;;;;;;;;3076:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3135:22;;;;;;;3128:29;;;;;;;;;;;;-1:-1:-1;;3128:29:89;;;;;;3202:11;3185:14;;3057:7;;3076:42;3185:28;;3202:11;3185:28;:::i;:::-;3168:14;:45;3262:12;;3224:51;;-1:-1:-1;;;;;3231:4:89;3224:25;;3250:10;;3224:25;:51::i;:::-;3292:12;;3011:300;-1:-1:-1;3011:300:89:o;3438:648::-;3579:7;3598:14;3615:9;:24;;3638:1;3615:24;;;3627:8;:6;:8::i;:::-;3598:41;;3653:8;3649:270;;;3677:63;-1:-1:-1;;;;;3683:4:89;3677:28;3706:10;3726:4;3733:6;3677:28;:63::i;:::-;3763:15;3772:6;3763;:15;:::i;:::-;3754:24;;3649:270;;;3809:36;;-1:-1:-1;;;3809:36:89;;3826:10;3809:36;;;4666:51:130;4733:18;;;4726:34;;;3815:4:89;-1:-1:-1;;;;;3809:16:89;;;;4639:18:130;;3809:36:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3868:31:89;;-1:-1:-1;;;3868:31:89;;;;;368:25:130;;;3902:6:89;;-1:-1:-1;3874:4:89;-1:-1:-1;;;;;3868:23:89;;-1:-1:-1;3868:23:89;;341:18:130;;3868:31:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;;:::i;:::-;3859:49;;3649:270;3942:37;;-1:-1:-1;;;3942:37:89;;3973:4;3942:37;;;160:51:130;3949:4:89;-1:-1:-1;;;;;3942:22:89;;;;133:18:130;;3942:37:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3933:6;:46;3929:80;;;3988:21;;-1:-1:-1;;;3988:21:89;;;;;;;;;;;3929:80;4019:37;-1:-1:-1;;;;;4026:4:89;4019:25;4045:2;4049:6;4019:25;:37::i;:::-;-1:-1:-1;4073:6:89;;3438:648;-1:-1:-1;;;;3438:648:89:o;1303:160:27:-;1412:43;;-1:-1:-1;;;;;4684:32:130;;;1412:43:27;;;4666:51:130;4733:18;;;4726:34;;;1385:71:27;;1405:5;;1427:14;;;;;4639:18:130;;1412:43:27;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1412:43:27;;;;;;;;;;;1385:19;:71::i;:::-;1303:160;;;:::o;837:117:116:-;904:9;;;;;;;;-1:-1:-1;;;;;904:9:116;-1:-1:-1;;;;;904:18:116;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;890:34:116;:10;-1:-1:-1;;;;;890:34:116;;886:61;;933:14;;-1:-1:-1;;;933:14:116;;;;;;;;;;;886:61;837:117::o;5916:388:89:-;6022:7;6045:8;6041:257;;;6069:36;-1:-1:-1;;;;;6075:4:89;6069:24;6094:2;6098:6;6069:24;:36::i;:::-;-1:-1:-1;6126:6:89;6119:13;;6041:257;6183:29;;-1:-1:-1;;;6183:29:89;;;;;368:25:130;;;6163:17:89;;6189:4;-1:-1:-1;;;;;6183:21:89;;;;341:18:130;;6183:29:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6226:31;;-1:-1:-1;;;6226:31:89;;-1:-1:-1;;;;;4684:32:130;;;6226:31:89;;;4666:51:130;4733:18;;;4726:34;;;6163:49:89;;-1:-1:-1;6232:4:89;6226:16;;;;;;4639:18:130;;6226:31:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6278:9:89;;-1:-1:-1;;;;6041:257:89;5916:388;;;;;:::o;1702:188:27:-;1829:53;;-1:-1:-1;;;;;5933:15:130;;;1829:53:27;;;5915:34:130;5985:15;;;5965:18;;;5958:43;6017:18;;;6010:34;;;1802:81:27;;1822:5;;1844:18;;;;;5850::130;;1829:53:27;5675:375:130;1802:81:27;1702:188;;;;:::o;4059:629::-;4478:23;4504:33;-1:-1:-1;;;;;4504:27:27;;4532:4;4504:27;:33::i;:::-;4478:59;;4551:10;:17;4572:1;4551:22;;:57;;;;;4589:10;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;4547:135;;;4631:40;;-1:-1:-1;;;4631:40:27;;-1:-1:-1;;;;;178:32:130;;4631:40:27;;;160:51:130;133:18;;4631:40:27;;;;;;;;2705:151:30;2780:12;2811:38;2833:6;2841:4;2847:1;2780:12;3421;3435:23;3462:6;-1:-1:-1;;;;;3462:11:30;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;3180:392;-1:-1:-1;;;;;;3180:392:30:o;4625:582::-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:30;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:30;;-1:-1:-1;;;;;178:32:130;;5121:24:30;;;160:51:130;133:18;;5121:24:30;14:203:130;5041:119:30;-1:-1:-1;5180:10:30;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:30;;;;;;;;;;;5870:383;5743:516;:::o;404:131:130:-;-1:-1:-1;;;;;479:31:130;;469:42;;459:70;;525:1;522;515:12;540:315;608:6;616;669:2;657:9;648:7;644:23;640:32;637:52;;;685:1;682;675:12;637:52;724:9;711:23;743:31;768:5;743:31;:::i;:::-;793:5;845:2;830:18;;;;817:32;;-1:-1:-1;;;540:315:130:o;860:247::-;919:6;972:2;960:9;951:7;947:23;943:32;940:52;;;988:1;985;978:12;940:52;1027:9;1014:23;1046:31;1071:5;1046:31;:::i;2341:180::-;2400:6;2453:2;2441:9;2432:7;2428:23;2424:32;2421:52;;;2469:1;2466;2459:12;2421:52;-1:-1:-1;2492:23:130;;2341:180;-1:-1:-1;2341:180:130:o;2526:118::-;2612:5;2605:13;2598:21;2591:5;2588:32;2578:60;;2634:1;2631;2624:12;2649:382;2714:6;2722;2775:2;2763:9;2754:7;2750:23;2746:32;2743:52;;;2791:1;2788;2781:12;2743:52;2830:9;2817:23;2849:31;2874:5;2849:31;:::i;:::-;2899:5;-1:-1:-1;2956:2:130;2941:18;;2928:32;2969:30;2928:32;2969:30;:::i;:::-;3018:7;3008:17;;;2649:382;;;;;:::o;3712:586::-;3792:6;3800;3808;3816;3869:3;3857:9;3848:7;3844:23;3840:33;3837:53;;;3886:1;3883;3876:12;3837:53;3922:9;3909:23;3899:33;;3982:2;3971:9;3967:18;3954:32;3995:31;4020:5;3995:31;:::i;:::-;4045:5;-1:-1:-1;4102:2:130;4087:18;;4074:32;4115:30;4074:32;4115:30;:::i;:::-;4164:7;-1:-1:-1;4223:2:130;4208:18;;4195:32;4236:30;4195:32;4236:30;:::i;:::-;3712:586;;;;-1:-1:-1;3712:586:130;;-1:-1:-1;;3712:586:130:o;4303:184::-;4373:6;4426:2;4414:9;4405:7;4401:23;4397:32;4394:52;;;4442:1;4439;4432:12;4394:52;-1:-1:-1;4465:16:130;;4303:184;-1:-1:-1;4303:184:130:o;4771:127::-;4832:10;4827:3;4823:20;4820:1;4813:31;4863:4;4860:1;4853:15;4887:4;4884:1;4877:15;4903:128;4970:9;;;4991:11;;;4988:37;;;5005:18;;:::i;5289:125::-;5354:9;;;5375:10;;;5372:36;;;5388:18;;:::i;5419:251::-;5489:6;5542:2;5530:9;5521:7;5517:23;5513:32;5510:52;;;5558:1;5555;5548:12;5510:52;5590:9;5584:16;5609:31;5634:5;5609:31;:::i;6055:245::-;6122:6;6175:2;6163:9;6154:7;6150:23;6146:32;6143:52;;;6191:1;6188;6181:12;6143:52;6223:9;6217:16;6242:28;6264:5;6242:28;:::i;6305:412::-;6434:3;6472:6;6466:13;6497:1;6507:129;6521:6;6518:1;6515:13;6507:129;;;6619:4;6603:14;;;6599:25;;6593:32;6580:11;;;6573:53;6536:12;6507:129;;;-1:-1:-1;6691:1:130;6655:16;;6680:13;;;-1:-1:-1;6655:16:130;6305:412;-1:-1:-1;6305:412:130:o","linkReferences":{},"immutableReferences":{"56331":[{"start":354,"length":32},{"start":2827,"length":32},{"start":3598,"length":32},{"start":4416,"length":32},{"start":4864,"length":32},{"start":5024,"length":32}],"56333":[{"start":471,"length":32},{"start":1094,"length":32},{"start":1223,"length":32},{"start":1598,"length":32},{"start":2233,"length":32},{"start":2418,"length":32},{"start":2949,"length":32},{"start":3137,"length":32},{"start":3855,"length":32},{"start":4145,"length":32},{"start":4506,"length":32},{"start":5361,"length":32}],"56335":[{"start":956,"length":32},{"start":1346,"length":32},{"start":1466,"length":32},{"start":3199,"length":32},{"start":3355,"length":32},{"start":4591,"length":32},{"start":4714,"length":32},{"start":5432,"length":32},{"start":5588,"length":32}]}},"methodIdentifiers":{"authority()":"bf7e214f","claim(address,bool)":"92fd2daf","distributor()":"bfe10928","epoch()":"900cf0cf","forfeit()":"f3d86e4a","ftso()":"0da0c022","getEpoch()":"757991a8","getWarmupInfo(address)":"cad52dfe","ghst()":"ef2374f2","index()":"2986c0e5","rebase()":"af14052c","setAuthority(address)":"7a9e5e4b","setDistributor(address)":"75619ab5","setWarmupLength(uint256)":"9238d592","sharesInWarmup()":"f63418f3","stake(uint256,address,bool,bool)":"ccd2a5a1","stnk()":"45c57eb5","supplyInWarmup()":"20138641","toggleLock()":"ff9413d8","unstake(uint256,address,bool,bool)":"fe07c564","unwrap(address,uint256)":"39f47693","warmupInfo(address)":"6746f4c2","warmupPeriod()":"deac361a","wrap(address,uint256)":"bf376c7a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ftso\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stnk\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ghst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_epochLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_firstEpochNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_firstEpochTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_authority\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalClaimsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalDepositsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"DistributorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"warmup\",\"type\":\"uint256\"}],\"name\":\"WarmupSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"internalType\":\"contract IGhostAuthority\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isRebase\",\"type\":\"bool\"}],\"name\":\"claim\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"claimedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"distributor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"distribute\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forfeit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ftso\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpoch\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"distribute\",\"type\":\"uint256\"}],\"internalType\":\"struct IStaking.Epoch\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"getWarmupInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"lock\",\"type\":\"bool\"}],\"internalType\":\"struct IStaking.Claim\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ghst\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"index\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rebase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bounty\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_distributor\",\"type\":\"address\"}],\"name\":\"setDistributor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_warmupPeriod\",\"type\":\"uint256\"}],\"name\":\"setWarmupLength\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharesInWarmup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isRebase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isClaim\",\"type\":\"bool\"}],\"name\":\"stake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"returnAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stnk\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supplyInWarmup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"toggleLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isTrigger\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isRebase\",\"type\":\"bool\"}],\"name\":\"unstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"warmupInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"lock\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"warmupPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"wrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Staking.sol\":\"GhostStaking\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"src/Staking.sol\":{\"keccak256\":\"0x27813658533a083b5e0edcb7db783c7a27aff76897625f086cb48638f910819e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fbae1086777424623b016a04c62fd25206cb9b697e3b67dbdf1c072e4de47e0f\",\"dweb:/ipfs/QmbHYEfEjsQTPZGZ2xnCSLYNiT2j1CnnxBN6Pde78phcZ2\"]},\"src/interfaces/IDistributor.sol\":{\"keccak256\":\"0xbf2792d6b7e15997fcc6a935b5baa0510145877e59abdddabbeaa135080204a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://463500f87509ce555da5e905946f8ca920e633a5ac716daf45b34dba3d7015c3\",\"dweb:/ipfs/QmUaiwrBFLMt5amCdtEsQBrdV4Eu82PWwAwGu8obUx3bZF\"]},\"src/interfaces/IGHST.sol\":{\"keccak256\":\"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c\",\"dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG\"]},\"src/interfaces/IGhostAuthority.sol\":{\"keccak256\":\"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b\",\"dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd\"]},\"src/interfaces/ISTNK.sol\":{\"keccak256\":\"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b\",\"dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ\"]},\"src/interfaces/IStaking.sol\":{\"keccak256\":\"0xec99f7da7b07c78769cd3d35192568b24e3faa0fa1edcbf107c1af3c6070c7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71c04f0ed15f9f3051f825b38b5d8606d900670ffdeb25b0706c729868ca7947\",\"dweb:/ipfs/QmQDaR1n5bhmGRhTxZFMonBDiB5hiTfHrkaU3qiFF7STe3\"]},\"src/types/GhostAccessControlled.sol\":{\"keccak256\":\"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0\",\"dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_ftso","type":"address"},{"internalType":"address","name":"_stnk","type":"address"},{"internalType":"address","name":"_ghst","type":"address"},{"internalType":"uint256","name":"_epochLength","type":"uint256"},{"internalType":"uint256","name":"_firstEpochNumber","type":"uint256"},{"internalType":"uint256","name":"_firstEpochTime","type":"uint256"},{"internalType":"address","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"AddressInsufficientBalance"},{"inputs":[],"type":"error","name":"ExternalClaimsLocked"},{"inputs":[],"type":"error","name":"ExternalDepositsLocked"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InsufficientBalance"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[{"internalType":"address","name":"authority","type":"address","indexed":false}],"type":"event","name":"AuthorityUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"distributor","type":"address","indexed":false}],"type":"event","name":"DistributorSet","anonymous":false},{"inputs":[{"internalType":"uint256","name":"warmup","type":"uint256","indexed":false}],"type":"event","name":"WarmupSet","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"authority","outputs":[{"internalType":"contract IGhostAuthority","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"isRebase","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"claim","outputs":[{"internalType":"uint256","name":"claimedAmount","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"epoch","outputs":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"distribute","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"forfeit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"ftso","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpoch","outputs":[{"internalType":"struct IStaking.Epoch","name":"","type":"tuple","components":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"distribute","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"stateMutability":"view","type":"function","name":"getWarmupInfo","outputs":[{"internalType":"struct IStaking.Claim","name":"","type":"tuple","components":[{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"lock","type":"bool"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"ghst","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rebase","outputs":[{"internalType":"uint256","name":"bounty","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newAuthority","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAuthority"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setDistributor"},{"inputs":[{"internalType":"uint256","name":"_warmupPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setWarmupLength"},{"inputs":[],"stateMutability":"view","type":"function","name":"sharesInWarmup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"isRebase","type":"bool"},{"internalType":"bool","name":"isClaim","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"stake","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"stnk","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"supplyInWarmup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"toggleLock"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"isTrigger","type":"bool"},{"internalType":"bool","name":"isRebase","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"unstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unwrap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"warmupInfo","outputs":[{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"lock","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"warmupPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"wrap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Staking.sol":"GhostStaking"},"evmVersion":"paris","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"src/Staking.sol":{"keccak256":"0x27813658533a083b5e0edcb7db783c7a27aff76897625f086cb48638f910819e","urls":["bzz-raw://fbae1086777424623b016a04c62fd25206cb9b697e3b67dbdf1c072e4de47e0f","dweb:/ipfs/QmbHYEfEjsQTPZGZ2xnCSLYNiT2j1CnnxBN6Pde78phcZ2"],"license":"MIT"},"src/interfaces/IDistributor.sol":{"keccak256":"0xbf2792d6b7e15997fcc6a935b5baa0510145877e59abdddabbeaa135080204a8","urls":["bzz-raw://463500f87509ce555da5e905946f8ca920e633a5ac716daf45b34dba3d7015c3","dweb:/ipfs/QmUaiwrBFLMt5amCdtEsQBrdV4Eu82PWwAwGu8obUx3bZF"],"license":"MIT"},"src/interfaces/IGHST.sol":{"keccak256":"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89","urls":["bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c","dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG"],"license":"MIT"},"src/interfaces/IGhostAuthority.sol":{"keccak256":"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b","urls":["bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b","dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd"],"license":"MIT"},"src/interfaces/ISTNK.sol":{"keccak256":"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf","urls":["bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b","dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ"],"license":"MIT"},"src/interfaces/IStaking.sol":{"keccak256":"0xec99f7da7b07c78769cd3d35192568b24e3faa0fa1edcbf107c1af3c6070c7ff","urls":["bzz-raw://71c04f0ed15f9f3051f825b38b5d8606d900670ffdeb25b0706c729868ca7947","dweb:/ipfs/QmQDaR1n5bhmGRhTxZFMonBDiB5hiTfHrkaU3qiFF7STe3"],"license":"MIT"},"src/types/GhostAccessControlled.sol":{"keccak256":"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d","urls":["bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0","dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW"],"license":"MIT"}},"version":1},"id":89} \ No newline at end of file diff --git a/src/abi/GhostTreasury.json b/src/abi/GhostTreasury.json new file mode 100644 index 0000000..60b10e0 --- /dev/null +++ b/src/abi/GhostTreasury.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_ftso","type":"address","internalType":"address"},{"name":"_timelock","type":"uint256","internalType":"uint256"},{"name":"_authority","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"auditReserves","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"authority","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IGhostAuthority"}],"stateMutability":"view"},{"type":"function","name":"baseSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"blocksNeededForQueue","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bondCalculator","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"debtLimit","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"profit","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"send","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"disable","inputs":[{"name":"status","type":"uint8","internalType":"enum ITreasury.STATUS"},{"name":"toDisable","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"enable","inputs":[{"name":"status","type":"uint8","internalType":"enum ITreasury.STATUS"},{"name":"someAddress","type":"address","internalType":"address"},{"name":"calculatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"excessReserves","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"ftso","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ftsoDebt","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"incurDebt","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"indexInRegistry","inputs":[{"name":"someAddress","type":"address","internalType":"address"},{"name":"status","type":"uint8","internalType":"enum ITreasury.STATUS"}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"manage","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nullify","inputs":[{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"onChainGovernanceTimelock","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"permissionQueue","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"managing","type":"uint8","internalType":"enum ITreasury.STATUS"},{"name":"toPermit","type":"address","internalType":"address"},{"name":"calculator","type":"address","internalType":"address"},{"name":"timelockEnd","type":"uint256","internalType":"uint256"},{"name":"nullify","type":"bool","internalType":"bool"},{"name":"executed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"permissions","inputs":[{"name":"","type":"uint8","internalType":"enum ITreasury.STATUS"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"queueTimelock","inputs":[{"name":"status","type":"uint8","internalType":"enum ITreasury.STATUS"},{"name":"someAddress","type":"address","internalType":"address"},{"name":"calculatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registry","inputs":[{"name":"","type":"uint8","internalType":"enum ITreasury.STATUS"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"repayDebtWithFtso","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"repayDebtWithReserves","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAuthority","inputs":[{"name":"newAuthority","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDebtLimit","inputs":[{"name":"who","type":"address","internalType":"address"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stnk","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"timelockEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"toggleTimelock","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tokenValue","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalDebt","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalReserves","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AuthorityUpdated","inputs":[{"name":"authority","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"CreateDebt","inputs":[{"name":"debtor","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Deposit","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Managed","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Minted","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PermissionQueued","inputs":[{"name":"status","type":"uint8","indexed":true,"internalType":"enum ITreasury.STATUS"},{"name":"queued","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Permissioned","inputs":[{"name":"addr","type":"address","indexed":false,"internalType":"address"},{"name":"status","type":"uint8","indexed":true,"internalType":"enum ITreasury.STATUS"},{"name":"result","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"RepayDebt","inputs":[{"name":"debtor","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ReservesAudited","inputs":[{"name":"totalReserves","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ActionExecuted","inputs":[]},{"type":"error","name":"ActionNullified","inputs":[]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressInsufficientBalance","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"AlreadyInitialized","inputs":[]},{"type":"error","name":"EmptyAddress","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InsufficientReserves","inputs":[]},{"type":"error","name":"InvalidToken","inputs":[]},{"type":"error","name":"NotAccepted","inputs":[]},{"type":"error","name":"NotApproved","inputs":[]},{"type":"error","name":"OnlyQueueTimelock","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"TimelockDisabled","inputs":[]},{"type":"error","name":"TimelockNotComplete","inputs":[]},{"type":"error","name":"TreasuryExceeds","inputs":[]},{"type":"error","name":"Unauthorized","inputs":[]}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5060405162004b2138038062004b21833981810160405281019062000036919062000192565b80805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad81604051620000a79190620001fc565b60405180910390a1508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508160a0818152505050505062000217565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200012482620000f9565b9050919050565b620001368162000118565b811462000141575f80fd5b50565b5f8151905062000154816200012b565b92915050565b5f819050919050565b6200016e816200015a565b811462000179575f80fd5b50565b5f815190506200018c8162000163565b92915050565b5f805f60608486031215620001ac57620001ab620000f5565b5b5f620001bb8682870162000144565b9350506020620001ce868287016200017c565b9250506040620001e18682870162000144565b9150509250925092565b620001f68162000118565b82525050565b5f602082019050620002115f830184620001eb565b92915050565b60805160a05161488d620002945f395f81816112e801528181611374015281816128ef0152612f7801525f8181610a3801528181610ae101528181610df801528181611083015281816111aa01528181611b0001528181611fa801528181612413015281816124660152818161263e0152613324015261488d5ff3fe608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063857e62da11610118578063bf7e214f116100ab578063e8da0ad81161007a578063e8da0ad8146105c8578063f1821783146105d2578063f3fef3a314610602578063fc7b9c181461061e578063fe0d94c11461063c57610204565b8063bf7e214f14610554578063d07f390f14610572578063dd9e202814610590578063e4e33ef8146105ac57610204565b80639edd8d43116100e75780639edd8d43146104cc578063a44b8287146104e8578063b320f6a914610518578063b39df88e1461053657610204565b8063857e62da14610441578063860f50481461045f5780638f840ddd1461047d57806393988b531461049b57610204565b8063330dd3451161019b578063529918311161016a57806352991831146103a15780635619004b146103bd57806371a45c95146103ed578063724000c1146104095780637a9e5e4b1461042557610204565b8063330dd3451461030257806340c10f191461033257806345c57eb51461034e578063503edcf01461036c57610204565b80631af4da70116101d75780631af4da70146102905780631b3200b9146102c05780631d6d5f05146102dc5780632b7ce500146102f857610204565b80630b0eee30146102085780630c3513a8146102245780630da0c022146102425780630efe6a8b14610260575b5f80fd5b610222600480360381019061021d9190613eea565b610658565b005b61022c610a32565b6040516102399190613f37565b60405180910390f35b61024a610adf565b6040516102579190613f5f565b60405180910390f35b61027a60048036038101906102759190613f78565b610b03565b6040516102879190613f37565b60405180910390f35b6102aa60048036038101906102a59190613fc8565b610eea565b6040516102b79190613f5f565b60405180910390f35b6102da60048036038101906102d59190613ff3565b610f1a565b005b6102f660048036038101906102f19190614041565b611232565b005b610300611596565b005b61031c60048036038101906103179190614091565b6119df565b60405161032991906140e9565b60405180910390f35b61034c60048036038101906103479190613eea565b611a09565b005b610356611bef565b6040516103639190613f5f565b60405180910390f35b61038660048036038101906103819190613ff3565b611c14565b60405161039896959493929190614175565b60405180910390f35b6103bb60048036038101906103b69190614091565b611cbe565b005b6103d760048036038101906103d29190613fc8565b611f4a565b6040516103e49190613f37565b60405180910390f35b61040760048036038101906104029190613ff3565b611f5f565b005b610423600480360381019061041e9190613eea565b611fa5565b005b61043f600480360381019061043a9190613fc8565b6125b1565b005b610449612632565b6040516104569190613f37565b60405180910390f35b610467612638565b6040516104749190613f37565b60405180910390f35b6104856126d8565b6040516104929190613f37565b60405180910390f35b6104b560048036038101906104b091906141d4565b6126de565b6040516104c3929190614212565b60405180910390f35b6104e660048036038101906104e19190613eea565b61281b565b005b61050260048036038101906104fd9190614239565b612869565b60405161050f9190613f5f565b60405180910390f35b6105206128b1565b60405161052d91906140e9565b60405180910390f35b61053e6128c4565b60405161054b9190613f37565b60405180910390f35b61055c6128ca565b60405161056991906142d2565b60405180910390f35b61057a6128ed565b6040516105879190613f37565b60405180910390f35b6105aa60048036038101906105a59190613eea565b612911565b005b6105c660048036038101906105c19190614041565b612bd2565b005b6105d0612f1e565b005b6105ec60048036038101906105e79190613eea565b612fb5565b6040516105f99190613f37565b60405180910390f35b61061c60048036038101906106179190613eea565b6131ad565b005b61062661343e565b6040516106339190613f37565b60405180910390f35b61065660048036038101906106519190613ff3565b613444565b005b60085f6005600a81111561066f5761066e614102565b5b600a81111561068157610680614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156107945760085f6006600a8111156106f2576106f1614102565b5b600a81111561070457610703614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661078f576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610849565b60085f6003600a8111156107ab576107aa614102565b5b600a8111156107bd576107bc614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610848576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60085f6002600a8111156108605761085f614102565b5b600a81111561087257610871614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061094c575060085f6005600a8111156108e4576108e3614102565b5b600a8111156108f6576108f5614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156109b5575f61095c8383612fb5565b9050610966610a32565b81111561099f576040517f945e926800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001546109ad9190614318565b600181905550505b6109e033828473ffffffffffffffffffffffffffffffffffffffff16613a229092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fb4460e34f1e91c4fa28eb7fac4cbd88cf530ef54a67e1978cd5edd9f77033ead82604051610a269190613f37565b60405180910390a25050565b5f6002547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac3919061435f565b610acd9190614318565b600154610ada9190614318565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60085f6002600a811115610b1b57610b1a614102565b5b600a811115610b2d57610b2c614102565b5b81526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610c3f5760085f80600a811115610b9d57610b9c614102565b5b600a811115610baf57610bae614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610c3a576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dae565b60085f6005600a811115610c5657610c55614102565b5b600a811115610c6857610c67614102565b5b81526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610d7b5760085f6004600a811115610cd957610cd8614102565b5b600a811115610ceb57610cea614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610d76576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dad565b6040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610ddb3330858773ffffffffffffffffffffffffffffffffffffffff16613aa1909392919063ffffffff16565b5f610de68585612fb5565b90508281610df49190614318565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401610e5192919061438a565b5f604051808303815f87803b158015610e68575f80fd5b505af1158015610e7a573d5f803e3d5ffd5b5050505080600154610e8c91906143b1565b6001819055508473ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158583604051610eda9291906143e4565b60405180910390a2509392505050565b6009602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085f6007600a811115610f3157610f30614102565b5b600a811115610f4357610f42614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610fce576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f600a80811115610fe457610fe3614102565b5b600a811115610ff657610ff5614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611081576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b81526004016110dc92919061438a565b5f604051808303815f87803b1580156110f3575f80fd5b505af1158015611105573d5f803e3d5ffd5b5050505060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae5c6cd382335f6040518463ffffffff1660e01b81526004016111679392919061440b565b5f604051808303815f87803b15801561117e575f80fd5b505af1158015611190573d5f803e3d5ffd5b50505050806002546111a29190614318565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f30983846040516112279291906143e4565b60405180910390a350565b61123a613b23565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129f576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560149054906101000a900460ff166112e5576040517f821b910600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000004361131291906143b1565b90506003600a81111561132857611327614102565b5b84600a81111561133b5761133a614102565b5b148061136b57506006600a81111561135657611355614102565b5b84600a81111561136957611368614102565b5b145b156113ab5760027f000000000000000000000000000000000000000000000000000000000000000061139d9190614440565b436113a891906143b1565b90505b60066040518060c0016040528086600a8111156113cb576113ca614102565b5b81526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020015f151581526020015f1515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f015f6101000a81548160ff0219169083600a81111561146a57611469614102565b5b02179055506020820151815f0160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600201556080820151816003015f6101000a81548160ff02191690831515021790555060a08201518160030160016101000a81548160ff021916908315150217905550505083600a81111561155957611558614102565b5b7fc822ff41836a6dc998393c71843db8adcbbf01721f41b32389f6838ecb1ea9c8846040516115889190613f5f565b60405180910390a250505050565b61159e613b23565b5f8060075f6002600a8111156115b7576115b6614102565b5b600a8111156115c9576115c8614102565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561165357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161160a575b505050505090505f5b81518110156117a1575f82828151811061167957611678614481565b5b6020026020010151905060085f6002600a81111561169a57611699614102565b5b600a8111156116ac576116ab614102565b5b81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561179557611787818273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117439190613f5f565b602060405180830381865afa15801561175e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611782919061435f565b612fb5565b8461179291906143b1565b93505b8160010191505061165c565b5f60075f6005600a8111156117b9576117b8614102565b5b600a8111156117cb576117ca614102565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561185557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161180c575b505050505090505f91505b80518210156119a5575f81838151811061187d5761187c614481565b5b6020026020010151905060085f6005600a81111561189e5761189d614102565b5b600a8111156118b0576118af614102565b5b81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156119995761198b818273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119479190613f5f565b602060405180830381865afa158015611962573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611986919061435f565b612fb5565b8561199691906143b1565b94505b82600101925050611860565b83600181905550837fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446660405160405180910390a250505050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60085f6008600a811115611a2057611a1f614102565b5b600a811115611a3257611a31614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611abd576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ac5610a32565b811115611afe576040517f945e926800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401611b5992919061438a565b5f604051808303815f87803b158015611b70575f80fd5b505af1158015611b82573d5f803e3d5ffd5b505050508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f083604051611be39190613f37565b60405180910390a35050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60068181548110611c23575f80fd5b905f5260205f2090600402015f91509050805f015f9054906101000a900460ff1690805f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015f9054906101000a900460ff16908060030160019054906101000a900460ff16905086565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4a91906144c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611e3c57505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0c91906144c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611e73576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f84600a811115611e8a57611e89614102565b5b600a811115611e9c57611e9b614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555081600a811115611f0d57611f0c614102565b5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713825f604051611f3e9291906144ed565b60405180910390a25050565b600a602052805f5260405f205f915090505481565b611f67613b23565b600160068281548110611f7d57611f7c614481565b5b905f5260205f2090600402016003015f6101000a81548160ff02191690831515021790555050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120b45760085f600a8081111561200f5761200e614102565b5b600a81111561202157612020614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ac576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050612229565b60085f6007600a8111156120cb576120ca614102565b5b600a8111156120dd576120dc614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612168576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f6002600a81111561217f5761217e614102565b5b600a81111561219157612190614102565b5b81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661221c576040517f29d79a5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122268383612fb5565b90505b5f8103612262576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae5c6cd3823360016040518463ffffffff1660e01b81526004016122c19392919061440b565b5f604051808303815f87803b1580156122d8575f80fd5b505af11580156122ea573d5f803e3d5ffd5b50505050600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4ef1c4c336040518263ffffffff1660e01b81526004016123869190613f5f565b602060405180830381865afa1580156123a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c5919061435f565b11156123fd576040517fe8768c6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025461240b91906143b1565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612505577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b81526004016124bf92919061438a565b5f604051808303815f87803b1580156124d6575f80fd5b505af11580156124e8573d5f803e3d5ffd5b50505050806003546124fa91906143b1565b600381905550612545565b806001546125139190614318565b60018190555061254433838573ffffffffffffffffffffffffffffffffffffffff16613a229092919063ffffffff16565b5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d684846040516125a49291906143e4565b60405180910390a3505050565b6125b9613b23565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad816040516126279190613f5f565b60405180910390a150565b60035481565b5f6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c9919061435f565b6126d39190614318565b905090565b60015481565b5f805f60075f85600a8111156126f7576126f6614102565b5b600a81111561270957612708614102565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561279357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161274a575b505050505090505f5b815181101561280b578181815181106127b8576127b7614481565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361280057600181935093505050612814565b80600101905061279c565b5f809350935050505b9250929050565b612823613b23565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b6007602052815f5260405f208181548110612882575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b60045481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085f6007600a81111561292857612927614102565b5b600a81111561293a57612939614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166129c5576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f6002600a8111156129dc576129db614102565b5b600a8111156129ee576129ed614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612a79576040517f29d79a5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612aa63330838573ffffffffffffffffffffffffffffffffffffffff16613aa1909392919063ffffffff16565b5f612ab18383612fb5565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae5c6cd382335f6040518463ffffffff1660e01b8152600401612b119392919061440b565b5f604051808303815f87803b158015612b28575f80fd5b505af1158015612b3a573d5f803e3d5ffd5b5050505080600254612b4c9190614318565b60028190555080600154612b6091906143b1565b6001819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098484604051612bc59291906143e4565b60405180910390a3505050565b612bda613b23565b600560149054906101000a900460ff1615612c21576040517ff3cf77c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600a811115612c3557612c34614102565b5b83600a811115612c4857612c47614102565b5b03612c92578160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612ecc565b600160085f85600a811115612caa57612ca9614102565b5b600a811115612cbc57612cbb614102565b5b81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506005600a811115612d2e57612d2d614102565b5b83600a811115612d4157612d40614102565b5b03612dc2578060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5f612dcd83856126de565b50905080158015612e3157506005600a811115612ded57612dec614102565b5b84600a811115612e0057612dff614102565b5b1480612e3057506002600a811115612e1b57612e1a614102565b5b84600a811115612e2e57612e2d614102565b5b145b5b15612eca5760075f85600a811115612e4c57612e4b614102565b5b600a811115612e5e57612e5d614102565b5b81526020019081526020015f2083908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b82600a811115612edf57612ede614102565b5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713836001604051612f119291906144ed565b60405180910390a2505050565b612f26613b23565b5f600454118015612f3957504360045411155b15612f7457600560149054906101000a900460ff1615600560146101000a81548160ff0219169083151502179055505f600481905550612fb3565b60077f0000000000000000000000000000000000000000000000000000000000000000612fa19190614440565b43612fac91906143b1565b6004819055505b565b5f8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613023919061454a565b600a61302f91906146a4565b633b9aca008361303f9190614440565b613049919061471b565b905060085f6005600a81111561306257613061614102565b5b600a81111561307457613073614102565b5b81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156131a75760095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634249719f84846040518363ffffffff1660e01b815260040161316592919061438a565b602060405180830381865afa158015613180573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a4919061435f565b90505b92915050565b60085f6002600a8111156131c4576131c3614102565b5b600a8111156131d6576131d5614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613261576040517f29d79a5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f6001600a81111561327857613277614102565b5b600a81111561328a57613289614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613315576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6133208383612fb5565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161337d92919061438a565b5f604051808303815f87803b158015613394575f80fd5b505af11580156133a6573d5f803e3d5ffd5b50505050806001546133b89190614318565b6001819055506133e933838573ffffffffffffffffffffffffffffffffffffffff16613a229092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb83836040516134319291906143e4565b60405180910390a2505050565b60025481565b600560149054906101000a900460ff161561348b576040517f821b910600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600682815481106134a05761349f614481565b5b905f5260205f2090600402019050806003015f9054906101000a900460ff16156134f6576040517fe559cc4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060030160019054906101000a900460ff161561353f576040517f1371027400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b438160020154111561357d576040517f4add9d0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600a81111561359157613590614102565b5b815f015f9054906101000a900460ff16600a8111156135b3576135b2614102565b5b0361362057805f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613963565b600160085f835f015f9054906101000a900460ff16600a81111561364757613646614102565b5b600a81111561365957613658614102565b5b81526020019081526020015f205f835f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506005600a8111156136ee576136ed614102565b5b815f015f9054906101000a900460ff16600a8111156137105761370f614102565b5b036137d757806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660095f835f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5f613814825f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16835f015f9054906101000a900460ff166126de565b5090508015801561389657506005600a81111561383457613833614102565b5b825f015f9054906101000a900460ff16600a81111561385657613855614102565b5b148061389557506002600a81111561387157613870614102565b5b825f015f9054906101000a900460ff16600a81111561389357613892614102565b5b145b5b156139615760075f835f015f9054906101000a900460ff16600a8111156138c0576138bf614102565b5b600a8111156138d2576138d1614102565b5b81526020019081526020015f20825f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b60016006838154811061397957613978614481565b5b905f5260205f20906004020160030160016101000a81548160ff021916908315150217905550805f015f9054906101000a900460ff16600a8111156139c1576139c0614102565b5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713825f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001604051613a169291906144ed565b60405180910390a25050565b613a9c838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401613a5592919061438a565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c15565b505050565b613b1d848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613ad69392919061474b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c15565b50505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613baf91906144c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613c13576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f613c3f828473ffffffffffffffffffffffffffffffffffffffff16613caa90919063ffffffff16565b90505f815114158015613c63575080806020019051810190613c6191906147aa565b155b15613ca557826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401613c9c9190613f5f565b60405180910390fd5b505050565b6060613cb783835f613cbf565b905092915050565b606081471015613d0657306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401613cfd9190613f5f565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051613d2e9190614841565b5f6040518083038185875af1925050503d805f8114613d68576040519150601f19603f3d011682016040523d82523d5f602084013e613d6d565b606091505b5091509150613d7d868383613d88565b925050509392505050565b606082613d9d57613d9882613e15565b613e0d565b5f8251148015613dc357505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15613e0557836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401613dfc9190613f5f565b60405180910390fd5b819050613e0e565b5b9392505050565b5f81511115613e275780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613e8682613e5d565b9050919050565b613e9681613e7c565b8114613ea0575f80fd5b50565b5f81359050613eb181613e8d565b92915050565b5f819050919050565b613ec981613eb7565b8114613ed3575f80fd5b50565b5f81359050613ee481613ec0565b92915050565b5f8060408385031215613f0057613eff613e59565b5b5f613f0d85828601613ea3565b9250506020613f1e85828601613ed6565b9150509250929050565b613f3181613eb7565b82525050565b5f602082019050613f4a5f830184613f28565b92915050565b613f5981613e7c565b82525050565b5f602082019050613f725f830184613f50565b92915050565b5f805f60608486031215613f8f57613f8e613e59565b5b5f613f9c86828701613ea3565b9350506020613fad86828701613ed6565b9250506040613fbe86828701613ed6565b9150509250925092565b5f60208284031215613fdd57613fdc613e59565b5b5f613fea84828501613ea3565b91505092915050565b5f6020828403121561400857614007613e59565b5b5f61401584828501613ed6565b91505092915050565b600b811061402a575f80fd5b50565b5f8135905061403b8161401e565b92915050565b5f805f6060848603121561405857614057613e59565b5b5f6140658682870161402d565b935050602061407686828701613ea3565b925050604061408786828701613ea3565b9150509250925092565b5f80604083850312156140a7576140a6613e59565b5b5f6140b48582860161402d565b92505060206140c585828601613ea3565b9150509250929050565b5f8115159050919050565b6140e3816140cf565b82525050565b5f6020820190506140fc5f8301846140da565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b81106141405761413f614102565b5b50565b5f8190506141508261412f565b919050565b5f61415f82614143565b9050919050565b61416f81614155565b82525050565b5f60c0820190506141885f830189614166565b6141956020830188613f50565b6141a26040830187613f50565b6141af6060830186613f28565b6141bc60808301856140da565b6141c960a08301846140da565b979650505050505050565b5f80604083850312156141ea576141e9613e59565b5b5f6141f785828601613ea3565b92505060206142088582860161402d565b9150509250929050565b5f6040820190506142255f8301856140da565b6142326020830184613f28565b9392505050565b5f806040838503121561424f5761424e613e59565b5b5f61425c8582860161402d565b925050602061426d85828601613ed6565b9150509250929050565b5f819050919050565b5f61429a61429561429084613e5d565b614277565b613e5d565b9050919050565b5f6142ab82614280565b9050919050565b5f6142bc826142a1565b9050919050565b6142cc816142b2565b82525050565b5f6020820190506142e55f8301846142c3565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61432282613eb7565b915061432d83613eb7565b9250828203905081811115614345576143446142eb565b5b92915050565b5f8151905061435981613ec0565b92915050565b5f6020828403121561437457614373613e59565b5b5f6143818482850161434b565b91505092915050565b5f60408201905061439d5f830185613f50565b6143aa6020830184613f28565b9392505050565b5f6143bb82613eb7565b91506143c683613eb7565b92508282019050808211156143de576143dd6142eb565b5b92915050565b5f6040820190506143f75f830185613f28565b6144046020830184613f28565b9392505050565b5f60608201905061441e5f830186613f28565b61442b6020830185613f50565b61443860408301846140da565b949350505050565b5f61444a82613eb7565b915061445583613eb7565b925082820261446381613eb7565b9150828204841483151761447a576144796142eb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506144bc81613e8d565b92915050565b5f602082840312156144d7576144d6613e59565b5b5f6144e4848285016144ae565b91505092915050565b5f6040820190506145005f830185613f50565b61450d60208301846140da565b9392505050565b5f60ff82169050919050565b61452981614514565b8114614533575f80fd5b50565b5f8151905061454481614520565b92915050565b5f6020828403121561455f5761455e613e59565b5b5f61456c84828501614536565b91505092915050565b5f8160011c9050919050565b5f808291508390505b60018511156145ca578086048111156145a6576145a56142eb565b5b60018516156145b55780820291505b80810290506145c385614575565b945061458a565b94509492505050565b5f826145e2576001905061469d565b816145ef575f905061469d565b8160018114614605576002811461460f5761463e565b600191505061469d565b60ff841115614621576146206142eb565b5b8360020a915084821115614638576146376142eb565b5b5061469d565b5060208310610133831016604e8410600b84101617156146735782820a90508381111561466e5761466d6142eb565b5b61469d565b6146808484846001614581565b92509050818404811115614697576146966142eb565b5b81810290505b9392505050565b5f6146ae82613eb7565b91506146b983614514565b92506146e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846145d3565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61472582613eb7565b915061473083613eb7565b9250826147405761473f6146ee565b5b828204905092915050565b5f60608201905061475e5f830186613f50565b61476b6020830185613f50565b6147786040830184613f28565b949350505050565b614789816140cf565b8114614793575f80fd5b50565b5f815190506147a481614780565b92915050565b5f602082840312156147bf576147be613e59565b5b5f6147cc84828501614796565b91505092915050565b5f81519050919050565b5f81905092915050565b5f5b838110156148065780820151818401526020810190506147eb565b5f8484015250505050565b5f61481b826147d5565b61482581856147df565b93506148358185602086016147e9565b80840191505092915050565b5f61484c8284614811565b91508190509291505056fea2646970667358221220651162ba9193ae271df0523ae36b78b4fa66f08bc689950e21636e7293f71f5064736f6c63430008140033","sourceMap":"453:10978:94:-:0;;;1097:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1231:10;325::118;313:9;;:22;;;;;;;;;;;;;;;;;;350:37;375:10;350:37;;;;;;:::i;:::-;;;;;;;;263:131;1261:5:94::1;1254:12;;;;;;;;::::0;::::1;1299:9;1276:32;;;;::::0;::::1;1097:218:::0;;;453:10978;;88:117:133;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:77::-;882:7;911:5;900:16;;845:77;;;:::o;928:122::-;1001:24;1019:5;1001:24;:::i;:::-;994:5;991:35;981:63;;1040:1;1037;1030:12;981:63;928:122;:::o;1056:143::-;1113:5;1144:6;1138:13;1129:22;;1160:33;1187:5;1160:33;:::i;:::-;1056:143;;;;:::o;1205:663::-;1293:6;1301;1309;1358:2;1346:9;1337:7;1333:23;1329:32;1326:119;;;1364:79;;:::i;:::-;1326:119;1484:1;1509:64;1565:7;1556:6;1545:9;1541:22;1509:64;:::i;:::-;1499:74;;1455:128;1622:2;1648:64;1704:7;1695:6;1684:9;1680:22;1648:64;:::i;:::-;1638:74;;1593:129;1761:2;1787:64;1843:7;1834:6;1823:9;1819:22;1787:64;:::i;:::-;1777:74;;1732:129;1205:663;;;;;:::o;1874:118::-;1961:24;1979:5;1961:24;:::i;:::-;1956:3;1949:37;1874:118;;:::o;1998:222::-;2091:4;2129:2;2118:9;2114:18;2106:26;;2142:71;2210:1;2199:9;2195:17;2186:6;2142:71;:::i;:::-;1998:222;;;;:::o;453:10978:94:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063857e62da11610118578063bf7e214f116100ab578063e8da0ad81161007a578063e8da0ad8146105c8578063f1821783146105d2578063f3fef3a314610602578063fc7b9c181461061e578063fe0d94c11461063c57610204565b8063bf7e214f14610554578063d07f390f14610572578063dd9e202814610590578063e4e33ef8146105ac57610204565b80639edd8d43116100e75780639edd8d43146104cc578063a44b8287146104e8578063b320f6a914610518578063b39df88e1461053657610204565b8063857e62da14610441578063860f50481461045f5780638f840ddd1461047d57806393988b531461049b57610204565b8063330dd3451161019b578063529918311161016a57806352991831146103a15780635619004b146103bd57806371a45c95146103ed578063724000c1146104095780637a9e5e4b1461042557610204565b8063330dd3451461030257806340c10f191461033257806345c57eb51461034e578063503edcf01461036c57610204565b80631af4da70116101d75780631af4da70146102905780631b3200b9146102c05780631d6d5f05146102dc5780632b7ce500146102f857610204565b80630b0eee30146102085780630c3513a8146102245780630da0c022146102425780630efe6a8b14610260575b5f80fd5b610222600480360381019061021d9190613eea565b610658565b005b61022c610a32565b6040516102399190613f37565b60405180910390f35b61024a610adf565b6040516102579190613f5f565b60405180910390f35b61027a60048036038101906102759190613f78565b610b03565b6040516102879190613f37565b60405180910390f35b6102aa60048036038101906102a59190613fc8565b610eea565b6040516102b79190613f5f565b60405180910390f35b6102da60048036038101906102d59190613ff3565b610f1a565b005b6102f660048036038101906102f19190614041565b611232565b005b610300611596565b005b61031c60048036038101906103179190614091565b6119df565b60405161032991906140e9565b60405180910390f35b61034c60048036038101906103479190613eea565b611a09565b005b610356611bef565b6040516103639190613f5f565b60405180910390f35b61038660048036038101906103819190613ff3565b611c14565b60405161039896959493929190614175565b60405180910390f35b6103bb60048036038101906103b69190614091565b611cbe565b005b6103d760048036038101906103d29190613fc8565b611f4a565b6040516103e49190613f37565b60405180910390f35b61040760048036038101906104029190613ff3565b611f5f565b005b610423600480360381019061041e9190613eea565b611fa5565b005b61043f600480360381019061043a9190613fc8565b6125b1565b005b610449612632565b6040516104569190613f37565b60405180910390f35b610467612638565b6040516104749190613f37565b60405180910390f35b6104856126d8565b6040516104929190613f37565b60405180910390f35b6104b560048036038101906104b091906141d4565b6126de565b6040516104c3929190614212565b60405180910390f35b6104e660048036038101906104e19190613eea565b61281b565b005b61050260048036038101906104fd9190614239565b612869565b60405161050f9190613f5f565b60405180910390f35b6105206128b1565b60405161052d91906140e9565b60405180910390f35b61053e6128c4565b60405161054b9190613f37565b60405180910390f35b61055c6128ca565b60405161056991906142d2565b60405180910390f35b61057a6128ed565b6040516105879190613f37565b60405180910390f35b6105aa60048036038101906105a59190613eea565b612911565b005b6105c660048036038101906105c19190614041565b612bd2565b005b6105d0612f1e565b005b6105ec60048036038101906105e79190613eea565b612fb5565b6040516105f99190613f37565b60405180910390f35b61061c60048036038101906106179190613eea565b6131ad565b005b61062661343e565b6040516106339190613f37565b60405180910390f35b61065660048036038101906106519190613ff3565b613444565b005b60085f6005600a81111561066f5761066e614102565b5b600a81111561068157610680614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156107945760085f6006600a8111156106f2576106f1614102565b5b600a81111561070457610703614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661078f576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610849565b60085f6003600a8111156107ab576107aa614102565b5b600a8111156107bd576107bc614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610848576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60085f6002600a8111156108605761085f614102565b5b600a81111561087257610871614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061094c575060085f6005600a8111156108e4576108e3614102565b5b600a8111156108f6576108f5614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156109b5575f61095c8383612fb5565b9050610966610a32565b81111561099f576040517f945e926800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001546109ad9190614318565b600181905550505b6109e033828473ffffffffffffffffffffffffffffffffffffffff16613a229092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fb4460e34f1e91c4fa28eb7fac4cbd88cf530ef54a67e1978cd5edd9f77033ead82604051610a269190613f37565b60405180910390a25050565b5f6002547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac3919061435f565b610acd9190614318565b600154610ada9190614318565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60085f6002600a811115610b1b57610b1a614102565b5b600a811115610b2d57610b2c614102565b5b81526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610c3f5760085f80600a811115610b9d57610b9c614102565b5b600a811115610baf57610bae614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610c3a576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dae565b60085f6005600a811115610c5657610c55614102565b5b600a811115610c6857610c67614102565b5b81526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610d7b5760085f6004600a811115610cd957610cd8614102565b5b600a811115610ceb57610cea614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610d76576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dad565b6040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610ddb3330858773ffffffffffffffffffffffffffffffffffffffff16613aa1909392919063ffffffff16565b5f610de68585612fb5565b90508281610df49190614318565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401610e5192919061438a565b5f604051808303815f87803b158015610e68575f80fd5b505af1158015610e7a573d5f803e3d5ffd5b5050505080600154610e8c91906143b1565b6001819055508473ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158583604051610eda9291906143e4565b60405180910390a2509392505050565b6009602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085f6007600a811115610f3157610f30614102565b5b600a811115610f4357610f42614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610fce576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f600a80811115610fe457610fe3614102565b5b600a811115610ff657610ff5614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611081576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b81526004016110dc92919061438a565b5f604051808303815f87803b1580156110f3575f80fd5b505af1158015611105573d5f803e3d5ffd5b5050505060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae5c6cd382335f6040518463ffffffff1660e01b81526004016111679392919061440b565b5f604051808303815f87803b15801561117e575f80fd5b505af1158015611190573d5f803e3d5ffd5b50505050806002546111a29190614318565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f30983846040516112279291906143e4565b60405180910390a350565b61123a613b23565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129f576040517f7138356f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560149054906101000a900460ff166112e5576040517f821b910600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000004361131291906143b1565b90506003600a81111561132857611327614102565b5b84600a81111561133b5761133a614102565b5b148061136b57506006600a81111561135657611355614102565b5b84600a81111561136957611368614102565b5b145b156113ab5760027f000000000000000000000000000000000000000000000000000000000000000061139d9190614440565b436113a891906143b1565b90505b60066040518060c0016040528086600a8111156113cb576113ca614102565b5b81526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020015f151581526020015f1515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f015f6101000a81548160ff0219169083600a81111561146a57611469614102565b5b02179055506020820151815f0160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600201556080820151816003015f6101000a81548160ff02191690831515021790555060a08201518160030160016101000a81548160ff021916908315150217905550505083600a81111561155957611558614102565b5b7fc822ff41836a6dc998393c71843db8adcbbf01721f41b32389f6838ecb1ea9c8846040516115889190613f5f565b60405180910390a250505050565b61159e613b23565b5f8060075f6002600a8111156115b7576115b6614102565b5b600a8111156115c9576115c8614102565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561165357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161160a575b505050505090505f5b81518110156117a1575f82828151811061167957611678614481565b5b6020026020010151905060085f6002600a81111561169a57611699614102565b5b600a8111156116ac576116ab614102565b5b81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561179557611787818273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117439190613f5f565b602060405180830381865afa15801561175e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611782919061435f565b612fb5565b8461179291906143b1565b93505b8160010191505061165c565b5f60075f6005600a8111156117b9576117b8614102565b5b600a8111156117cb576117ca614102565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561185557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161180c575b505050505090505f91505b80518210156119a5575f81838151811061187d5761187c614481565b5b6020026020010151905060085f6005600a81111561189e5761189d614102565b5b600a8111156118b0576118af614102565b5b81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156119995761198b818273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119479190613f5f565b602060405180830381865afa158015611962573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611986919061435f565b612fb5565b8561199691906143b1565b94505b82600101925050611860565b83600181905550837fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446660405160405180910390a250505050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60085f6008600a811115611a2057611a1f614102565b5b600a811115611a3257611a31614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611abd576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ac5610a32565b811115611afe576040517f945e926800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401611b5992919061438a565b5f604051808303815f87803b158015611b70575f80fd5b505af1158015611b82573d5f803e3d5ffd5b505050508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f083604051611be39190613f37565b60405180910390a35050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60068181548110611c23575f80fd5b905f5260205f2090600402015f91509050805f015f9054906101000a900460ff1690805f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015f9054906101000a900460ff16908060030160019054906101000a900460ff16905086565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4a91906144c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611e3c57505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0c91906144c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611e73576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f84600a811115611e8a57611e89614102565b5b600a811115611e9c57611e9b614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555081600a811115611f0d57611f0c614102565b5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713825f604051611f3e9291906144ed565b60405180910390a25050565b600a602052805f5260405f205f915090505481565b611f67613b23565b600160068281548110611f7d57611f7c614481565b5b905f5260205f2090600402016003015f6101000a81548160ff02191690831515021790555050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120b45760085f600a8081111561200f5761200e614102565b5b600a81111561202157612020614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ac576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050612229565b60085f6007600a8111156120cb576120ca614102565b5b600a8111156120dd576120dc614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612168576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f6002600a81111561217f5761217e614102565b5b600a81111561219157612190614102565b5b81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661221c576040517f29d79a5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122268383612fb5565b90505b5f8103612262576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae5c6cd3823360016040518463ffffffff1660e01b81526004016122c19392919061440b565b5f604051808303815f87803b1580156122d8575f80fd5b505af11580156122ea573d5f803e3d5ffd5b50505050600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4ef1c4c336040518263ffffffff1660e01b81526004016123869190613f5f565b602060405180830381865afa1580156123a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c5919061435f565b11156123fd576040517fe8768c6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025461240b91906143b1565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612505577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b81526004016124bf92919061438a565b5f604051808303815f87803b1580156124d6575f80fd5b505af11580156124e8573d5f803e3d5ffd5b50505050806003546124fa91906143b1565b600381905550612545565b806001546125139190614318565b60018190555061254433838573ffffffffffffffffffffffffffffffffffffffff16613a229092919063ffffffff16565b5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d684846040516125a49291906143e4565b60405180910390a3505050565b6125b9613b23565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad816040516126279190613f5f565b60405180910390a150565b60035481565b5f6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c9919061435f565b6126d39190614318565b905090565b60015481565b5f805f60075f85600a8111156126f7576126f6614102565b5b600a81111561270957612708614102565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561279357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161274a575b505050505090505f5b815181101561280b578181815181106127b8576127b7614481565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361280057600181935093505050612814565b80600101905061279c565b5f809350935050505b9250929050565b612823613b23565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b6007602052815f5260405f208181548110612882575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b60045481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085f6007600a81111561292857612927614102565b5b600a81111561293a57612939614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166129c5576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f6002600a8111156129dc576129db614102565b5b600a8111156129ee576129ed614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612a79576040517f29d79a5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612aa63330838573ffffffffffffffffffffffffffffffffffffffff16613aa1909392919063ffffffff16565b5f612ab18383612fb5565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae5c6cd382335f6040518463ffffffff1660e01b8152600401612b119392919061440b565b5f604051808303815f87803b158015612b28575f80fd5b505af1158015612b3a573d5f803e3d5ffd5b5050505080600254612b4c9190614318565b60028190555080600154612b6091906143b1565b6001819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098484604051612bc59291906143e4565b60405180910390a3505050565b612bda613b23565b600560149054906101000a900460ff1615612c21576040517ff3cf77c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600a811115612c3557612c34614102565b5b83600a811115612c4857612c47614102565b5b03612c92578160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612ecc565b600160085f85600a811115612caa57612ca9614102565b5b600a811115612cbc57612cbb614102565b5b81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506005600a811115612d2e57612d2d614102565b5b83600a811115612d4157612d40614102565b5b03612dc2578060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5f612dcd83856126de565b50905080158015612e3157506005600a811115612ded57612dec614102565b5b84600a811115612e0057612dff614102565b5b1480612e3057506002600a811115612e1b57612e1a614102565b5b84600a811115612e2e57612e2d614102565b5b145b5b15612eca5760075f85600a811115612e4c57612e4b614102565b5b600a811115612e5e57612e5d614102565b5b81526020019081526020015f2083908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b82600a811115612edf57612ede614102565b5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713836001604051612f119291906144ed565b60405180910390a2505050565b612f26613b23565b5f600454118015612f3957504360045411155b15612f7457600560149054906101000a900460ff1615600560146101000a81548160ff0219169083151502179055505f600481905550612fb3565b60077f0000000000000000000000000000000000000000000000000000000000000000612fa19190614440565b43612fac91906143b1565b6004819055505b565b5f8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613023919061454a565b600a61302f91906146a4565b633b9aca008361303f9190614440565b613049919061471b565b905060085f6005600a81111561306257613061614102565b5b600a81111561307457613073614102565b5b81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156131a75760095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634249719f84846040518363ffffffff1660e01b815260040161316592919061438a565b602060405180830381865afa158015613180573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a4919061435f565b90505b92915050565b60085f6002600a8111156131c4576131c3614102565b5b600a8111156131d6576131d5614102565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613261576040517f29d79a5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f6001600a81111561327857613277614102565b5b600a81111561328a57613289614102565b5b81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613315576040517fc19f17a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6133208383612fb5565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161337d92919061438a565b5f604051808303815f87803b158015613394575f80fd5b505af11580156133a6573d5f803e3d5ffd5b50505050806001546133b89190614318565b6001819055506133e933838573ffffffffffffffffffffffffffffffffffffffff16613a229092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb83836040516134319291906143e4565b60405180910390a2505050565b60025481565b600560149054906101000a900460ff161561348b576040517f821b910600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600682815481106134a05761349f614481565b5b905f5260205f2090600402019050806003015f9054906101000a900460ff16156134f6576040517fe559cc4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060030160019054906101000a900460ff161561353f576040517f1371027400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b438160020154111561357d576040517f4add9d0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600a81111561359157613590614102565b5b815f015f9054906101000a900460ff16600a8111156135b3576135b2614102565b5b0361362057805f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613963565b600160085f835f015f9054906101000a900460ff16600a81111561364757613646614102565b5b600a81111561365957613658614102565b5b81526020019081526020015f205f835f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506005600a8111156136ee576136ed614102565b5b815f015f9054906101000a900460ff16600a8111156137105761370f614102565b5b036137d757806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660095f835f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5f613814825f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16835f015f9054906101000a900460ff166126de565b5090508015801561389657506005600a81111561383457613833614102565b5b825f015f9054906101000a900460ff16600a81111561385657613855614102565b5b148061389557506002600a81111561387157613870614102565b5b825f015f9054906101000a900460ff16600a81111561389357613892614102565b5b145b5b156139615760075f835f015f9054906101000a900460ff16600a8111156138c0576138bf614102565b5b600a8111156138d2576138d1614102565b5b81526020019081526020015f20825f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b60016006838154811061397957613978614481565b5b905f5260205f20906004020160030160016101000a81548160ff021916908315150217905550805f015f9054906101000a900460ff16600a8111156139c1576139c0614102565b5b7f7531a7aefe3985500c4dec2dcb6049a708f14c6a8a9022b435b8841bdb8e1713825f0160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001604051613a169291906144ed565b60405180910390a25050565b613a9c838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401613a5592919061438a565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c15565b505050565b613b1d848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613ad69392919061474b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c15565b50505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613baf91906144c2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613c13576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f613c3f828473ffffffffffffffffffffffffffffffffffffffff16613caa90919063ffffffff16565b90505f815114158015613c63575080806020019051810190613c6191906147aa565b155b15613ca557826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401613c9c9190613f5f565b60405180910390fd5b505050565b6060613cb783835f613cbf565b905092915050565b606081471015613d0657306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401613cfd9190613f5f565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051613d2e9190614841565b5f6040518083038185875af1925050503d805f8114613d68576040519150601f19603f3d011682016040523d82523d5f602084013e613d6d565b606091505b5091509150613d7d868383613d88565b925050509392505050565b606082613d9d57613d9882613e15565b613e0d565b5f8251148015613dc357505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15613e0557836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401613dfc9190613f5f565b60405180910390fd5b819050613e0e565b5b9392505050565b5f81511115613e275780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613e8682613e5d565b9050919050565b613e9681613e7c565b8114613ea0575f80fd5b50565b5f81359050613eb181613e8d565b92915050565b5f819050919050565b613ec981613eb7565b8114613ed3575f80fd5b50565b5f81359050613ee481613ec0565b92915050565b5f8060408385031215613f0057613eff613e59565b5b5f613f0d85828601613ea3565b9250506020613f1e85828601613ed6565b9150509250929050565b613f3181613eb7565b82525050565b5f602082019050613f4a5f830184613f28565b92915050565b613f5981613e7c565b82525050565b5f602082019050613f725f830184613f50565b92915050565b5f805f60608486031215613f8f57613f8e613e59565b5b5f613f9c86828701613ea3565b9350506020613fad86828701613ed6565b9250506040613fbe86828701613ed6565b9150509250925092565b5f60208284031215613fdd57613fdc613e59565b5b5f613fea84828501613ea3565b91505092915050565b5f6020828403121561400857614007613e59565b5b5f61401584828501613ed6565b91505092915050565b600b811061402a575f80fd5b50565b5f8135905061403b8161401e565b92915050565b5f805f6060848603121561405857614057613e59565b5b5f6140658682870161402d565b935050602061407686828701613ea3565b925050604061408786828701613ea3565b9150509250925092565b5f80604083850312156140a7576140a6613e59565b5b5f6140b48582860161402d565b92505060206140c585828601613ea3565b9150509250929050565b5f8115159050919050565b6140e3816140cf565b82525050565b5f6020820190506140fc5f8301846140da565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b81106141405761413f614102565b5b50565b5f8190506141508261412f565b919050565b5f61415f82614143565b9050919050565b61416f81614155565b82525050565b5f60c0820190506141885f830189614166565b6141956020830188613f50565b6141a26040830187613f50565b6141af6060830186613f28565b6141bc60808301856140da565b6141c960a08301846140da565b979650505050505050565b5f80604083850312156141ea576141e9613e59565b5b5f6141f785828601613ea3565b92505060206142088582860161402d565b9150509250929050565b5f6040820190506142255f8301856140da565b6142326020830184613f28565b9392505050565b5f806040838503121561424f5761424e613e59565b5b5f61425c8582860161402d565b925050602061426d85828601613ed6565b9150509250929050565b5f819050919050565b5f61429a61429561429084613e5d565b614277565b613e5d565b9050919050565b5f6142ab82614280565b9050919050565b5f6142bc826142a1565b9050919050565b6142cc816142b2565b82525050565b5f6020820190506142e55f8301846142c3565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61432282613eb7565b915061432d83613eb7565b9250828203905081811115614345576143446142eb565b5b92915050565b5f8151905061435981613ec0565b92915050565b5f6020828403121561437457614373613e59565b5b5f6143818482850161434b565b91505092915050565b5f60408201905061439d5f830185613f50565b6143aa6020830184613f28565b9392505050565b5f6143bb82613eb7565b91506143c683613eb7565b92508282019050808211156143de576143dd6142eb565b5b92915050565b5f6040820190506143f75f830185613f28565b6144046020830184613f28565b9392505050565b5f60608201905061441e5f830186613f28565b61442b6020830185613f50565b61443860408301846140da565b949350505050565b5f61444a82613eb7565b915061445583613eb7565b925082820261446381613eb7565b9150828204841483151761447a576144796142eb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506144bc81613e8d565b92915050565b5f602082840312156144d7576144d6613e59565b5b5f6144e4848285016144ae565b91505092915050565b5f6040820190506145005f830185613f50565b61450d60208301846140da565b9392505050565b5f60ff82169050919050565b61452981614514565b8114614533575f80fd5b50565b5f8151905061454481614520565b92915050565b5f6020828403121561455f5761455e613e59565b5b5f61456c84828501614536565b91505092915050565b5f8160011c9050919050565b5f808291508390505b60018511156145ca578086048111156145a6576145a56142eb565b5b60018516156145b55780820291505b80810290506145c385614575565b945061458a565b94509492505050565b5f826145e2576001905061469d565b816145ef575f905061469d565b8160018114614605576002811461460f5761463e565b600191505061469d565b60ff841115614621576146206142eb565b5b8360020a915084821115614638576146376142eb565b5b5061469d565b5060208310610133831016604e8410600b84101617156146735782820a90508381111561466e5761466d6142eb565b5b61469d565b6146808484846001614581565b92509050818404811115614697576146966142eb565b5b81810290505b9392505050565b5f6146ae82613eb7565b91506146b983614514565b92506146e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846145d3565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61472582613eb7565b915061473083613eb7565b9250826147405761473f6146ee565b5b828204905092915050565b5f60608201905061475e5f830186613f50565b61476b6020830185613f50565b6147786040830184613f28565b949350505050565b614789816140cf565b8114614793575f80fd5b50565b5f815190506147a481614780565b92915050565b5f602082840312156147bf576147be613e59565b5b5f6147cc84828501614796565b91505092915050565b5f81519050919050565b5f81905092915050565b5f5b838110156148065780820151818401526020810190506147eb565b5f8484015250505050565b5f61481b826147d5565b61482581856147df565b93506148358185602086016147e9565b80840191505092915050565b5f61484c8284614811565b91508190509291505056fea2646970667358221220651162ba9193ae271df0523ae36b78b4fa66f08bc689950e21636e7293f71f5064736f6c63430008140033","sourceMap":"453:10978:94:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2591:716;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10798:144;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;551:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1321:773;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;991:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5266:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8461:841;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5708:1127;;;:::i;:::-;;923:62;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3313:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;778:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;837:30;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;7732:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1046:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10336:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3642:1039;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;650:181:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;702:23:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11306:123;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;638:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8048:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6841:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;873:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;803:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;731:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;224:32:118;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;586:45:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4687:573;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6958:768;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10446:346;;;:::i;:::-;;10948:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2100:485;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;672:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9308:1022;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2591:716;2670:11;:34;2682:21;2670:34;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:41;2705:5;2670:41;;;;;;;;;;;;;;;;;;;;;;;;;2666:251;;;2732:11;:36;2744:23;2732:36;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:48;2769:10;2732:48;;;;;;;;;;;;;;;;;;;;;;;;;2727:75;;2789:13;;;;;;;;;;;;;;2727:75;2666:251;;;2838:11;:34;2850:21;2838:34;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:46;2873:10;2838:46;;;;;;;;;;;;;;;;;;;;;;;;;2833:73;;2893:13;;;;;;;;;;;;;;2833:73;2666:251;2931:11;:32;2943:19;2931:32;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:39;2964:5;2931:39;;;;;;;;;;;;;;;;;;;;;;;;;:84;;;;2974:11;:34;2986:21;2974:34;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:41;3009:5;2974:41;;;;;;;;;;;;;;;;;;;;;;;;;2931:84;2927:280;;;3031:13;3047:25;3058:5;3065:6;3047:10;:25::i;:::-;3031:41;;3098:16;:14;:16::i;:::-;3090:5;:24;3086:59;;;3123:22;;;;;;;;;;;;;;3086:59;3191:5;3175:13;;:21;;;;:::i;:::-;3159:13;:37;;;;3017:190;2927:280;3217:46;3244:10;3256:6;3224:5;3217:26;;;;:46;;;;;:::i;:::-;3286:5;3278:22;;;3293:6;3278:22;;;;;;:::i;:::-;;;;;;;;2591:716;;:::o;10798:144::-;10854:7;10925:9;;10903:4;10897:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;;;:::i;:::-;10880:13;;:55;;;;:::i;:::-;10873:62;;10798:144;:::o;551:29::-;;;:::o;1321:773::-;1442:12;1470:11;:32;1482:19;1470:32;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:39;1503:5;1470:39;;;;;;;;;;;;;;;;;;;;;;;;;1466:327;;;1530:11;:36;1542:23;1530:36;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:48;1567:10;1530:48;;;;;;;;;;;;;;;;;;;;;;;;;1525:75;;1587:13;;;;;;;;;;;;;;1525:75;1466:327;;;1621:11;:34;1633:21;1621:34;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:41;1656:5;1621:41;;;;;;;;;;;;;;;;;;;;;;;;;1617:176;;;1683:11;:38;1695:25;1683:38;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:50;1722:10;1683:50;;;;;;;;;;;;;;;;;;;;;;;;;1678:77;;1742:13;;;;;;;;;;;;;;1678:77;1617:176;;;1779:14;;;;;;;;;;;;;;1617:176;1466:327;1804:65;1835:10;1855:4;1862:6;1811:5;1804:30;;;;:65;;;;;;:::i;:::-;1879:13;1895:25;1906:5;1913:6;1895:10;:25::i;:::-;1879:41;;1945:6;1937:5;:14;;;;:::i;:::-;1930:21;;1967:4;1961:16;;;1978:10;1990:4;1961:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:5;2022:13;;:21;;;;:::i;:::-;2006:13;:37;;;;2066:5;2058:29;;;2073:6;2081:5;2058:29;;;;;;;:::i;:::-;;;;;;;;1456:638;1321:773;;;;;:::o;991:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;5266:436::-;5342:11;:33;5354:20;5342:33;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:45;5376:10;5342:45;;;;;;;;;;;;;;;;;;;;;;;;;5337:72;;5396:13;;;;;;;;;;;;;;5337:72;5424:11;:30;5436:17;5424:30;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:42;5455:10;5424:42;;;;;;;;;;;;;;;;;;;;;;;;;5419:69;;5475:13;;;;;;;;;;;;;;5419:69;5504:4;5498:20;;;5519:10;5531:6;5498:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5554:4;;;;;;;;;;;5548:22;;;5571:6;5579:10;5591:5;5548:49;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5631:6;5619:9;;:18;;;;:::i;:::-;5607:9;:30;;;;5674:4;5652:43;;5662:10;5652:43;;;5680:6;5688;5652:43;;;;;;;:::i;:::-;;;;;;;;5266:436;:::o;8461:841::-;429:15:118;:13;:15::i;:::-;8636:1:94::1;8613:25;;:11;:25;;::::0;8609:52:::1;;8647:14;;;;;;;;;;;;;;8609:52;8676:15;;;;;;;;;;;8671:47;;8700:18;;;;;;;;;;;;;;8671:47;8729:16;8763:20;8748:12;:35;;;;:::i;:::-;8729:54;;8807:21;8797:31;;;;;;;;:::i;:::-;;:6;:31;;;;;;;;:::i;:::-;;;:68;;;;8842:23;8832:33;;;;;;;;:::i;:::-;;:6;:33;;;;;;;;:::i;:::-;;;8797:68;8793:151;;;8931:1;8908:20;:24;;;;:::i;:::-;8892:12;:41;;;;:::i;:::-;8881:52;;8793:151;8954:15;8988:245;;;;;;;;9022:6;8988:245;;;;;;;;:::i;:::-;;;;;;9056:11;8988:245;;;;;;9097:17;8988:245;;;;;;9145:8;8988:245;;;;9180:5;8988:245;;;;;;9213:5;8988:245;;;;::::0;8954:289:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9275:6;9258:37;;;;;;;;:::i;:::-;;;9283:11;9258:37;;;;;;:::i;:::-;;;;;;;;8599:703;8461:841:::0;;;:::o;5708:1127::-;429:15:118;:13;:15::i;:::-;5765:16:94::1;5791:30:::0;5824:8:::1;:29;5833:19;5824:29;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5791:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5864:9;5883:378;5894:13;:20;5890:1;:24;5883:378;;;5931:20;5954:13;5968:1;5954:16;;;;;;;;:::i;:::-;;;;;;;;5931:39;;5988:11;:32;6000:19;5988:32;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:46;6021:12;5988:46;;;;;;;;;;;;;;;;;;;;;;;;;5984:236;;;6076:129;6108:12;6149;6142:30;;;6181:4;6142:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6076:10;:129::i;:::-;6065:8;:140;;;;:::i;:::-;6054:151;;5984:236;6245:3;;;;;5917:344;5883:378;;;6271:32;6306:8;:31;6315:21;6306:31;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6271:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6351:1;6347:5;;6362:392;6373:15;:22;6369:1;:26;6362:392;;;6412:22;6437:15;6453:1;6437:18;;;;;;;;:::i;:::-;;;;;;;;6412:43;;6473:11;:34;6485:21;6473:34;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:50;6508:14;6473:50;;;;;;;;;;;;;;;;;;;;;;;;;6469:244;;;6565:133;6597:14;6640;6633:32;;;6674:4;6633:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6565:10;:133::i;:::-;6554:8;:144;;;;:::i;:::-;6543:155;;6469:244;6738:3;;;;;6398:356;6362:392;;;6780:8;6764:13;:24;;;;6819:8;6803:25;;;;;;;;;;5755:1080;;;;5708:1127::o:0;923:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3313:323::-;3395:11;:33;3407:20;3395:33;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:45;3429:10;3395:45;;;;;;;;;;;;;;;;;;;;;;;;;3390:72;;3449:13;;;;;;;;;;;;;;3390:72;3485:16;:14;:16::i;:::-;3476:6;:25;3472:60;;;3510:22;;;;;;;;;;;;;;3472:60;3548:4;3542:16;;;3559:9;3570:6;3542:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3611:9;3592:37;;3599:10;3592:37;;;3622:6;3592:37;;;;;;:::i;:::-;;;;;;;;3313:323;;:::o;778:19::-;;;;;;;;;;;;;:::o;837:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7732:310::-;7833:9;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7819:34;;:10;:34;;;;:84;;;;;7883:9;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7869:34;;:10;:34;;;;7819:84;7802:132;;;7921:13;;;;;;;;;;;;;;7802:132;7977:5;7944:11;:19;7956:6;7944:19;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:30;7964:9;7944:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;8021:6;7997:38;;;;;;;;:::i;:::-;;;8010:9;8029:5;7997:38;;;;;;;:::i;:::-;;;;;;;;7732:310;;:::o;1046:44::-;;;;;;;;;;;;;;;;;:::o;10336:104::-;429:15:118;:13;:15::i;:::-;10429:4:94::1;10398:15;10414:3;10398:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;:35;;;;;;;;;;;;;;;;;;10336:104:::0;:::o;3642:1039::-;3720:13;3756:4;3747:13;;:5;:13;;;3743:371;;3781:11;:30;3793:17;3781:30;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:42;3812:10;3781:42;;;;;;;;;;;;;;;;;;;;;;;;;3776:69;;3832:13;;;;;;;;;;;;;;3776:69;3867:6;3859:14;;3743:371;;;3909:11;:33;3921:20;3909:33;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:45;3943:10;3909:45;;;;;;;;;;;;;;;;;;;;;;;;;3904:72;;3963:13;;;;;;;;;;;;;;3904:72;3995:11;:32;4007:19;3995:32;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:39;4028:5;3995:39;;;;;;;;;;;;;;;;;;;;;;;;;3990:66;;4043:13;;;;;;;;;;;;;;3990:66;4078:25;4089:5;4096:6;4078:10;:25::i;:::-;4070:33;;3743:371;4136:1;4127:5;:10;4123:37;;4146:14;;;;;;;;;;;;;;4123:37;4177:4;;;;;;;;;;;4171:22;;;4194:5;4201:10;4213:4;4171:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4271:9;:21;4281:10;4271:21;;;;;;;;;;;;;;;;4238:4;;;;;;;;;;;4232:24;;;4257:10;4232:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;4228:90;;;4301:17;;;;;;;;;;;;;;4228:90;4352:5;4340:9;;:17;;;;:::i;:::-;4328:9;:29;;;;4381:4;4372:13;;:5;:13;;;4368:248;;4407:4;4401:16;;;4418:10;4430:5;4401:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4472:5;4461:8;;:16;;;;:::i;:::-;4450:8;:27;;;;4368:248;;;4540:5;4524:13;;:21;;;;:::i;:::-;4508:13;:37;;;;4559:46;4586:10;4598:6;4566:5;4559:26;;;;:46;;;;;:::i;:::-;4368:248;4653:5;4630:44;;4641:10;4630:44;;;4660:6;4668:5;4630:44;;;;;;;:::i;:::-;;;;;;;;3710:971;3642:1039;;:::o;650:181:118:-;713:15;:13;:15::i;:::-;766:12;738:9;;:41;;;;;;;;;;;;;;;;;;794:30;811:12;794:30;;;;;;:::i;:::-;;;;;;;;650:181;:::o;702:23:94:-;;;;:::o;11306:123::-;11360:7;11414:8;;11392:4;11386:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;;:::i;:::-;11379:43;;11306:123;:::o;638:28::-;;;;:::o;8048:407::-;8161:4;8167:7;8186:24;8213:8;:16;8222:6;8213:16;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8186:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8239:9;8258:164;8269:7;:14;8265:1;:18;8258:164;;;8320:7;8328:1;8320:10;;;;;;;;:::i;:::-;;;;;;;;8305:25;;:11;:25;;;8301:80;;8358:4;8364:1;8350:16;;;;;;;;8301:80;8406:3;;;;;8258:164;;;8439:5;8446:1;8431:17;;;;;;8048:407;;;;;;:::o;6841:111::-;429:15:118;:13;:15::i;:::-;6940:5:94::1;6923:9;:14;6933:3;6923:14;;;;;;;;;;;;;;;:22;;;;6841:111:::0;;:::o;873:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;803:27::-;;;;;;;;;;;;;:::o;731:40::-;;;;:::o;224:32:118:-;;;;;;;;;;;;:::o;586:45:94:-;;;:::o;4687:573::-;4782:11;:33;4794:20;4782:33;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:45;4816:10;4782:45;;;;;;;;;;;;;;;;;;;;;;;;;4777:72;;4836:13;;;;;;;;;;;;;;4777:72;4864:11;:32;4876:19;4864:32;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:39;4897:5;4864:39;;;;;;;;;;;;;;;;;;;;;;;;;4859:66;;4912:13;;;;;;;;;;;;;;4859:66;4935:65;4966:10;4986:4;4993:6;4942:5;4935:30;;;;:65;;;;;;:::i;:::-;5010:13;5026:25;5037:5;5044:6;5026:10;:25::i;:::-;5010:41;;5067:4;;;;;;;;;;;5061:22;;;5084:5;5091:10;5103:5;5061:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5143:5;5131:9;;:17;;;;:::i;:::-;5119:9;:29;;;;5190:5;5174:13;;:21;;;;:::i;:::-;5158:13;:37;;;;5232:5;5210:43;;5220:10;5210:43;;;5239:6;5247:5;5210:43;;;;;;;:::i;:::-;;;;;;;;4767:493;4687:573;;:::o;6958:768::-;429:15:118;:13;:15::i;:::-;7103::94::1;;;;;;;;;;;7099:47;;;7127:19;;;;;;;;;;;;;;7099:47;7170:11;7160:21;;;;;;;;:::i;:::-;;:6;:21;;;;;;;;:::i;:::-;;::::0;7156:510:::1;;7204:11;7197:4;;:18;;;;;;;;;;;;;;;;;;7156:510;;;7281:4;7246:11;:19;7258:6;7246:19;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:32;7266:11;7246:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7313:21;7303:31;;;;;;;;:::i;:::-;;:6;:31;;;;;;;;:::i;:::-;;::::0;7299:117:::1;;7384:17;7354:14;:27;7369:11;7354:27;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;7299:117;7431:15;7452:36;7468:11;7481:6;7452:15;:36::i;:::-;7430:58;;;7507:10;7506:11;:81;;;;;7532:21;7522:31;;;;;;;;:::i;:::-;;:6;:31;;;;;;;;:::i;:::-;;;:64;;;;7567:19;7557:29;;;;;;;;:::i;:::-;;:6;:29;;;;;;;;:::i;:::-;;;7522:64;7506:81;7502:154;;;7607:8;:16;7616:6;7607:16;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7629:11;7607:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7502:154;7232:434;7156:510;7706:6;7680:39;;;;;;;;:::i;:::-;;;7693:11;7714:4;7680:39;;;;;;;:::i;:::-;;;;;;;;6958:768:::0;;;:::o;10446:346::-;429:15:118;:13;:15::i;:::-;10536:1:94::1;10508:25;;:29;:74;;;;;10570:12;10541:25;;:41;;10508:74;10504:282;;;10617:15;;;;;;;;;;;10616:16;10598:15;;:34;;;;;;;;;;;;;;;;;;10674:1;10646:25;:29;;;;10504:282;;;10773:1;10750:20;:24;;;;:::i;:::-;10734:12;:41;;;;:::i;:::-;10706:25;:69;;;;10504:282;10446:346::o:0;10948:352::-;11051:13;11119:5;11104:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11100:2;:36;;;;:::i;:::-;11093:3;11084:6;:12;;;;:::i;:::-;:53;;;;:::i;:::-;11076:61;;11152:11;:34;11164:21;11152:34;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:41;11187:5;11152:41;;;;;;;;;;;;;;;;;;;;;;;;;11148:146;;;11236:14;:21;11251:5;11236:21;;;;;;;;;;;;;;;;;;;;;;;;;11217:51;;;11269:5;11276:6;11217:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11209:74;;11148:146;10948:352;;;;:::o;2100:485::-;2182:11;:32;2194:19;2182:32;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:39;2215:5;2182:39;;;;;;;;;;;;;;;;;;;;;;;;;2177:66;;2230:13;;;;;;;;;;;;;;2177:66;2258:11;:34;2270:21;2258:34;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:46;2293:10;2258:46;;;;;;;;;;;;;;;;;;;;;;;;;2253:73;;2313:13;;;;;;;;;;;;;;2253:73;2337:13;2353:25;2364:5;2371:6;2353:10;:25::i;:::-;2337:41;;2394:4;2388:20;;;2409:10;2421:5;2388:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2469:5;2453:13;;:21;;;;:::i;:::-;2437:13;:37;;;;2485:46;2512:10;2524:6;2492:5;2485:26;;;;:46;;;;;:::i;:::-;2557:5;2546:32;;;2564:6;2572:5;2546:32;;;;;;;:::i;:::-;;;;;;;;2167:418;2100:485;;:::o;672:24::-;;;;:::o;9308:1022::-;9361:15;;;;;;;;;;;9357:46;;;9385:18;;;;;;;;;;;;;;9357:46;9414:18;9435:15;9451:3;9435:20;;;;;;;;:::i;:::-;;;;;;;;;;;;9414:41;;9470:4;:12;;;;;;;;;;;;9466:42;;;9491:17;;;;;;;;;;;;;;9466:42;9522:4;:13;;;;;;;;;;;;9518:42;;;9544:16;;;;;;;;;;;;;;9518:42;9593:12;9574:4;:16;;;:31;9570:65;;;9614:21;;;;;;;;;;;;;;9570:65;9667:11;9650:28;;;;;;;;:::i;:::-;;:4;:13;;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;9646:568;;9701:4;:13;;;;;;;;;;;;9694:4;;:20;;;;;;;;;;;;;;;;;;9646:568;;;9789:4;9745:11;:26;9757:4;:13;;;;;;;;;;;;9745:26;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:41;9772:4;:13;;;;;;;;;;;;9745:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;9829:21;9812:38;;;;;;;;:::i;:::-;;:4;:13;;;;;;;;;;;;:38;;;;;;;;:::i;:::-;;;9808:124;;9902:4;:15;;;;;;;;;;;;9870:14;:29;9885:4;:13;;;;;;;;;;;;9870:29;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;9808:124;9947:15;9968:45;9984:4;:13;;;;;;;;;;;;9999:4;:13;;;;;;;;;;;;9968:15;:45::i;:::-;9946:67;;;10032:10;10031:11;:95;;;;;10064:21;10047:38;;;;;;;;:::i;:::-;;:4;:13;;;;;;;;;;;;:38;;;;;;;;:::i;:::-;;;:78;;;;10106:19;10089:36;;;;;;;;:::i;:::-;;:4;:13;;;;;;;;;;;;:36;;;;;;;;:::i;:::-;;;10047:78;10031:95;10027:177;;;10146:8;:23;10155:4;:13;;;;;;;;;;;;10146:23;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10175:4;:13;;;;;;;;;;;;10146:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10027:177;9731:483;9646:568;10256:4;10224:15;10240:3;10224:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;:36;;;;;;;;;;;;;;;;;;10303:4;:13;;;;;;;;;;;;10275:48;;;;;;;;:::i;:::-;;;10288:4;:13;;;;;;;;;;;;10318:4;10275:48;;;;;;;:::i;:::-;;;;;;;;9347:983;9308:1022;:::o;1303:160:27:-;1385:71;1405:5;1427;:14;;;1444:2;1448:5;1412:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:19;:71::i;:::-;1303:160;;;:::o;1702:188::-;1802:81;1822:5;1844;:18;;;1865:4;1871:2;1875:5;1829:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1802:19;:81::i;:::-;1702:188;;;;:::o;837:117:118:-;904:9;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;890:34;;:10;:34;;;886:61;;933:14;;;;;;;;;;;;;;886:61;837:117::o;4059:629:27:-;4478:23;4504:33;4532:4;4512:5;4504:27;;;;:33;;;;:::i;:::-;4478:59;;4572:1;4551:10;:17;:22;;:57;;;;;4589:10;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;4547:135;;;4664:5;4631:40;;;;;;;;;;;:::i;:::-;;;;;;;;4547:135;4129:559;4059:629;;:::o;2705:151:30:-;2780:12;2811:38;2833:6;2841:4;2847:1;2811:21;:38::i;:::-;2804:45;;2705:151;;;;:::o;3180:392::-;3279:12;3331:5;3307:21;:29;3303:108;;;3394:4;3359:41;;;;;;;;;;;:::i;:::-;;;;;;;;3303:108;3421:12;3435:23;3462:6;:11;;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;;;;3180:392;;;;;:::o;4625:582::-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5066:1;5045:10;:17;:22;:49;;;;;5093:1;5071:6;:18;;;:23;5045:49;5041:119;;;5138:6;5121:24;;;;;;;;;;;:::i;:::-;;;;;;;;5041:119;5180:10;5173:17;;;;4793:408;4625:582;;;;;;:::o;5743:516::-;5894:1;5874:10;:17;:21;5870:383;;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;88:117:133;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:118::-;2116:24;2134:5;2116:24;:::i;:::-;2111:3;2104:37;2029:118;;:::o;2153:222::-;2246:4;2284:2;2273:9;2269:18;2261:26;;2297:71;2365:1;2354:9;2350:17;2341:6;2297:71;:::i;:::-;2153:222;;;;:::o;2381:619::-;2458:6;2466;2474;2523:2;2511:9;2502:7;2498:23;2494:32;2491:119;;;2529:79;;:::i;:::-;2491:119;2649:1;2674:53;2719:7;2710:6;2699:9;2695:22;2674:53;:::i;:::-;2664:63;;2620:117;2776:2;2802:53;2847:7;2838:6;2827:9;2823:22;2802:53;:::i;:::-;2792:63;;2747:118;2904:2;2930:53;2975:7;2966:6;2955:9;2951:22;2930:53;:::i;:::-;2920:63;;2875:118;2381:619;;;;;:::o;3006:329::-;3065:6;3114:2;3102:9;3093:7;3089:23;3085:32;3082:119;;;3120:79;;:::i;:::-;3082:119;3240:1;3265:53;3310:7;3301:6;3290:9;3286:22;3265:53;:::i;:::-;3255:63;;3211:117;3006:329;;;;:::o;3341:::-;3400:6;3449:2;3437:9;3428:7;3424:23;3420:32;3417:119;;;3455:79;;:::i;:::-;3417:119;3575:1;3600:53;3645:7;3636:6;3625:9;3621:22;3600:53;:::i;:::-;3590:63;;3546:117;3341:329;;;;:::o;3676:112::-;3761:2;3754:5;3751:13;3741:41;;3778:1;3775;3768:12;3741:41;3676:112;:::o;3794:163::-;3852:5;3890:6;3877:20;3868:29;;3906:45;3945:5;3906:45;:::i;:::-;3794:163;;;;:::o;3963:643::-;4052:6;4060;4068;4117:2;4105:9;4096:7;4092:23;4088:32;4085:119;;;4123:79;;:::i;:::-;4085:119;4243:1;4268:65;4325:7;4316:6;4305:9;4301:22;4268:65;:::i;:::-;4258:75;;4214:129;4382:2;4408:53;4453:7;4444:6;4433:9;4429:22;4408:53;:::i;:::-;4398:63;;4353:118;4510:2;4536:53;4581:7;4572:6;4561:9;4557:22;4536:53;:::i;:::-;4526:63;;4481:118;3963:643;;;;;:::o;4612:498::-;4692:6;4700;4749:2;4737:9;4728:7;4724:23;4720:32;4717:119;;;4755:79;;:::i;:::-;4717:119;4875:1;4900:65;4957:7;4948:6;4937:9;4933:22;4900:65;:::i;:::-;4890:75;;4846:129;5014:2;5040:53;5085:7;5076:6;5065:9;5061:22;5040:53;:::i;:::-;5030:63;;4985:118;4612:498;;;;;:::o;5116:90::-;5150:7;5193:5;5186:13;5179:21;5168:32;;5116:90;;;:::o;5212:109::-;5293:21;5308:5;5293:21;:::i;:::-;5288:3;5281:34;5212:109;;:::o;5327:210::-;5414:4;5452:2;5441:9;5437:18;5429:26;;5465:65;5527:1;5516:9;5512:17;5503:6;5465:65;:::i;:::-;5327:210;;;;:::o;5543:180::-;5591:77;5588:1;5581:88;5688:4;5685:1;5678:15;5712:4;5709:1;5702:15;5729:118;5814:2;5807:5;5804:13;5794:47;;5821:18;;:::i;:::-;5794:47;5729:118;:::o;5853:135::-;5902:7;5931:5;5920:16;;5937:45;5976:5;5937:45;:::i;:::-;5853:135;;;:::o;5994:::-;6054:9;6087:36;6117:5;6087:36;:::i;:::-;6074:49;;5994:135;;;:::o;6135:151::-;6232:47;6273:5;6232:47;:::i;:::-;6227:3;6220:60;6135:151;;:::o;6292:771::-;6523:4;6561:3;6550:9;6546:19;6538:27;;6575:81;6653:1;6642:9;6638:17;6629:6;6575:81;:::i;:::-;6666:72;6734:2;6723:9;6719:18;6710:6;6666:72;:::i;:::-;6748;6816:2;6805:9;6801:18;6792:6;6748:72;:::i;:::-;6830;6898:2;6887:9;6883:18;6874:6;6830:72;:::i;:::-;6912:67;6974:3;6963:9;6959:19;6950:6;6912:67;:::i;:::-;6989;7051:3;7040:9;7036:19;7027:6;6989:67;:::i;:::-;6292:771;;;;;;;;;:::o;7069:498::-;7149:6;7157;7206:2;7194:9;7185:7;7181:23;7177:32;7174:119;;;7212:79;;:::i;:::-;7174:119;7332:1;7357:53;7402:7;7393:6;7382:9;7378:22;7357:53;:::i;:::-;7347:63;;7303:117;7459:2;7485:65;7542:7;7533:6;7522:9;7518:22;7485:65;:::i;:::-;7475:75;;7430:130;7069:498;;;;;:::o;7573:320::-;7688:4;7726:2;7715:9;7711:18;7703:26;;7739:65;7801:1;7790:9;7786:17;7777:6;7739:65;:::i;:::-;7814:72;7882:2;7871:9;7867:18;7858:6;7814:72;:::i;:::-;7573:320;;;;;:::o;7899:498::-;7979:6;7987;8036:2;8024:9;8015:7;8011:23;8007:32;8004:119;;;8042:79;;:::i;:::-;8004:119;8162:1;8187:65;8244:7;8235:6;8224:9;8220:22;8187:65;:::i;:::-;8177:75;;8133:129;8301:2;8327:53;8372:7;8363:6;8352:9;8348:22;8327:53;:::i;:::-;8317:63;;8272:118;7899:498;;;;;:::o;8403:60::-;8431:3;8452:5;8445:12;;8403:60;;;:::o;8469:142::-;8519:9;8552:53;8570:34;8579:24;8597:5;8579:24;:::i;:::-;8570:34;:::i;:::-;8552:53;:::i;:::-;8539:66;;8469:142;;;:::o;8617:126::-;8667:9;8700:37;8731:5;8700:37;:::i;:::-;8687:50;;8617:126;;;:::o;8749:151::-;8824:9;8857:37;8888:5;8857:37;:::i;:::-;8844:50;;8749:151;;;:::o;8906:181::-;9018:62;9074:5;9018:62;:::i;:::-;9013:3;9006:75;8906:181;;:::o;9093:272::-;9211:4;9249:2;9238:9;9234:18;9226:26;;9262:96;9355:1;9344:9;9340:17;9331:6;9262:96;:::i;:::-;9093:272;;;;:::o;9371:180::-;9419:77;9416:1;9409:88;9516:4;9513:1;9506:15;9540:4;9537:1;9530:15;9557:194;9597:4;9617:20;9635:1;9617:20;:::i;:::-;9612:25;;9651:20;9669:1;9651:20;:::i;:::-;9646:25;;9695:1;9692;9688:9;9680:17;;9719:1;9713:4;9710:11;9707:37;;;9724:18;;:::i;:::-;9707:37;9557:194;;;;:::o;9757:143::-;9814:5;9845:6;9839:13;9830:22;;9861:33;9888:5;9861:33;:::i;:::-;9757:143;;;;:::o;9906:351::-;9976:6;10025:2;10013:9;10004:7;10000:23;9996:32;9993:119;;;10031:79;;:::i;:::-;9993:119;10151:1;10176:64;10232:7;10223:6;10212:9;10208:22;10176:64;:::i;:::-;10166:74;;10122:128;9906:351;;;;:::o;10263:332::-;10384:4;10422:2;10411:9;10407:18;10399:26;;10435:71;10503:1;10492:9;10488:17;10479:6;10435:71;:::i;:::-;10516:72;10584:2;10573:9;10569:18;10560:6;10516:72;:::i;:::-;10263:332;;;;;:::o;10601:191::-;10641:3;10660:20;10678:1;10660:20;:::i;:::-;10655:25;;10694:20;10712:1;10694:20;:::i;:::-;10689:25;;10737:1;10734;10730:9;10723:16;;10758:3;10755:1;10752:10;10749:36;;;10765:18;;:::i;:::-;10749:36;10601:191;;;;:::o;10798:332::-;10919:4;10957:2;10946:9;10942:18;10934:26;;10970:71;11038:1;11027:9;11023:17;11014:6;10970:71;:::i;:::-;11051:72;11119:2;11108:9;11104:18;11095:6;11051:72;:::i;:::-;10798:332;;;;;:::o;11136:430::-;11279:4;11317:2;11306:9;11302:18;11294:26;;11330:71;11398:1;11387:9;11383:17;11374:6;11330:71;:::i;:::-;11411:72;11479:2;11468:9;11464:18;11455:6;11411:72;:::i;:::-;11493:66;11555:2;11544:9;11540:18;11531:6;11493:66;:::i;:::-;11136:430;;;;;;:::o;11572:410::-;11612:7;11635:20;11653:1;11635:20;:::i;:::-;11630:25;;11669:20;11687:1;11669:20;:::i;:::-;11664:25;;11724:1;11721;11717:9;11746:30;11764:11;11746:30;:::i;:::-;11735:41;;11925:1;11916:7;11912:15;11909:1;11906:22;11886:1;11879:9;11859:83;11836:139;;11955:18;;:::i;:::-;11836:139;11620:362;11572:410;;;;:::o;11988:180::-;12036:77;12033:1;12026:88;12133:4;12130:1;12123:15;12157:4;12154:1;12147:15;12174:143;12231:5;12262:6;12256:13;12247:22;;12278:33;12305:5;12278:33;:::i;:::-;12174:143;;;;:::o;12323:351::-;12393:6;12442:2;12430:9;12421:7;12417:23;12413:32;12410:119;;;12448:79;;:::i;:::-;12410:119;12568:1;12593:64;12649:7;12640:6;12629:9;12625:22;12593:64;:::i;:::-;12583:74;;12539:128;12323:351;;;;:::o;12680:320::-;12795:4;12833:2;12822:9;12818:18;12810:26;;12846:71;12914:1;12903:9;12899:17;12890:6;12846:71;:::i;:::-;12927:66;12989:2;12978:9;12974:18;12965:6;12927:66;:::i;:::-;12680:320;;;;;:::o;13006:86::-;13041:7;13081:4;13074:5;13070:16;13059:27;;13006:86;;;:::o;13098:118::-;13169:22;13185:5;13169:22;:::i;:::-;13162:5;13159:33;13149:61;;13206:1;13203;13196:12;13149:61;13098:118;:::o;13222:139::-;13277:5;13308:6;13302:13;13293:22;;13324:31;13349:5;13324:31;:::i;:::-;13222:139;;;;:::o;13367:347::-;13435:6;13484:2;13472:9;13463:7;13459:23;13455:32;13452:119;;;13490:79;;:::i;:::-;13452:119;13610:1;13635:62;13689:7;13680:6;13669:9;13665:22;13635:62;:::i;:::-;13625:72;;13581:126;13367:347;;;;:::o;13720:102::-;13762:8;13809:5;13806:1;13802:13;13781:34;;13720:102;;;:::o;13828:848::-;13889:5;13896:4;13920:6;13911:15;;13944:5;13935:14;;13958:712;13979:1;13969:8;13966:15;13958:712;;;14074:4;14069:3;14065:14;14059:4;14056:24;14053:50;;;14083:18;;:::i;:::-;14053:50;14133:1;14123:8;14119:16;14116:451;;;14548:4;14541:5;14537:16;14528:25;;14116:451;14598:4;14592;14588:15;14580:23;;14628:32;14651:8;14628:32;:::i;:::-;14616:44;;13958:712;;;13828:848;;;;;;;:::o;14682:1073::-;14736:5;14927:8;14917:40;;14948:1;14939:10;;14950:5;;14917:40;14976:4;14966:36;;14993:1;14984:10;;14995:5;;14966:36;15062:4;15110:1;15105:27;;;;15146:1;15141:191;;;;15055:277;;15105:27;15123:1;15114:10;;15125:5;;;15141:191;15186:3;15176:8;15173:17;15170:43;;;15193:18;;:::i;:::-;15170:43;15242:8;15239:1;15235:16;15226:25;;15277:3;15270:5;15267:14;15264:40;;;15284:18;;:::i;:::-;15264:40;15317:5;;;15055:277;;15441:2;15431:8;15428:16;15422:3;15416:4;15413:13;15409:36;15391:2;15381:8;15378:16;15373:2;15367:4;15364:12;15360:35;15344:111;15341:246;;;15497:8;15491:4;15487:19;15478:28;;15532:3;15525:5;15522:14;15519:40;;;15539:18;;:::i;:::-;15519:40;15572:5;;15341:246;15612:42;15650:3;15640:8;15634:4;15631:1;15612:42;:::i;:::-;15597:57;;;;15686:4;15681:3;15677:14;15670:5;15667:25;15664:51;;;15695:18;;:::i;:::-;15664:51;15744:4;15737:5;15733:16;15724:25;;14682:1073;;;;;;:::o;15761:281::-;15819:5;15843:23;15861:4;15843:23;:::i;:::-;15835:31;;15887:25;15903:8;15887:25;:::i;:::-;15875:37;;15931:104;15968:66;15958:8;15952:4;15931:104;:::i;:::-;15922:113;;15761:281;;;;:::o;16048:180::-;16096:77;16093:1;16086:88;16193:4;16190:1;16183:15;16217:4;16214:1;16207:15;16234:185;16274:1;16291:20;16309:1;16291:20;:::i;:::-;16286:25;;16325:20;16343:1;16325:20;:::i;:::-;16320:25;;16364:1;16354:35;;16369:18;;:::i;:::-;16354:35;16411:1;16408;16404:9;16399:14;;16234:185;;;;:::o;16425:442::-;16574:4;16612:2;16601:9;16597:18;16589:26;;16625:71;16693:1;16682:9;16678:17;16669:6;16625:71;:::i;:::-;16706:72;16774:2;16763:9;16759:18;16750:6;16706:72;:::i;:::-;16788;16856:2;16845:9;16841:18;16832:6;16788:72;:::i;:::-;16425:442;;;;;;:::o;16873:116::-;16943:21;16958:5;16943:21;:::i;:::-;16936:5;16933:32;16923:60;;16979:1;16976;16969:12;16923:60;16873:116;:::o;16995:137::-;17049:5;17080:6;17074:13;17065:22;;17096:30;17120:5;17096:30;:::i;:::-;16995:137;;;;:::o;17138:345::-;17205:6;17254:2;17242:9;17233:7;17229:23;17225:32;17222:119;;;17260:79;;:::i;:::-;17222:119;17380:1;17405:61;17458:7;17449:6;17438:9;17434:22;17405:61;:::i;:::-;17395:71;;17351:125;17138:345;;;;:::o;17489:98::-;17540:6;17574:5;17568:12;17558:22;;17489:98;;;:::o;17593:147::-;17694:11;17731:3;17716:18;;17593:147;;;;:::o;17746:246::-;17827:1;17837:113;17851:6;17848:1;17845:13;17837:113;;;17936:1;17931:3;17927:11;17921:18;17917:1;17912:3;17908:11;17901:39;17873:2;17870:1;17866:10;17861:15;;17837:113;;;17984:1;17975:6;17970:3;17966:16;17959:27;17808:184;17746:246;;;:::o;17998:386::-;18102:3;18130:38;18162:5;18130:38;:::i;:::-;18184:88;18265:6;18260:3;18184:88;:::i;:::-;18177:95;;18281:65;18339:6;18334:3;18327:4;18320:5;18316:16;18281:65;:::i;:::-;18371:6;18366:3;18362:16;18355:23;;18106:278;17998:386;;;;:::o;18390:271::-;18520:3;18542:93;18631:3;18622:6;18542:93;:::i;:::-;18535:100;;18652:3;18645:10;;18390:271;;;;:::o","linkReferences":{},"immutableReferences":{"58622":[{"start":2616,"length":32},{"start":2785,"length":32},{"start":3576,"length":32},{"start":4227,"length":32},{"start":4522,"length":32},{"start":6912,"length":32},{"start":8104,"length":32},{"start":9235,"length":32},{"start":9318,"length":32},{"start":9790,"length":32},{"start":13092,"length":32}],"58624":[{"start":4840,"length":32},{"start":4980,"length":32},{"start":10479,"length":32},{"start":12152,"length":32}]}},"methodIdentifiers":{"auditReserves()":"2b7ce500","authority()":"bf7e214f","baseSupply()":"860f5048","blocksNeededForQueue()":"d07f390f","bondCalculator(address)":"1af4da70","debtLimit(address)":"5619004b","deposit(address,uint256,uint256)":"0efe6a8b","disable(uint8,address)":"52991831","enable(uint8,address,address)":"e4e33ef8","excessReserves()":"0c3513a8","execute(uint256)":"fe0d94c1","ftso()":"0da0c022","ftsoDebt()":"857e62da","incurDebt(address,uint256)":"724000c1","indexInRegistry(address,uint8)":"93988b53","manage(address,uint256)":"0b0eee30","mint(address,uint256)":"40c10f19","nullify(uint256)":"71a45c95","onChainGovernanceTimelock()":"b39df88e","permissionQueue(uint256)":"503edcf0","permissions(uint8,address)":"330dd345","queueTimelock(uint8,address,address)":"1d6d5f05","registry(uint8,uint256)":"a44b8287","repayDebtWithFtso(uint256)":"1b3200b9","repayDebtWithReserves(address,uint256)":"dd9e2028","setAuthority(address)":"7a9e5e4b","setDebtLimit(address,uint256)":"9edd8d43","stnk()":"45c57eb5","timelockEnabled()":"b320f6a9","toggleTimelock()":"e8da0ad8","tokenValue(address,uint256)":"f1821783","totalDebt()":"fc7b9c18","totalReserves()":"8f840ddd","withdraw(address,uint256)":"f3fef3a3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ftso\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_timelock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_authority\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ActionExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ActionNullified\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientReserves\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyQueueTimelock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimelockDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TimelockNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TreasuryExceeds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"CreateDebt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Managed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"queued\",\"type\":\"address\"}],\"name\":\"PermissionQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Permissioned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"RepayDebt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"totalReserves\",\"type\":\"uint256\"}],\"name\":\"ReservesAudited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"auditReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"internalType\":\"contract IGhostAuthority\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blocksNeededForQueue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bondCalculator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"debtLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"send\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"toDisable\",\"type\":\"address\"}],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"someAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calculatorAddress\",\"type\":\"address\"}],\"name\":\"enable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excessReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ftso\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ftsoDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"incurDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"someAddress\",\"type\":\"address\"},{\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"indexInRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"nullify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onChainGovernanceTimelock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"permissionQueue\",\"outputs\":[{\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"managing\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"toPermit\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calculator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timelockEnd\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"nullify\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"executed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"permissions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"someAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calculatorAddress\",\"type\":\"address\"}],\"name\":\"queueTimelock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ITreasury.STATUS\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"repayDebtWithFtso\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"repayDebtWithReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"setDebtLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stnk\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timelockEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"toggleTimelock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"tokenValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Treasury.sol\":\"GhostTreasury\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"src/Treasury.sol\":{\"keccak256\":\"0xa61802c5bd2307ff3abbe6e38ba5e9cfd852e0c3ee738f289eb1a4c6f5450a32\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1324a1a7b8da523369eaec2fca4a58918da938e945866f47f45b344c21b2f82f\",\"dweb:/ipfs/QmaNf619U7sXZ9xmap3Stq3UePmN84HR35anG71YB9fmNg\"]},\"src/interfaces/IBondingCalculator.sol\":{\"keccak256\":\"0xccd54e87a9c9809469f23041f41374ac7d0de8eea169049497358d21e98ae19a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29c9b228e7981b271bbad9e2370f973fb17074d070f10c94be2b2290c9420002\",\"dweb:/ipfs/QmWmGcF75Qi7hzo6k6d8gBjqsofNCkffw8ZrSqu8im6mrh\"]},\"src/interfaces/IFTSO.sol\":{\"keccak256\":\"0x2350b4ada28bd220fdb3917bb2229859e7bb785abc052f02c3802294efd55f9e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc9fe7ab8f6a691b612e2c8b1955d49f3fd30f7bf4327d723ce1f29a7a098f15\",\"dweb:/ipfs/QmWwyhEM3TvzHG3KWiiPeLtBXy2vSw2fhjvEggUrDFsVk2\"]},\"src/interfaces/IGhostAuthority.sol\":{\"keccak256\":\"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b\",\"dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd\"]},\"src/interfaces/ISTNK.sol\":{\"keccak256\":\"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b\",\"dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ\"]},\"src/interfaces/ITreasury.sol\":{\"keccak256\":\"0xd1d69ec10aa6f19bc3775c19341b60af9324c0596671d30de5ae97604d3ee800\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6dfb466171b0e6f08d3e577ffdf457d3a12a8e3f2a41331f0a40a6abddd0c95a\",\"dweb:/ipfs/QmdLJtAFwD2B4tTqdaxAWG3qrR6uJw5nM6NMMJCEU9frVR\"]},\"src/types/GhostAccessControlled.sol\":{\"keccak256\":\"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0\",\"dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_ftso","type":"address"},{"internalType":"uint256","name":"_timelock","type":"uint256"},{"internalType":"address","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ActionExecuted"},{"inputs":[],"type":"error","name":"ActionNullified"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"AddressInsufficientBalance"},{"inputs":[],"type":"error","name":"AlreadyInitialized"},{"inputs":[],"type":"error","name":"EmptyAddress"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InsufficientReserves"},{"inputs":[],"type":"error","name":"InvalidToken"},{"inputs":[],"type":"error","name":"NotAccepted"},{"inputs":[],"type":"error","name":"NotApproved"},{"inputs":[],"type":"error","name":"OnlyQueueTimelock"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"},{"inputs":[],"type":"error","name":"TimelockDisabled"},{"inputs":[],"type":"error","name":"TimelockNotComplete"},{"inputs":[],"type":"error","name":"TreasuryExceeds"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[{"internalType":"address","name":"authority","type":"address","indexed":false}],"type":"event","name":"AuthorityUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"debtor","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"CreateDebt","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Deposit","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"Managed","anonymous":false},{"inputs":[{"internalType":"address","name":"caller","type":"address","indexed":true},{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"Minted","anonymous":false},{"inputs":[{"internalType":"enum ITreasury.STATUS","name":"status","type":"uint8","indexed":true},{"internalType":"address","name":"queued","type":"address","indexed":false}],"type":"event","name":"PermissionQueued","anonymous":false},{"inputs":[{"internalType":"address","name":"addr","type":"address","indexed":false},{"internalType":"enum ITreasury.STATUS","name":"status","type":"uint8","indexed":true},{"internalType":"bool","name":"result","type":"bool","indexed":false}],"type":"event","name":"Permissioned","anonymous":false},{"inputs":[{"internalType":"address","name":"debtor","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"RepayDebt","anonymous":false},{"inputs":[{"internalType":"uint256","name":"totalReserves","type":"uint256","indexed":true}],"type":"event","name":"ReservesAudited","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Withdrawal","anonymous":false},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"auditReserves"},{"inputs":[],"stateMutability":"view","type":"function","name":"authority","outputs":[{"internalType":"contract IGhostAuthority","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"debtLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"profit","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deposit","outputs":[{"internalType":"uint256","name":"send","type":"uint256"}]},{"inputs":[{"internalType":"enum ITreasury.STATUS","name":"status","type":"uint8"},{"internalType":"address","name":"toDisable","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"disable"},{"inputs":[{"internalType":"enum ITreasury.STATUS","name":"status","type":"uint8"},{"internalType":"address","name":"someAddress","type":"address"},{"internalType":"address","name":"calculatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"enable"},{"inputs":[],"stateMutability":"view","type":"function","name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"execute"},{"inputs":[],"stateMutability":"view","type":"function","name":"ftso","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"ftsoDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"incurDebt"},{"inputs":[{"internalType":"address","name":"someAddress","type":"address"},{"internalType":"enum ITreasury.STATUS","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"indexInRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"manage"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"nullify"},{"inputs":[],"stateMutability":"view","type":"function","name":"onChainGovernanceTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"permissionQueue","outputs":[{"internalType":"enum ITreasury.STATUS","name":"managing","type":"uint8"},{"internalType":"address","name":"toPermit","type":"address"},{"internalType":"address","name":"calculator","type":"address"},{"internalType":"uint256","name":"timelockEnd","type":"uint256"},{"internalType":"bool","name":"nullify","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}]},{"inputs":[{"internalType":"enum ITreasury.STATUS","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"enum ITreasury.STATUS","name":"status","type":"uint8"},{"internalType":"address","name":"someAddress","type":"address"},{"internalType":"address","name":"calculatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"queueTimelock"},{"inputs":[{"internalType":"enum ITreasury.STATUS","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"registry","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"repayDebtWithFtso"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"repayDebtWithReserves"},{"inputs":[{"internalType":"address","name":"newAuthority","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAuthority"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"limit","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setDebtLimit"},{"inputs":[],"stateMutability":"view","type":"function","name":"stnk","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"timelockEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"toggleTimelock"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenValue","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Treasury.sol":"GhostTreasury"},"evmVersion":"shanghai","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"src/Treasury.sol":{"keccak256":"0xa61802c5bd2307ff3abbe6e38ba5e9cfd852e0c3ee738f289eb1a4c6f5450a32","urls":["bzz-raw://1324a1a7b8da523369eaec2fca4a58918da938e945866f47f45b344c21b2f82f","dweb:/ipfs/QmaNf619U7sXZ9xmap3Stq3UePmN84HR35anG71YB9fmNg"],"license":"MIT"},"src/interfaces/IBondingCalculator.sol":{"keccak256":"0xccd54e87a9c9809469f23041f41374ac7d0de8eea169049497358d21e98ae19a","urls":["bzz-raw://29c9b228e7981b271bbad9e2370f973fb17074d070f10c94be2b2290c9420002","dweb:/ipfs/QmWmGcF75Qi7hzo6k6d8gBjqsofNCkffw8ZrSqu8im6mrh"],"license":"MIT"},"src/interfaces/IFTSO.sol":{"keccak256":"0x2350b4ada28bd220fdb3917bb2229859e7bb785abc052f02c3802294efd55f9e","urls":["bzz-raw://fc9fe7ab8f6a691b612e2c8b1955d49f3fd30f7bf4327d723ce1f29a7a098f15","dweb:/ipfs/QmWwyhEM3TvzHG3KWiiPeLtBXy2vSw2fhjvEggUrDFsVk2"],"license":"MIT"},"src/interfaces/IGhostAuthority.sol":{"keccak256":"0xaa4a6a627f5745686400519a9c26a7a17ecb01b0f3bf361d83d905eee8dec37b","urls":["bzz-raw://2aa06c129e2e28b8b7e3742c33782c90dd9a26eb169f0fe2f4865f5d96cb3f5b","dweb:/ipfs/QmZLEwNyYnoHP1FBpzSzCyEJjju3bkps7GCLiySc1dK3Xd"],"license":"MIT"},"src/interfaces/ISTNK.sol":{"keccak256":"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf","urls":["bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b","dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ"],"license":"MIT"},"src/interfaces/ITreasury.sol":{"keccak256":"0xd1d69ec10aa6f19bc3775c19341b60af9324c0596671d30de5ae97604d3ee800","urls":["bzz-raw://6dfb466171b0e6f08d3e577ffdf457d3a12a8e3f2a41331f0a40a6abddd0c95a","dweb:/ipfs/QmdLJtAFwD2B4tTqdaxAWG3qrR6uJw5nM6NMMJCEU9frVR"],"license":"MIT"},"src/types/GhostAccessControlled.sol":{"keccak256":"0x065897783d98ef086460f7130fda753bca7cdd2ebd9b8011f34e7d4ddcf7211d","urls":["bzz-raw://e912269fb428f1ba2ab14a036125b3d488dcc6b11445e2adb80fefa794674da0","dweb:/ipfs/QmeWbhBZvtkAPieW14gyMzXP26x8A8CXw1NmVPS9uCc5MW"],"license":"MIT"}},"version":1},"id":94} \ No newline at end of file diff --git a/src/abi/Reserve.json b/src/abi/Reserve.json new file mode 100644 index 0000000..de8f62d --- /dev/null +++ b/src/abi/Reserve.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"symbol","type":"string","internalType":"string"},{"name":"rate","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"changeRate","inputs":[{"name":"rate","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"conversionRate","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superMint","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"receiver","type":"address","internalType":"address payable"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidShortString","inputs":[]},{"type":"error","name":"OnlyOwner","inputs":[]},{"type":"error","name":"StringTooLong","inputs":[{"name":"str","type":"string","internalType":"string"}]}],"bytecode":{"object":"0x61018060405234801562000011575f80fd5b5060405162002bf538038062002bf583398181016040528101906200003791906200046e565b82806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508585816003908162000082919062000733565b50806004908162000094919062000733565b505050620000ad6005836200018d60201b90919060201c565b6101208181525050620000cb6006826200018d60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506200010a620001e260201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050505050806008819055503373ffffffffffffffffffffffffffffffffffffffff166101608173ffffffffffffffffffffffffffffffffffffffff1681525050505050620009f0565b5f602083511015620001b257620001aa836200023e60201b60201c565b9050620001dc565b82620001c483620002a860201b60201c565b5f019081620001d4919062000733565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016200022395949392919062000885565b60405160208183030381529060405280519060200120905090565b5f80829050601f815111156200028d57826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040162000284919062000930565b60405180910390fd5b8051816200029b9062000981565b5f1c175f1b915050919050565b5f819050919050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200031282620002ca565b810181811067ffffffffffffffff82111715620003345762000333620002da565b5b80604052505050565b5f62000348620002b1565b905062000356828262000307565b919050565b5f67ffffffffffffffff821115620003785762000377620002da565b5b6200038382620002ca565b9050602081019050919050565b5f5b83811015620003af57808201518184015260208101905062000392565b5f8484015250505050565b5f620003d0620003ca846200035b565b6200033d565b905082815260208101848484011115620003ef57620003ee620002c6565b5b620003fc84828562000390565b509392505050565b5f82601f8301126200041b576200041a620002c2565b5b81516200042d848260208601620003ba565b91505092915050565b5f819050919050565b6200044a8162000436565b811462000455575f80fd5b50565b5f8151905062000468816200043f565b92915050565b5f805f60608486031215620004885762000487620002ba565b5b5f84015167ffffffffffffffff811115620004a857620004a7620002be565b5b620004b68682870162000404565b935050602084015167ffffffffffffffff811115620004da57620004d9620002be565b5b620004e88682870162000404565b9250506040620004fb8682870162000458565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200055457607f821691505b6020821081036200056a57620005696200050f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000591565b620005da868362000591565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200061b620006156200060f8462000436565b620005f2565b62000436565b9050919050565b5f819050919050565b6200063683620005fb565b6200064e620006458262000622565b8484546200059d565b825550505050565b5f90565b6200066462000656565b620006718184846200062b565b505050565b5b8181101562000698576200068c5f826200065a565b60018101905062000677565b5050565b601f821115620006e757620006b18162000570565b620006bc8462000582565b81016020851015620006cc578190505b620006e4620006db8562000582565b83018262000676565b50505b505050565b5f82821c905092915050565b5f620007095f1984600802620006ec565b1980831691505092915050565b5f620007238383620006f8565b9150826002028217905092915050565b6200073e8262000505565b67ffffffffffffffff8111156200075a5762000759620002da565b5b6200076682546200053c565b620007738282856200069c565b5f60209050601f831160018114620007a9575f841562000794578287015190505b620007a0858262000716565b8655506200080f565b601f198416620007b98662000570565b5f5b82811015620007e257848901518255600182019150602085019450602081019050620007bb565b86831015620008025784890151620007fe601f891682620006f8565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b6200082b8162000817565b82525050565b6200083c8162000436565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200086d8262000842565b9050919050565b6200087f8162000861565b82525050565b5f60a0820190506200089a5f83018862000820565b620008a9602083018762000820565b620008b8604083018662000820565b620008c7606083018562000831565b620008d6608083018462000874565b9695505050505050565b5f82825260208201905092915050565b5f620008fc8262000505565b620009088185620008e0565b93506200091a81856020860162000390565b6200092581620002ca565b840191505092915050565b5f6020820190508181035f8301526200094a8184620008f0565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f62000978825162000817565b80915050919050565b5f6200098d8262000952565b8262000999846200095c565b9050620009a6816200096b565b92506020821015620009e957620009e47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262000591565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516101605161219b62000a5a5f395f8181610595015281816107180152610adc01525f610ec701525f610e8c01525f6113c001525f61139f01525f610d8a01525f610de001525f610e09015261219b5ff3fe60806040526004361061010c575f3560e01c806374e7493b1161009457806395d89b411161006357806395d89b4114610387578063a9059cbb146103b1578063d505accf146103ed578063dd62ed3e14610415578063fa6171e4146104515761011d565b806374e7493b146102c95780637ecebe00146102f15780637ffdf53e1461032d57806384b0196e146103575761011d565b8063313ce567116100db578063313ce567146101f55780633644e5151461021f57806351cff8d9146102495780636a6278421461027157806370a082311461028d5761011d565b806306fdde0314610129578063095ea7b31461015357806318160ddd1461018f57806323b872dd146101b95761011d565b3661011d5761011b3334610479565b005b6101273334610479565b005b348015610134575f80fd5b5061013d610494565b60405161014a9190611890565b60405180910390f35b34801561015e575f80fd5b5061017960048036038101906101749190611941565b610524565b6040516101869190611999565b60405180910390f35b34801561019a575f80fd5b506101a3610546565b6040516101b091906119c1565b60405180910390f35b3480156101c4575f80fd5b506101df60048036038101906101da91906119da565b61054f565b6040516101ec9190611999565b60405180910390f35b348015610200575f80fd5b5061020961057d565b6040516102169190611a45565b60405180910390f35b34801561022a575f80fd5b50610233610585565b6040516102409190611a76565b60405180910390f35b348015610254575f80fd5b5061026f600480360381019061026a9190611aca565b610593565b005b61028b60048036038101906102869190611af5565b6106c4565b005b348015610298575f80fd5b506102b360048036038101906102ae9190611af5565b6106d1565b6040516102c091906119c1565b60405180910390f35b3480156102d4575f80fd5b506102ef60048036038101906102ea9190611b20565b610716565b005b3480156102fc575f80fd5b5061031760048036038101906103129190611af5565b6107a5565b60405161032491906119c1565b60405180910390f35b348015610338575f80fd5b506103416107b6565b60405161034e91906119c1565b60405180910390f35b348015610362575f80fd5b5061036b6107bc565b60405161037e9796959493929190611c4b565b60405180910390f35b348015610392575f80fd5b5061039b610861565b6040516103a89190611890565b60405180910390f35b3480156103bc575f80fd5b506103d760048036038101906103d29190611941565b6108f1565b6040516103e49190611999565b60405180910390f35b3480156103f8575f80fd5b50610413600480360381019061040e9190611d21565b610913565b005b348015610420575f80fd5b5061043b60048036038101906104369190611dbe565b610a58565b60405161044891906119c1565b60405180910390f35b34801561045c575f80fd5b5061047760048036038101906104729190611941565b610ada565b005b610490826008548361048b9190611e29565b610b6d565b5050565b6060600380546104a390611e97565b80601f01602080910402602001604051908101604052809291908181526020018280546104cf90611e97565b801561051a5780601f106104f15761010080835404028352916020019161051a565b820191905f5260205f20905b8154815290600101906020018083116104fd57829003601f168201915b5050505050905090565b5f8061052e610bec565b905061053b818585610bf3565b600191505092915050565b5f600254905090565b5f80610559610bec565b9050610566858285610c05565b610571858585610c97565b60019150509392505050565b5f6012905090565b5f61058e610d87565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610618576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161063d90611ef4565b5f6040518083038185875af1925050503d805f8114610677576040519150601f19603f3d011682016040523d82523d5f602084013e61067c565b606091505b50509050806106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b790611f52565b60405180910390fd5b5050565b6106ce8134610479565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079b576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060088190555050565b5f6107af82610e3d565b9050919050565b60085481565b5f6060805f805f60606107cd610e83565b6107d5610ebe565b46305f801b5f67ffffffffffffffff8111156107f4576107f3611f70565b5b6040519080825280602002602001820160405280156108225781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b60606004805461087090611e97565b80601f016020809104026020016040519081016040528092919081815260200182805461089c90611e97565b80156108e75780601f106108be576101008083540402835291602001916108e7565b820191905f5260205f20905b8154815290600101906020018083116108ca57829003601f168201915b5050505050905090565b5f806108fb610bec565b9050610908818585610c97565b600191505092915050565b8342111561095857836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161094f91906119c1565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109868c610ef9565b8960405160200161099c96959493929190611f9d565b6040516020818303038152906040528051906020012090505f6109be82610f4c565b90505f6109cd82878787610f65565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a4157808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610a38929190611ffc565b60405180910390fd5b610a4c8a8a8a610bf3565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b5f576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b698282610479565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bdd575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610bd49190612023565b60405180910390fd5b610be85f8383610f93565b5050565b5f33905090565b610c0083838360016111ac565b505050565b5f610c108484610a58565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c915781811015610c82578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c799392919061203c565b60405180910390fd5b610c9084848484035f6111ac565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d07575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cfe9190612023565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d77575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d6e9190612023565b60405180910390fd5b610d82838383610f93565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610e0257507f000000000000000000000000000000000000000000000000000000000000000046145b15610e2f577f00000000000000000000000000000000000000000000000000000000000000009050610e3a565b610e3761137b565b90505b90565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610eb960057f000000000000000000000000000000000000000000000000000000000000000061141090919063ffffffff16565b905090565b6060610ef460067f000000000000000000000000000000000000000000000000000000000000000061141090919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610f5e610f58610d87565b836114bd565b9050919050565b5f805f80610f75888888886114fd565b925092509250610f8582826115e4565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fe3578060025f828254610fd79190612071565b925050819055506110b1565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561106c578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110639392919061203c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f8578060025f8282540392505081905550611142565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119f91906119c1565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361121c575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016112139190612023565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361128c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016112839190612023565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611375578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161136c91906119c1565b60405180910390a35b50505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016113f59594939291906120a4565b60405160208183030381529060405280519060200120905090565b606060ff5f1b831461142c5761142583611746565b90506114b7565b81805461143890611e97565b80601f016020809104026020016040519081016040528092919081815260200182805461146490611e97565b80156114af5780601f10611486576101008083540402835291602001916114af565b820191905f5260205f20905b81548152906001019060200180831161149257829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611539575f6003859250925092506115da565b5f6001888888886040515f815260200160405260405161155c94939291906120f5565b6020604051602081039080840390855afa15801561157c573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115cd575f60015f801b935093509350506115da565b805f805f1b935093509350505b9450945094915050565b5f60038111156115f7576115f6612138565b5b82600381111561160a57611609612138565b5b0315611742576001600381111561162457611623612138565b5b82600381111561163757611636612138565b5b0361166e576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561168257611681612138565b5b82600381111561169557611694612138565b5b036116d957805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016116d091906119c1565b60405180910390fd5b6003808111156116ec576116eb612138565b5b8260038111156116ff576116fe612138565b5b0361174157806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016117389190611a76565b60405180910390fd5b5b5050565b60605f611752836117b8565b90505f602067ffffffffffffffff8111156117705761176f611f70565b5b6040519080825280601f01601f1916602001820160405280156117a25781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156117fd576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561183d578082015181840152602081019050611822565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61186282611806565b61186c8185611810565b935061187c818560208601611820565b61188581611848565b840191505092915050565b5f6020820190508181035f8301526118a88184611858565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118dd826118b4565b9050919050565b6118ed816118d3565b81146118f7575f80fd5b50565b5f81359050611908816118e4565b92915050565b5f819050919050565b6119208161190e565b811461192a575f80fd5b50565b5f8135905061193b81611917565b92915050565b5f8060408385031215611957576119566118b0565b5b5f611964858286016118fa565b92505060206119758582860161192d565b9150509250929050565b5f8115159050919050565b6119938161197f565b82525050565b5f6020820190506119ac5f83018461198a565b92915050565b6119bb8161190e565b82525050565b5f6020820190506119d45f8301846119b2565b92915050565b5f805f606084860312156119f1576119f06118b0565b5b5f6119fe868287016118fa565b9350506020611a0f868287016118fa565b9250506040611a208682870161192d565b9150509250925092565b5f60ff82169050919050565b611a3f81611a2a565b82525050565b5f602082019050611a585f830184611a36565b92915050565b5f819050919050565b611a7081611a5e565b82525050565b5f602082019050611a895f830184611a67565b92915050565b5f611a99826118b4565b9050919050565b611aa981611a8f565b8114611ab3575f80fd5b50565b5f81359050611ac481611aa0565b92915050565b5f60208284031215611adf57611ade6118b0565b5b5f611aec84828501611ab6565b91505092915050565b5f60208284031215611b0a57611b096118b0565b5b5f611b17848285016118fa565b91505092915050565b5f60208284031215611b3557611b346118b0565b5b5f611b428482850161192d565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611b7f81611b4b565b82525050565b611b8e816118d3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611bc68161190e565b82525050565b5f611bd78383611bbd565b60208301905092915050565b5f602082019050919050565b5f611bf982611b94565b611c038185611b9e565b9350611c0e83611bae565b805f5b83811015611c3e578151611c258882611bcc565b9750611c3083611be3565b925050600181019050611c11565b5085935050505092915050565b5f60e082019050611c5e5f83018a611b76565b8181036020830152611c708189611858565b90508181036040830152611c848188611858565b9050611c9360608301876119b2565b611ca06080830186611b85565b611cad60a0830185611a67565b81810360c0830152611cbf8184611bef565b905098975050505050505050565b611cd681611a2a565b8114611ce0575f80fd5b50565b5f81359050611cf181611ccd565b92915050565b611d0081611a5e565b8114611d0a575f80fd5b50565b5f81359050611d1b81611cf7565b92915050565b5f805f805f805f60e0888a031215611d3c57611d3b6118b0565b5b5f611d498a828b016118fa565b9750506020611d5a8a828b016118fa565b9650506040611d6b8a828b0161192d565b9550506060611d7c8a828b0161192d565b9450506080611d8d8a828b01611ce3565b93505060a0611d9e8a828b01611d0d565b92505060c0611daf8a828b01611d0d565b91505092959891949750929550565b5f8060408385031215611dd457611dd36118b0565b5b5f611de1858286016118fa565b9250506020611df2858286016118fa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e338261190e565b9150611e3e8361190e565b9250828202611e4c8161190e565b91508282048414831517611e6357611e62611dfc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611eae57607f821691505b602082108103611ec157611ec0611e6a565b5b50919050565b5f81905092915050565b50565b5f611edf5f83611ec7565b9150611eea82611ed1565b5f82019050919050565b5f611efe82611ed4565b9150819050919050565b7f4661696c656420746f2073656e642045746865720000000000000000000000005f82015250565b5f611f3c601483611810565b9150611f4782611f08565b602082019050919050565b5f6020820190508181035f830152611f6981611f30565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611fb05f830189611a67565b611fbd6020830188611b85565b611fca6040830187611b85565b611fd760608301866119b2565b611fe460808301856119b2565b611ff160a08301846119b2565b979650505050505050565b5f60408201905061200f5f830185611b85565b61201c6020830184611b85565b9392505050565b5f6020820190506120365f830184611b85565b92915050565b5f60608201905061204f5f830186611b85565b61205c60208301856119b2565b61206960408301846119b2565b949350505050565b5f61207b8261190e565b91506120868361190e565b925082820190508082111561209e5761209d611dfc565b5b92915050565b5f60a0820190506120b75f830188611a67565b6120c46020830187611a67565b6120d16040830186611a67565b6120de60608301856119b2565b6120eb6080830184611b85565b9695505050505050565b5f6080820190506121085f830187611a67565b6121156020830186611a36565b6121226040830185611a67565b61212f6060830184611a67565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220b3ebe24eea71c80d9947fc55ddd86ec2360494fda72bea475cd8d13660811dbb64736f6c63430008140033","sourceMap":"132:1269:114:-:0;;;267:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;397:4;1613::23;3328:431:37;;;;;;;;;;;;;;;;;371:4:114;377:6;1970:5:21;1962;:13;;;;;;:::i;:::-;;1995:7;1985;:17;;;;;;:::i;:::-;;1896:113;;3401:45:37;3432:13;3401:4;:30;;;;:45;;;;:::i;:::-;3393:53;;;;;;3467:51;3501:16;3467:7;:33;;;;:51;;;;:::i;:::-;3456:62;;;;;;3558:4;3542:22;;;;;;3528:36;;;;;;3607:7;3591:25;;;;;;3574:42;;;;;;3644:13;3627:30;;;;;;3692:23;:21;;;:23;;:::i;:::-;3667:48;;;;;;3747:4;3725:27;;;;;;;;;;3328:431;;1574:52:23;430:4:114::2;413:14;:21;;;;453:10;444:19;;;;;;;;::::0;::::2;267:203:::0;;;132:1269;;2914:340:33;3010:11;3059:2;3043:5;3037:19;:24;3033:215;;;3084:20;3098:5;3084:13;;;:20;;:::i;:::-;3077:27;;;;3033:215;3176:5;3135:32;3161:5;3135:25;;;:32;;:::i;:::-;:38;;:46;;;;;;:::i;:::-;;1390:66;3219:17;;3195:42;;2914:340;;;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;;4239:14;;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;1708:286:33:-;1773:11;1796:17;1822:3;1796:30;;1854:2;1840:4;:11;:16;1836:72;;;1893:3;1879:18;;;;;;;;;;;:::i;:::-;;;;;;;;1836:72;1974:4;:11;1965:4;1957:13;;;:::i;:::-;1949:22;;:36;1941:45;;1917:70;;;1708:286;;;:::o;3135:202:34:-;3203:20;3311:10;3301:20;;3135:202;;;:::o;7:75:133:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:102;621:6;672:2;668:7;663:2;656:5;652:14;648:28;638:38;;580:102;;;:::o;688:180::-;736:77;733:1;726:88;833:4;830:1;823:15;857:4;854:1;847:15;874:281;957:27;979:4;957:27;:::i;:::-;949:6;945:40;1087:6;1075:10;1072:22;1051:18;1039:10;1036:34;1033:62;1030:88;;;1098:18;;:::i;:::-;1030:88;1138:10;1134:2;1127:22;917:238;874:281;;:::o;1161:129::-;1195:6;1222:20;;:::i;:::-;1212:30;;1251:33;1279:4;1271:6;1251:33;:::i;:::-;1161:129;;;:::o;1296:308::-;1358:4;1448:18;1440:6;1437:30;1434:56;;;1470:18;;:::i;:::-;1434:56;1508:29;1530:6;1508:29;:::i;:::-;1500:37;;1592:4;1586;1582:15;1574:23;;1296:308;;;:::o;1610:246::-;1691:1;1701:113;1715:6;1712:1;1709:13;1701:113;;;1800:1;1795:3;1791:11;1785:18;1781:1;1776:3;1772:11;1765:39;1737:2;1734:1;1730:10;1725:15;;1701:113;;;1848:1;1839:6;1834:3;1830:16;1823:27;1672:184;1610:246;;;:::o;1862:434::-;1951:5;1976:66;1992:49;2034:6;1992:49;:::i;:::-;1976:66;:::i;:::-;1967:75;;2065:6;2058:5;2051:21;2103:4;2096:5;2092:16;2141:3;2132:6;2127:3;2123:16;2120:25;2117:112;;;2148:79;;:::i;:::-;2117:112;2238:52;2283:6;2278:3;2273;2238:52;:::i;:::-;1957:339;1862:434;;;;;:::o;2316:355::-;2383:5;2432:3;2425:4;2417:6;2413:17;2409:27;2399:122;;2440:79;;:::i;:::-;2399:122;2550:6;2544:13;2575:90;2661:3;2653:6;2646:4;2638:6;2634:17;2575:90;:::i;:::-;2566:99;;2389:282;2316:355;;;;:::o;2677:77::-;2714:7;2743:5;2732:16;;2677:77;;;:::o;2760:122::-;2833:24;2851:5;2833:24;:::i;:::-;2826:5;2823:35;2813:63;;2872:1;2869;2862:12;2813:63;2760:122;:::o;2888:143::-;2945:5;2976:6;2970:13;2961:22;;2992:33;3019:5;2992:33;:::i;:::-;2888:143;;;;:::o;3037:1009::-;3145:6;3153;3161;3210:2;3198:9;3189:7;3185:23;3181:32;3178:119;;;3216:79;;:::i;:::-;3178:119;3357:1;3346:9;3342:17;3336:24;3387:18;3379:6;3376:30;3373:117;;;3409:79;;:::i;:::-;3373:117;3514:74;3580:7;3571:6;3560:9;3556:22;3514:74;:::i;:::-;3504:84;;3307:291;3658:2;3647:9;3643:18;3637:25;3689:18;3681:6;3678:30;3675:117;;;3711:79;;:::i;:::-;3675:117;3816:74;3882:7;3873:6;3862:9;3858:22;3816:74;:::i;:::-;3806:84;;3608:292;3939:2;3965:64;4021:7;4012:6;4001:9;3997:22;3965:64;:::i;:::-;3955:74;;3910:129;3037:1009;;;;;:::o;4052:99::-;4104:6;4138:5;4132:12;4122:22;;4052:99;;;:::o;4157:180::-;4205:77;4202:1;4195:88;4302:4;4299:1;4292:15;4326:4;4323:1;4316:15;4343:320;4387:6;4424:1;4418:4;4414:12;4404:22;;4471:1;4465:4;4461:12;4492:18;4482:81;;4548:4;4540:6;4536:17;4526:27;;4482:81;4610:2;4602:6;4599:14;4579:18;4576:38;4573:84;;4629:18;;:::i;:::-;4573:84;4394:269;4343:320;;;:::o;4669:141::-;4718:4;4741:3;4733:11;;4764:3;4761:1;4754:14;4798:4;4795:1;4785:18;4777:26;;4669:141;;;:::o;4816:93::-;4853:6;4900:2;4895;4888:5;4884:14;4880:23;4870:33;;4816:93;;;:::o;4915:107::-;4959:8;5009:5;5003:4;4999:16;4978:37;;4915:107;;;;:::o;5028:393::-;5097:6;5147:1;5135:10;5131:18;5170:97;5200:66;5189:9;5170:97;:::i;:::-;5288:39;5318:8;5307:9;5288:39;:::i;:::-;5276:51;;5360:4;5356:9;5349:5;5345:21;5336:30;;5409:4;5399:8;5395:19;5388:5;5385:30;5375:40;;5104:317;;5028:393;;;;;:::o;5427:60::-;5455:3;5476:5;5469:12;;5427:60;;;:::o;5493:142::-;5543:9;5576:53;5594:34;5603:24;5621:5;5603:24;:::i;:::-;5594:34;:::i;:::-;5576:53;:::i;:::-;5563:66;;5493:142;;;:::o;5641:75::-;5684:3;5705:5;5698:12;;5641:75;;;:::o;5722:269::-;5832:39;5863:7;5832:39;:::i;:::-;5893:91;5942:41;5966:16;5942:41;:::i;:::-;5934:6;5927:4;5921:11;5893:91;:::i;:::-;5887:4;5880:105;5798:193;5722:269;;;:::o;5997:73::-;6042:3;5997:73;:::o;6076:189::-;6153:32;;:::i;:::-;6194:65;6252:6;6244;6238:4;6194:65;:::i;:::-;6129:136;6076:189;;:::o;6271:186::-;6331:120;6348:3;6341:5;6338:14;6331:120;;;6402:39;6439:1;6432:5;6402:39;:::i;:::-;6375:1;6368:5;6364:13;6355:22;;6331:120;;;6271:186;;:::o;6463:543::-;6564:2;6559:3;6556:11;6553:446;;;6598:38;6630:5;6598:38;:::i;:::-;6682:29;6700:10;6682:29;:::i;:::-;6672:8;6668:44;6865:2;6853:10;6850:18;6847:49;;;6886:8;6871:23;;6847:49;6909:80;6965:22;6983:3;6965:22;:::i;:::-;6955:8;6951:37;6938:11;6909:80;:::i;:::-;6568:431;;6553:446;6463:543;;;:::o;7012:117::-;7066:8;7116:5;7110:4;7106:16;7085:37;;7012:117;;;;:::o;7135:169::-;7179:6;7212:51;7260:1;7256:6;7248:5;7245:1;7241:13;7212:51;:::i;:::-;7208:56;7293:4;7287;7283:15;7273:25;;7186:118;7135:169;;;;:::o;7309:295::-;7385:4;7531:29;7556:3;7550:4;7531:29;:::i;:::-;7523:37;;7593:3;7590:1;7586:11;7580:4;7577:21;7569:29;;7309:295;;;;:::o;7609:1395::-;7726:37;7759:3;7726:37;:::i;:::-;7828:18;7820:6;7817:30;7814:56;;;7850:18;;:::i;:::-;7814:56;7894:38;7926:4;7920:11;7894:38;:::i;:::-;7979:67;8039:6;8031;8025:4;7979:67;:::i;:::-;8073:1;8097:4;8084:17;;8129:2;8121:6;8118:14;8146:1;8141:618;;;;8803:1;8820:6;8817:77;;;8869:9;8864:3;8860:19;8854:26;8845:35;;8817:77;8920:67;8980:6;8973:5;8920:67;:::i;:::-;8914:4;8907:81;8776:222;8111:887;;8141:618;8193:4;8189:9;8181:6;8177:22;8227:37;8259:4;8227:37;:::i;:::-;8286:1;8300:208;8314:7;8311:1;8308:14;8300:208;;;8393:9;8388:3;8384:19;8378:26;8370:6;8363:42;8444:1;8436:6;8432:14;8422:24;;8491:2;8480:9;8476:18;8463:31;;8337:4;8334:1;8330:12;8325:17;;8300:208;;;8536:6;8527:7;8524:19;8521:179;;;8594:9;8589:3;8585:19;8579:26;8637:48;8679:4;8671:6;8667:17;8656:9;8637:48;:::i;:::-;8629:6;8622:64;8544:156;8521:179;8746:1;8742;8734:6;8730:14;8726:22;8720:4;8713:36;8148:611;;;8111:887;;7701:1303;;;7609:1395;;:::o;9010:77::-;9047:7;9076:5;9065:16;;9010:77;;;:::o;9093:118::-;9180:24;9198:5;9180:24;:::i;:::-;9175:3;9168:37;9093:118;;:::o;9217:::-;9304:24;9322:5;9304:24;:::i;:::-;9299:3;9292:37;9217:118;;:::o;9341:126::-;9378:7;9418:42;9411:5;9407:54;9396:65;;9341:126;;;:::o;9473:96::-;9510:7;9539:24;9557:5;9539:24;:::i;:::-;9528:35;;9473:96;;;:::o;9575:118::-;9662:24;9680:5;9662:24;:::i;:::-;9657:3;9650:37;9575:118;;:::o;9699:664::-;9904:4;9942:3;9931:9;9927:19;9919:27;;9956:71;10024:1;10013:9;10009:17;10000:6;9956:71;:::i;:::-;10037:72;10105:2;10094:9;10090:18;10081:6;10037:72;:::i;:::-;10119;10187:2;10176:9;10172:18;10163:6;10119:72;:::i;:::-;10201;10269:2;10258:9;10254:18;10245:6;10201:72;:::i;:::-;10283:73;10351:3;10340:9;10336:19;10327:6;10283:73;:::i;:::-;9699:664;;;;;;;;:::o;10369:169::-;10453:11;10487:6;10482:3;10475:19;10527:4;10522:3;10518:14;10503:29;;10369:169;;;;:::o;10544:377::-;10632:3;10660:39;10693:5;10660:39;:::i;:::-;10715:71;10779:6;10774:3;10715:71;:::i;:::-;10708:78;;10795:65;10853:6;10848:3;10841:4;10834:5;10830:16;10795:65;:::i;:::-;10885:29;10907:6;10885:29;:::i;:::-;10880:3;10876:39;10869:46;;10636:285;10544:377;;;;:::o;10927:313::-;11040:4;11078:2;11067:9;11063:18;11055:26;;11127:9;11121:4;11117:20;11113:1;11102:9;11098:17;11091:47;11155:78;11228:4;11219:6;11155:78;:::i;:::-;11147:86;;10927:313;;;;:::o;11246:98::-;11297:6;11331:5;11325:12;11315:22;;11246:98;;;:::o;11350:116::-;11401:4;11424:3;11416:11;;11454:4;11449:3;11445:14;11437:22;;11350:116;;;:::o;11472:154::-;11515:11;11551:29;11575:3;11569:10;11551:29;:::i;:::-;11614:5;11590:29;;11527:99;11472:154;;;:::o;11632:594::-;11716:5;11747:38;11779:5;11747:38;:::i;:::-;11810:5;11837:40;11871:5;11837:40;:::i;:::-;11825:52;;11896:35;11922:8;11896:35;:::i;:::-;11887:44;;11955:2;11947:6;11944:14;11941:278;;;12026:169;12111:66;12081:6;12077:2;12073:15;12070:1;12066:23;12026:169;:::i;:::-;12003:5;11982:227;11973:236;;11941:278;11722:504;;11632:594;;;:::o;132:1269:114:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061010c575f3560e01c806374e7493b1161009457806395d89b411161006357806395d89b4114610387578063a9059cbb146103b1578063d505accf146103ed578063dd62ed3e14610415578063fa6171e4146104515761011d565b806374e7493b146102c95780637ecebe00146102f15780637ffdf53e1461032d57806384b0196e146103575761011d565b8063313ce567116100db578063313ce567146101f55780633644e5151461021f57806351cff8d9146102495780636a6278421461027157806370a082311461028d5761011d565b806306fdde0314610129578063095ea7b31461015357806318160ddd1461018f57806323b872dd146101b95761011d565b3661011d5761011b3334610479565b005b6101273334610479565b005b348015610134575f80fd5b5061013d610494565b60405161014a9190611890565b60405180910390f35b34801561015e575f80fd5b5061017960048036038101906101749190611941565b610524565b6040516101869190611999565b60405180910390f35b34801561019a575f80fd5b506101a3610546565b6040516101b091906119c1565b60405180910390f35b3480156101c4575f80fd5b506101df60048036038101906101da91906119da565b61054f565b6040516101ec9190611999565b60405180910390f35b348015610200575f80fd5b5061020961057d565b6040516102169190611a45565b60405180910390f35b34801561022a575f80fd5b50610233610585565b6040516102409190611a76565b60405180910390f35b348015610254575f80fd5b5061026f600480360381019061026a9190611aca565b610593565b005b61028b60048036038101906102869190611af5565b6106c4565b005b348015610298575f80fd5b506102b360048036038101906102ae9190611af5565b6106d1565b6040516102c091906119c1565b60405180910390f35b3480156102d4575f80fd5b506102ef60048036038101906102ea9190611b20565b610716565b005b3480156102fc575f80fd5b5061031760048036038101906103129190611af5565b6107a5565b60405161032491906119c1565b60405180910390f35b348015610338575f80fd5b506103416107b6565b60405161034e91906119c1565b60405180910390f35b348015610362575f80fd5b5061036b6107bc565b60405161037e9796959493929190611c4b565b60405180910390f35b348015610392575f80fd5b5061039b610861565b6040516103a89190611890565b60405180910390f35b3480156103bc575f80fd5b506103d760048036038101906103d29190611941565b6108f1565b6040516103e49190611999565b60405180910390f35b3480156103f8575f80fd5b50610413600480360381019061040e9190611d21565b610913565b005b348015610420575f80fd5b5061043b60048036038101906104369190611dbe565b610a58565b60405161044891906119c1565b60405180910390f35b34801561045c575f80fd5b5061047760048036038101906104729190611941565b610ada565b005b610490826008548361048b9190611e29565b610b6d565b5050565b6060600380546104a390611e97565b80601f01602080910402602001604051908101604052809291908181526020018280546104cf90611e97565b801561051a5780601f106104f15761010080835404028352916020019161051a565b820191905f5260205f20905b8154815290600101906020018083116104fd57829003601f168201915b5050505050905090565b5f8061052e610bec565b905061053b818585610bf3565b600191505092915050565b5f600254905090565b5f80610559610bec565b9050610566858285610c05565b610571858585610c97565b60019150509392505050565b5f6012905090565b5f61058e610d87565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610618576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161063d90611ef4565b5f6040518083038185875af1925050503d805f8114610677576040519150601f19603f3d011682016040523d82523d5f602084013e61067c565b606091505b50509050806106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b790611f52565b60405180910390fd5b5050565b6106ce8134610479565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079b576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060088190555050565b5f6107af82610e3d565b9050919050565b60085481565b5f6060805f805f60606107cd610e83565b6107d5610ebe565b46305f801b5f67ffffffffffffffff8111156107f4576107f3611f70565b5b6040519080825280602002602001820160405280156108225781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b60606004805461087090611e97565b80601f016020809104026020016040519081016040528092919081815260200182805461089c90611e97565b80156108e75780601f106108be576101008083540402835291602001916108e7565b820191905f5260205f20905b8154815290600101906020018083116108ca57829003601f168201915b5050505050905090565b5f806108fb610bec565b9050610908818585610c97565b600191505092915050565b8342111561095857836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161094f91906119c1565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109868c610ef9565b8960405160200161099c96959493929190611f9d565b6040516020818303038152906040528051906020012090505f6109be82610f4c565b90505f6109cd82878787610f65565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a4157808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610a38929190611ffc565b60405180910390fd5b610a4c8a8a8a610bf3565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b5f576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b698282610479565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bdd575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610bd49190612023565b60405180910390fd5b610be85f8383610f93565b5050565b5f33905090565b610c0083838360016111ac565b505050565b5f610c108484610a58565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c915781811015610c82578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c799392919061203c565b60405180910390fd5b610c9084848484035f6111ac565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d07575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cfe9190612023565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d77575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d6e9190612023565b60405180910390fd5b610d82838383610f93565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610e0257507f000000000000000000000000000000000000000000000000000000000000000046145b15610e2f577f00000000000000000000000000000000000000000000000000000000000000009050610e3a565b610e3761137b565b90505b90565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610eb960057f000000000000000000000000000000000000000000000000000000000000000061141090919063ffffffff16565b905090565b6060610ef460067f000000000000000000000000000000000000000000000000000000000000000061141090919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610f5e610f58610d87565b836114bd565b9050919050565b5f805f80610f75888888886114fd565b925092509250610f8582826115e4565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fe3578060025f828254610fd79190612071565b925050819055506110b1565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561106c578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110639392919061203c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f8578060025f8282540392505081905550611142565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119f91906119c1565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361121c575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016112139190612023565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361128c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016112839190612023565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611375578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161136c91906119c1565b60405180910390a35b50505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016113f59594939291906120a4565b60405160208183030381529060405280519060200120905090565b606060ff5f1b831461142c5761142583611746565b90506114b7565b81805461143890611e97565b80601f016020809104026020016040519081016040528092919081815260200182805461146490611e97565b80156114af5780601f10611486576101008083540402835291602001916114af565b820191905f5260205f20905b81548152906001019060200180831161149257829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611539575f6003859250925092506115da565b5f6001888888886040515f815260200160405260405161155c94939291906120f5565b6020604051602081039080840390855afa15801561157c573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115cd575f60015f801b935093509350506115da565b805f805f1b935093509350505b9450945094915050565b5f60038111156115f7576115f6612138565b5b82600381111561160a57611609612138565b5b0315611742576001600381111561162457611623612138565b5b82600381111561163757611636612138565b5b0361166e576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561168257611681612138565b5b82600381111561169557611694612138565b5b036116d957805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016116d091906119c1565b60405180910390fd5b6003808111156116ec576116eb612138565b5b8260038111156116ff576116fe612138565b5b0361174157806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016117389190611a76565b60405180910390fd5b5b5050565b60605f611752836117b8565b90505f602067ffffffffffffffff8111156117705761176f611f70565b5b6040519080825280601f01601f1916602001820160405280156117a25781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156117fd576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561183d578082015181840152602081019050611822565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61186282611806565b61186c8185611810565b935061187c818560208601611820565b61188581611848565b840191505092915050565b5f6020820190508181035f8301526118a88184611858565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118dd826118b4565b9050919050565b6118ed816118d3565b81146118f7575f80fd5b50565b5f81359050611908816118e4565b92915050565b5f819050919050565b6119208161190e565b811461192a575f80fd5b50565b5f8135905061193b81611917565b92915050565b5f8060408385031215611957576119566118b0565b5b5f611964858286016118fa565b92505060206119758582860161192d565b9150509250929050565b5f8115159050919050565b6119938161197f565b82525050565b5f6020820190506119ac5f83018461198a565b92915050565b6119bb8161190e565b82525050565b5f6020820190506119d45f8301846119b2565b92915050565b5f805f606084860312156119f1576119f06118b0565b5b5f6119fe868287016118fa565b9350506020611a0f868287016118fa565b9250506040611a208682870161192d565b9150509250925092565b5f60ff82169050919050565b611a3f81611a2a565b82525050565b5f602082019050611a585f830184611a36565b92915050565b5f819050919050565b611a7081611a5e565b82525050565b5f602082019050611a895f830184611a67565b92915050565b5f611a99826118b4565b9050919050565b611aa981611a8f565b8114611ab3575f80fd5b50565b5f81359050611ac481611aa0565b92915050565b5f60208284031215611adf57611ade6118b0565b5b5f611aec84828501611ab6565b91505092915050565b5f60208284031215611b0a57611b096118b0565b5b5f611b17848285016118fa565b91505092915050565b5f60208284031215611b3557611b346118b0565b5b5f611b428482850161192d565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611b7f81611b4b565b82525050565b611b8e816118d3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611bc68161190e565b82525050565b5f611bd78383611bbd565b60208301905092915050565b5f602082019050919050565b5f611bf982611b94565b611c038185611b9e565b9350611c0e83611bae565b805f5b83811015611c3e578151611c258882611bcc565b9750611c3083611be3565b925050600181019050611c11565b5085935050505092915050565b5f60e082019050611c5e5f83018a611b76565b8181036020830152611c708189611858565b90508181036040830152611c848188611858565b9050611c9360608301876119b2565b611ca06080830186611b85565b611cad60a0830185611a67565b81810360c0830152611cbf8184611bef565b905098975050505050505050565b611cd681611a2a565b8114611ce0575f80fd5b50565b5f81359050611cf181611ccd565b92915050565b611d0081611a5e565b8114611d0a575f80fd5b50565b5f81359050611d1b81611cf7565b92915050565b5f805f805f805f60e0888a031215611d3c57611d3b6118b0565b5b5f611d498a828b016118fa565b9750506020611d5a8a828b016118fa565b9650506040611d6b8a828b0161192d565b9550506060611d7c8a828b0161192d565b9450506080611d8d8a828b01611ce3565b93505060a0611d9e8a828b01611d0d565b92505060c0611daf8a828b01611d0d565b91505092959891949750929550565b5f8060408385031215611dd457611dd36118b0565b5b5f611de1858286016118fa565b9250506020611df2858286016118fa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e338261190e565b9150611e3e8361190e565b9250828202611e4c8161190e565b91508282048414831517611e6357611e62611dfc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611eae57607f821691505b602082108103611ec157611ec0611e6a565b5b50919050565b5f81905092915050565b50565b5f611edf5f83611ec7565b9150611eea82611ed1565b5f82019050919050565b5f611efe82611ed4565b9150819050919050565b7f4661696c656420746f2073656e642045746865720000000000000000000000005f82015250565b5f611f3c601483611810565b9150611f4782611f08565b602082019050919050565b5f6020820190508181035f830152611f6981611f30565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611fb05f830189611a67565b611fbd6020830188611b85565b611fca6040830187611b85565b611fd760608301866119b2565b611fe460808301856119b2565b611ff160a08301846119b2565b979650505050505050565b5f60408201905061200f5f830185611b85565b61201c6020830184611b85565b9392505050565b5f6020820190506120365f830184611b85565b92915050565b5f60608201905061204f5f830186611b85565b61205c60208301856119b2565b61206960408301846119b2565b949350505050565b5f61207b8261190e565b91506120868361190e565b925082820190508082111561209e5761209d611dfc565b5b92915050565b5f60a0820190506120b75f830188611a67565b6120c46020830187611a67565b6120d16040830186611a67565b6120de60608301856119b2565b6120eb6080830184611b85565b9695505050505050565b5f6080820190506121085f830187611a67565b6121156020830186611a36565b6121226040830185611a67565b61212f6060830184611a67565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220b3ebe24eea71c80d9947fc55ddd86ec2360494fda72bea475cd8d13660811dbb64736f6c63430008140033","sourceMap":"132:1269:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;597:33;608:10;620:9;597:10;:33::i;:::-;132:1269;;514:33;525:10;537:9;514:10;:33::i;:::-;132:1269;2074:89:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5039:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3002:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2656:112:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;784:235:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1188:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3299:116:21;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;643:135:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2406:143:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;208:29:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:557:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2276:93:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3610:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1680:672:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3846:140:21;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1025:157:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1289:110;1357:35;1363:3;1377:14;;1368:6;:23;;;;:::i;:::-;1357:5;:35::i;:::-;1289:110;;:::o;2074:89:21:-;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;4382:13;4398:12;:10;:12::i;:::-;4382:28;;4420:31;4429:5;4436:7;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;:::o;3144:97::-;3196:7;3222:12;;3215:19;;3144:97;:::o;5039:244::-;5126:4;5142:15;5160:12;:10;:12::i;:::-;5142:30;;5182:37;5198:4;5204:7;5213:5;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;:::o;3002:82::-;3051:5;3075:2;3068:9;;3002:82;:::o;2656:112:23:-;2715:7;2741:20;:18;:20::i;:::-;2734:27;;2656:112;:::o;784:235:114:-;865:6;851:20;;:10;:20;;;847:44;;880:11;;;;;;;;;;;;;;847:44;902:9;916:8;:13;;938:21;916:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;901:64;;;983:4;975:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;837:182;784:235;:::o;1188:95::-;1246:30;1257:7;1266:9;1246:10;:30::i;:::-;1188:95;:::o;3299:116:21:-;3364:7;3390:9;:18;3400:7;3390:18;;;;;;;;;;;;;;;;3383:25;;3299:116;;;:::o;643:135:114:-;714:6;700:20;;:10;:20;;;696:44;;729:11;;;;;;;;;;;;;;696:44;767:4;750:14;:21;;;;643:135;:::o;2406:143:23:-;2497:7;2523:19;2536:5;2523:12;:19::i;:::-;2516:26;;2406:143;;;:::o;208:29:114:-;;;;:::o;5144:557:37:-;5242:13;5269:18;5301:21;5336:15;5365:25;5404:12;5430:27;5533:13;:11;:13::i;:::-;5560:16;:14;:16::i;:::-;5590:13;5625:4;5652:1;5644:10;;5682:1;5668:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:212;;;;;;;;;;;;;;;;;;;;;5144:557;;;;;;;:::o;2276:93:21:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;3610:178::-;3679:4;3695:13;3711:12;:10;:12::i;:::-;3695:28;;3733:27;3743:5;3750:2;3754:5;3733:9;:27::i;:::-;3777:4;3770:11;;;3610:178;;;;:::o;1680:672:23:-;1901:8;1883:15;:26;1879:97;;;1956:8;1932:33;;;;;;;;;;;:::i;:::-;;;;;;;;1879:97;1986:18;1022:95;2045:5;2052:7;2061:5;2068:16;2078:5;2068:9;:16::i;:::-;2086:8;2017:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2007:89;;;;;;1986:110;;2107:12;2122:28;2139:10;2122:16;:28::i;:::-;2107:43;;2161:14;2178:28;2192:4;2198:1;2201;2204;2178:13;:28::i;:::-;2161:45;;2230:5;2220:15;;:6;:15;;;2216:88;;2279:6;2287:5;2258:35;;;;;;;;;;;;:::i;:::-;;;;;;;;2216:88;2314:31;2323:5;2330:7;2339:5;2314:8;:31::i;:::-;1869:483;;;1680:672;;;;;;;:::o;3846:140:21:-;3926:7;3952:11;:18;3964:5;3952:18;;;;;;;;;;;;;;;:27;3971:7;3952:27;;;;;;;;;;;;;;;;3945:34;;3846:140;;;;:::o;1025:157:114:-;1113:6;1099:20;;:10;:20;;;1095:44;;1128:11;;;;;;;;;;;;;;1095:44;1149:26;1160:7;1169:5;1149:10;:26::i;:::-;1025:157;;:::o;7721:208:21:-;7810:1;7791:21;;:7;:21;;;7787:91;;7864:1;7835:32;;;;;;;;;;;:::i;:::-;;;;;;;;7787:91;7887:35;7903:1;7907:7;7916:5;7887:7;:35::i;:::-;7721:208;;:::o;656:96:31:-;709:7;735:10;728:17;;656:96;:::o;8989:128:21:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;10663:477::-;10762:24;10789:25;10799:5;10806:7;10789:9;:25::i;:::-;10762:52;;10848:17;10828:16;:37;10824:310;;10904:5;10885:16;:24;10881:130;;;10963:7;10972:16;10990:5;10936:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10881:130;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;:::-;10824:310;10752:388;10663:477;;;:::o;5656:300::-;5755:1;5739:18;;:4;:18;;;5735:86;;5807:1;5780:30;;;;;;;;;;;:::i;:::-;;;;;;;;5735:86;5848:1;5834:16;;:2;:16;;;5830:86;;5902:1;5873:32;;;;;;;;;;;:::i;:::-;;;;;;;;5830:86;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;:::-;5656:300;;;:::o;3845:262:37:-;3898:7;3938:11;3921:28;;3929:4;3921:28;;;:63;;;;;3970:14;3953:13;:31;3921:63;3917:184;;;4007:22;4000:29;;;;3917:184;4067:23;:21;:23::i;:::-;4060:30;;3845:262;;:::o;538:107:32:-;598:7;624;:14;632:5;624:14;;;;;;;;;;;;;;;;617:21;;538:107;;;:::o;6021:126:37:-;6067:13;6099:41;6126:13;6099:5;:26;;:41;;;;:::i;:::-;6092:48;;6021:126;:::o;6473:135::-;6522:13;6554:47;6584:16;6554:8;:29;;:47;;;;:::i;:::-;6547:54;;6473:135;:::o;759:395:32:-;819:7;1121;:14;1129:5;1121:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;1114:23;;759:395;;;:::o;4917:176:37:-;4994:7;5020:66;5053:20;:18;:20::i;:::-;5075:10;5020:32;:66::i;:::-;5013:73;;4917:176;;;:::o;6803:260:36:-;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;7047:9;7040:16;;;;;6803:260;;;;;;:::o;6271:1107:21:-;6376:1;6360:18;;:4;:18;;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;;;;;6356:540;;;6548:19;6570:9;:15;6580:4;6570:15;;;;;;;;;;;;;;;;6548:37;;6617:5;6603:11;:19;6599:115;;;6674:4;6680:11;6693:5;6649:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6599:115;6866:5;6852:11;:19;6834:9;:15;6844:4;6834:15;;;;;;;;;;;;;;;:37;;;;6534:362;6356:540;6924:1;6910:16;;:2;:16;;;6906:425;;7089:5;7073:12;;:21;;;;;;;;;;;6906:425;;;7301:5;7284:9;:13;7294:2;7284:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6906:425;7361:2;7346:25;;7355:4;7346:25;;;7365:5;7346:25;;;;;;:::i;:::-;;;;;;;;6271:1107;;;:::o;9949:432::-;10078:1;10061:19;;:5;:19;;;10057:89;;10132:1;10103:32;;;;;;;;;;;:::i;:::-;;;;;;;;10057:89;10178:1;10159:21;;:7;:21;;;10155:90;;10231:1;10203:31;;;;;;;;;;;:::i;:::-;;;;;;;;10155:90;10284:5;10254:11;:18;10266:5;10254:18;;;;;;;;;;;;;;;:27;10273:7;10254:27;;;;;;;;;;;;;;;:35;;;;10303:9;10299:76;;;10349:7;10333:31;;10342:5;10333:31;;;10358:5;10333:31;;;;;;:::i;:::-;;;;;;;;10299:76;9949:432;;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;4239:14;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;3385:267:33:-;3479:13;1390:66;3537:17;;3527:5;3508:46;3504:142;;3577:15;3586:5;3577:8;:15::i;:::-;3570:22;;;;3504:142;3630:5;3623:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3385:267;;;;;:::o;3353:401:38:-;3446:14;3555:4;3549:11;3585:10;3580:3;3573:23;3632:15;3625:4;3620:3;3616:14;3609:39;3684:10;3677:4;3672:3;3668:14;3661:34;3733:4;3728:3;3718:20;3708:30;;3524:224;3353:401;;;;:::o;5140:1530:36:-;5266:7;5275:12;5289:7;6199:66;6194:1;6186:10;;:79;6182:164;;;6297:1;6301:30;6333:1;6281:54;;;;;;;;6182:164;6440:14;6457:24;6467:4;6473:1;6476;6479;6457:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6440:41;;6513:1;6495:20;;:6;:20;;;6491:113;;6547:1;6551:29;6590:1;6582:10;;6531:62;;;;;;;;;6491:113;6622:6;6630:20;6660:1;6652:10;;6614:49;;;;;;;5140:1530;;;;;;;;;:::o;7196:532::-;7291:20;7282:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;7278:444;7327:7;7278:444;7387:29;7378:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;7374:348;;7439:23;;;;;;;;;;;;;;7374:348;7492:35;7483:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;7479:243;;7586:8;7578:17;;7550:46;;;;;;;;;;;:::i;:::-;;;;;;;;7479:243;7626:30;7617:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;7613:109;;7702:8;7679:32;;;;;;;;;;;:::i;:::-;;;;;;;;7613:109;7196:532;;;:::o;2078:405:33:-;2137:13;2162:11;2176:16;2187:4;2176:10;:16::i;:::-;2162:30;;2280:17;2311:2;2300:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2280:34;;2402:3;2397;2390:16;2442:4;2435;2430:3;2426:14;2419:28;2473:3;2466:10;;;;2078:405;;;:::o;2555:245::-;2616:7;2635:14;2688:4;2679;2652:33;;:40;2635:57;;2715:2;2706:6;:11;2702:69;;;2740:20;;;;;;;;;;;;;;2702:69;2787:6;2780:13;;;2555:245;;;:::o;7:99:133:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:77::-;4890:7;4919:5;4908:16;;4853:77;;;:::o;4936:118::-;5023:24;5041:5;5023:24;:::i;:::-;5018:3;5011:37;4936:118;;:::o;5060:222::-;5153:4;5191:2;5180:9;5176:18;5168:26;;5204:71;5272:1;5261:9;5257:17;5248:6;5204:71;:::i;:::-;5060:222;;;;:::o;5288:104::-;5333:7;5362:24;5380:5;5362:24;:::i;:::-;5351:35;;5288:104;;;:::o;5398:138::-;5479:32;5505:5;5479:32;:::i;:::-;5472:5;5469:43;5459:71;;5526:1;5523;5516:12;5459:71;5398:138;:::o;5542:155::-;5596:5;5634:6;5621:20;5612:29;;5650:41;5685:5;5650:41;:::i;:::-;5542:155;;;;:::o;5703:345::-;5770:6;5819:2;5807:9;5798:7;5794:23;5790:32;5787:119;;;5825:79;;:::i;:::-;5787:119;5945:1;5970:61;6023:7;6014:6;6003:9;5999:22;5970:61;:::i;:::-;5960:71;;5916:125;5703:345;;;;:::o;6054:329::-;6113:6;6162:2;6150:9;6141:7;6137:23;6133:32;6130:119;;;6168:79;;:::i;:::-;6130:119;6288:1;6313:53;6358:7;6349:6;6338:9;6334:22;6313:53;:::i;:::-;6303:63;;6259:117;6054:329;;;;:::o;6389:::-;6448:6;6497:2;6485:9;6476:7;6472:23;6468:32;6465:119;;;6503:79;;:::i;:::-;6465:119;6623:1;6648:53;6693:7;6684:6;6673:9;6669:22;6648:53;:::i;:::-;6638:63;;6594:117;6389:329;;;;:::o;6724:149::-;6760:7;6800:66;6793:5;6789:78;6778:89;;6724:149;;;:::o;6879:115::-;6964:23;6981:5;6964:23;:::i;:::-;6959:3;6952:36;6879:115;;:::o;7000:118::-;7087:24;7105:5;7087:24;:::i;:::-;7082:3;7075:37;7000:118;;:::o;7124:114::-;7191:6;7225:5;7219:12;7209:22;;7124:114;;;:::o;7244:184::-;7343:11;7377:6;7372:3;7365:19;7417:4;7412:3;7408:14;7393:29;;7244:184;;;;:::o;7434:132::-;7501:4;7524:3;7516:11;;7554:4;7549:3;7545:14;7537:22;;7434:132;;;:::o;7572:108::-;7649:24;7667:5;7649:24;:::i;:::-;7644:3;7637:37;7572:108;;:::o;7686:179::-;7755:10;7776:46;7818:3;7810:6;7776:46;:::i;:::-;7854:4;7849:3;7845:14;7831:28;;7686:179;;;;:::o;7871:113::-;7941:4;7973;7968:3;7964:14;7956:22;;7871:113;;;:::o;8020:732::-;8139:3;8168:54;8216:5;8168:54;:::i;:::-;8238:86;8317:6;8312:3;8238:86;:::i;:::-;8231:93;;8348:56;8398:5;8348:56;:::i;:::-;8427:7;8458:1;8443:284;8468:6;8465:1;8462:13;8443:284;;;8544:6;8538:13;8571:63;8630:3;8615:13;8571:63;:::i;:::-;8564:70;;8657:60;8710:6;8657:60;:::i;:::-;8647:70;;8503:224;8490:1;8487;8483:9;8478:14;;8443:284;;;8447:14;8743:3;8736:10;;8144:608;;;8020:732;;;;:::o;8758:1215::-;9107:4;9145:3;9134:9;9130:19;9122:27;;9159:69;9225:1;9214:9;9210:17;9201:6;9159:69;:::i;:::-;9275:9;9269:4;9265:20;9260:2;9249:9;9245:18;9238:48;9303:78;9376:4;9367:6;9303:78;:::i;:::-;9295:86;;9428:9;9422:4;9418:20;9413:2;9402:9;9398:18;9391:48;9456:78;9529:4;9520:6;9456:78;:::i;:::-;9448:86;;9544:72;9612:2;9601:9;9597:18;9588:6;9544:72;:::i;:::-;9626:73;9694:3;9683:9;9679:19;9670:6;9626:73;:::i;:::-;9709;9777:3;9766:9;9762:19;9753:6;9709:73;:::i;:::-;9830:9;9824:4;9820:20;9814:3;9803:9;9799:19;9792:49;9858:108;9961:4;9952:6;9858:108;:::i;:::-;9850:116;;8758:1215;;;;;;;;;;:::o;9979:118::-;10050:22;10066:5;10050:22;:::i;:::-;10043:5;10040:33;10030:61;;10087:1;10084;10077:12;10030:61;9979:118;:::o;10103:135::-;10147:5;10185:6;10172:20;10163:29;;10201:31;10226:5;10201:31;:::i;:::-;10103:135;;;;:::o;10244:122::-;10317:24;10335:5;10317:24;:::i;:::-;10310:5;10307:35;10297:63;;10356:1;10353;10346:12;10297:63;10244:122;:::o;10372:139::-;10418:5;10456:6;10443:20;10434:29;;10472:33;10499:5;10472:33;:::i;:::-;10372:139;;;;:::o;10517:1199::-;10628:6;10636;10644;10652;10660;10668;10676;10725:3;10713:9;10704:7;10700:23;10696:33;10693:120;;;10732:79;;:::i;:::-;10693:120;10852:1;10877:53;10922:7;10913:6;10902:9;10898:22;10877:53;:::i;:::-;10867:63;;10823:117;10979:2;11005:53;11050:7;11041:6;11030:9;11026:22;11005:53;:::i;:::-;10995:63;;10950:118;11107:2;11133:53;11178:7;11169:6;11158:9;11154:22;11133:53;:::i;:::-;11123:63;;11078:118;11235:2;11261:53;11306:7;11297:6;11286:9;11282:22;11261:53;:::i;:::-;11251:63;;11206:118;11363:3;11390:51;11433:7;11424:6;11413:9;11409:22;11390:51;:::i;:::-;11380:61;;11334:117;11490:3;11517:53;11562:7;11553:6;11542:9;11538:22;11517:53;:::i;:::-;11507:63;;11461:119;11619:3;11646:53;11691:7;11682:6;11671:9;11667:22;11646:53;:::i;:::-;11636:63;;11590:119;10517:1199;;;;;;;;;;:::o;11722:474::-;11790:6;11798;11847:2;11835:9;11826:7;11822:23;11818:32;11815:119;;;11853:79;;:::i;:::-;11815:119;11973:1;11998:53;12043:7;12034:6;12023:9;12019:22;11998:53;:::i;:::-;11988:63;;11944:117;12100:2;12126:53;12171:7;12162:6;12151:9;12147:22;12126:53;:::i;:::-;12116:63;;12071:118;11722:474;;;;;:::o;12202:180::-;12250:77;12247:1;12240:88;12347:4;12344:1;12337:15;12371:4;12368:1;12361:15;12388:410;12428:7;12451:20;12469:1;12451:20;:::i;:::-;12446:25;;12485:20;12503:1;12485:20;:::i;:::-;12480:25;;12540:1;12537;12533:9;12562:30;12580:11;12562:30;:::i;:::-;12551:41;;12741:1;12732:7;12728:15;12725:1;12722:22;12702:1;12695:9;12675:83;12652:139;;12771:18;;:::i;:::-;12652:139;12436:362;12388:410;;;;:::o;12804:180::-;12852:77;12849:1;12842:88;12949:4;12946:1;12939:15;12973:4;12970:1;12963:15;12990:320;13034:6;13071:1;13065:4;13061:12;13051:22;;13118:1;13112:4;13108:12;13139:18;13129:81;;13195:4;13187:6;13183:17;13173:27;;13129:81;13257:2;13249:6;13246:14;13226:18;13223:38;13220:84;;13276:18;;:::i;:::-;13220:84;13041:269;12990:320;;;:::o;13316:147::-;13417:11;13454:3;13439:18;;13316:147;;;;:::o;13469:114::-;;:::o;13589:398::-;13748:3;13769:83;13850:1;13845:3;13769:83;:::i;:::-;13762:90;;13861:93;13950:3;13861:93;:::i;:::-;13979:1;13974:3;13970:11;13963:18;;13589:398;;;:::o;13993:379::-;14177:3;14199:147;14342:3;14199:147;:::i;:::-;14192:154;;14363:3;14356:10;;13993:379;;;:::o;14378:170::-;14518:22;14514:1;14506:6;14502:14;14495:46;14378:170;:::o;14554:366::-;14696:3;14717:67;14781:2;14776:3;14717:67;:::i;:::-;14710:74;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14554:366;;;:::o;14926:419::-;15092:4;15130:2;15119:9;15115:18;15107:26;;15179:9;15173:4;15169:20;15165:1;15154:9;15150:17;15143:47;15207:131;15333:4;15207:131;:::i;:::-;15199:139;;14926:419;;;:::o;15351:180::-;15399:77;15396:1;15389:88;15496:4;15493:1;15486:15;15520:4;15517:1;15510:15;15537:775;15770:4;15808:3;15797:9;15793:19;15785:27;;15822:71;15890:1;15879:9;15875:17;15866:6;15822:71;:::i;:::-;15903:72;15971:2;15960:9;15956:18;15947:6;15903:72;:::i;:::-;15985;16053:2;16042:9;16038:18;16029:6;15985:72;:::i;:::-;16067;16135:2;16124:9;16120:18;16111:6;16067:72;:::i;:::-;16149:73;16217:3;16206:9;16202:19;16193:6;16149:73;:::i;:::-;16232;16300:3;16289:9;16285:19;16276:6;16232:73;:::i;:::-;15537:775;;;;;;;;;:::o;16318:332::-;16439:4;16477:2;16466:9;16462:18;16454:26;;16490:71;16558:1;16547:9;16543:17;16534:6;16490:71;:::i;:::-;16571:72;16639:2;16628:9;16624:18;16615:6;16571:72;:::i;:::-;16318:332;;;;;:::o;16656:222::-;16749:4;16787:2;16776:9;16772:18;16764:26;;16800:71;16868:1;16857:9;16853:17;16844:6;16800:71;:::i;:::-;16656:222;;;;:::o;16884:442::-;17033:4;17071:2;17060:9;17056:18;17048:26;;17084:71;17152:1;17141:9;17137:17;17128:6;17084:71;:::i;:::-;17165:72;17233:2;17222:9;17218:18;17209:6;17165:72;:::i;:::-;17247;17315:2;17304:9;17300:18;17291:6;17247:72;:::i;:::-;16884:442;;;;;;:::o;17332:191::-;17372:3;17391:20;17409:1;17391:20;:::i;:::-;17386:25;;17425:20;17443:1;17425:20;:::i;:::-;17420:25;;17468:1;17465;17461:9;17454:16;;17489:3;17486:1;17483:10;17480:36;;;17496:18;;:::i;:::-;17480:36;17332:191;;;;:::o;17529:664::-;17734:4;17772:3;17761:9;17757:19;17749:27;;17786:71;17854:1;17843:9;17839:17;17830:6;17786:71;:::i;:::-;17867:72;17935:2;17924:9;17920:18;17911:6;17867:72;:::i;:::-;17949;18017:2;18006:9;18002:18;17993:6;17949:72;:::i;:::-;18031;18099:2;18088:9;18084:18;18075:6;18031:72;:::i;:::-;18113:73;18181:3;18170:9;18166:19;18157:6;18113:73;:::i;:::-;17529:664;;;;;;;;:::o;18199:545::-;18372:4;18410:3;18399:9;18395:19;18387:27;;18424:71;18492:1;18481:9;18477:17;18468:6;18424:71;:::i;:::-;18505:68;18569:2;18558:9;18554:18;18545:6;18505:68;:::i;:::-;18583:72;18651:2;18640:9;18636:18;18627:6;18583:72;:::i;:::-;18665;18733:2;18722:9;18718:18;18709:6;18665:72;:::i;:::-;18199:545;;;;;;;:::o;18750:180::-;18798:77;18795:1;18788:88;18895:4;18892:1;18885:15;18919:4;18916:1;18909:15","linkReferences":{},"immutableReferences":{"63335":[{"start":1429,"length":32},{"start":1816,"length":32},{"start":2780,"length":32}],"8316":[{"start":3593,"length":32}],"8318":[{"start":3552,"length":32}],"8320":[{"start":3466,"length":32}],"8322":[{"start":5023,"length":32}],"8324":[{"start":5056,"length":32}],"8327":[{"start":3724,"length":32}],"8330":[{"start":3783,"length":32}]}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","changeRate(uint256)":"74e7493b","conversionRate()":"7ffdf53e","decimals()":"313ce567","eip712Domain()":"84b0196e","mint(address)":"6a627842","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","superMint(address,uint256)":"fa6171e4","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(address)":"51cff8d9"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"changeRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"superMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/mocks/Reserve.sol\":\"Reserve\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/mocks/Reserve.sol\":{\"keccak256\":\"0x0f88da39c2ee6c069ca18d7dcead613206de32b728ca2d88c59bf11f41679b5a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba8d153b513ce50ad4089ccc18f114cf2b9eb3fee71c9c8ae46e043c25ac491e\",\"dweb:/ipfs/QmerGskR8T7VxSqbFgd8Jo6B78mei9AUuLg5wtuKoCrXsV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidShortString"},{"inputs":[],"type":"error","name":"OnlyOwner"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"type":"error","name":"StringTooLong"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"changeRate"},{"inputs":[],"stateMutability":"view","type":"function","name":"conversionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"payable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"superMint"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/mocks/Reserve.sol":"Reserve"},"evmVersion":"shanghai","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol":{"keccak256":"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80","urls":["bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229","dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol":{"keccak256":"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee","urls":["bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2","dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol":{"keccak256":"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f","urls":["bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e","dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol":{"keccak256":"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6","urls":["bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c","dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol":{"keccak256":"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf","urls":["bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c","dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol":{"keccak256":"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0","urls":["bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21","dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435","urls":["bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c","dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/mocks/Reserve.sol":{"keccak256":"0x0f88da39c2ee6c069ca18d7dcead613206de32b728ca2d88c59bf11f41679b5a","urls":["bzz-raw://ba8d153b513ce50ad4089ccc18f114cf2b9eb3fee71c9c8ae46e043c25ac491e","dweb:/ipfs/QmerGskR8T7VxSqbFgd8Jo6B78mei9AUuLg5wtuKoCrXsV"],"license":"MIT"}},"version":1},"id":114} \ No newline at end of file diff --git a/src/abi/Stinky.json b/src/abi/Stinky.json new file mode 100644 index 0000000..415a065 --- /dev/null +++ b/src/abi/Stinky.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"usedIndex","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceForShares","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"who","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"changeDebt","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"debtor","type":"address","internalType":"address"},{"name":"add","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"circulatingSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"debtBalances","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"decreaseAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"imbalance","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"fromGhst","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRebase","inputs":[{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ISTNK.Rebase","components":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"rebase","type":"uint256","internalType":"uint256"},{"name":"totalStakedBefore","type":"uint256","internalType":"uint256"},{"name":"totalStakedAfter","type":"uint256","internalType":"uint256"},{"name":"amountRebased","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"},{"name":"blockNumberOccured","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"ghst","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"increaseAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"imbalance","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"index","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_staking","type":"address","internalType":"address"},{"name":"_treasury","type":"address","internalType":"address"},{"name":"_ghst","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rebase","inputs":[{"name":"supplyDelta","type":"uint256","internalType":"uint256"},{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"newTotalSupply","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"rebases","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"rebase","type":"uint256","internalType":"uint256"},{"name":"totalStakedBefore","type":"uint256","internalType":"uint256"},{"name":"totalStakedAfter","type":"uint256","internalType":"uint256"},{"name":"amountRebased","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"},{"name":"blockNumberOccured","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sharesForBalance","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"staking","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"toGhst","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"treasury","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"LogRebase","inputs":[{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"rebase","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LogStakingContractUpdated","inputs":[{"name":"stakingContract","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"LogSupply","inputs":[{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalSupply","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"DebtExists","inputs":[]},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InsufficientBalance","inputs":[]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidShortString","inputs":[]},{"type":"error","name":"NotInitializer","inputs":[]},{"type":"error","name":"NotStakingContract","inputs":[]},{"type":"error","name":"NotTreasury","inputs":[]},{"type":"error","name":"StringTooLong","inputs":[{"name":"str","type":"string","internalType":"string"}]}],"bytecode":{"object":"0x61018060405234801562000011575f80fd5b5060405162003b9038038062003b9083398181016040528101906200003791906200041a565b6040518060400160405280600681526020017f5374696e6b790000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5374696e6b7900000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53544e4b000000000000000000000000000000000000000000000000000000008152508160039081620001219190620006a5565b508060049081620001339190620006a5565b5050506200014c600583620002ba60201b90919060201c565b61012081815250506200016a600682620002ba60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001a96200030f60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050503360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508061016081815250506611c37937e08000600a819055506611c37937e08000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620002749190620007b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620002a191906200081a565b620002ad919062000854565b6009819055505062000a9e565b5f602083511015620002df57620002d7836200036b60201b60201c565b905062000309565b82620002f183620003d560201b60201c565b5f019081620003019190620006a5565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e05161010051463060405160200162000350959493929190620008f9565b60405160208183030381529060405280519060200120905090565b5f80829050601f81511115620003ba57826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401620003b19190620009de565b60405180910390fd5b805181620003c89062000a2f565b5f1c175f1b915050919050565b5f819050919050565b5f80fd5b5f819050919050565b620003f681620003e2565b811462000401575f80fd5b50565b5f815190506200041481620003eb565b92915050565b5f60208284031215620004325762000431620003de565b5b5f620004418482850162000404565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620004c657607f821691505b602082108103620004dc57620004db62000481565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000503565b6200054c868362000503565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200058d620005876200058184620003e2565b62000564565b620003e2565b9050919050565b5f819050919050565b620005a8836200056d565b620005c0620005b78262000594565b8484546200050f565b825550505050565b5f90565b620005d6620005c8565b620005e38184846200059d565b505050565b5b818110156200060a57620005fe5f82620005cc565b600181019050620005e9565b5050565b601f82111562000659576200062381620004e2565b6200062e84620004f4565b810160208510156200063e578190505b620006566200064d85620004f4565b830182620005e8565b50505b505050565b5f82821c905092915050565b5f6200067b5f19846008026200065e565b1980831691505092915050565b5f6200069583836200066a565b9150826002028217905092915050565b620006b0826200044a565b67ffffffffffffffff811115620006cc57620006cb62000454565b5b620006d88254620004ae565b620006e58282856200060e565b5f60209050601f8311600181146200071b575f841562000706578287015190505b62000712858262000688565b86555062000781565b601f1984166200072b86620004e2565b5f5b8281101562000754578489015182556001820191506020850194506020810190506200072d565b8683101562000774578489015162000770601f8916826200066a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620007c282620003e2565b9150620007cf83620003e2565b925082620007e257620007e162000789565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200082682620003e2565b91506200083383620003e2565b92508282039050818111156200084e576200084d620007ed565b5b92915050565b5f6200086082620003e2565b91506200086d83620003e2565b92508262000880576200087f62000789565b5b828204905092915050565b5f819050919050565b6200089f816200088b565b82525050565b620008b081620003e2565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620008e182620008b6565b9050919050565b620008f381620008d5565b82525050565b5f60a0820190506200090e5f83018862000894565b6200091d602083018762000894565b6200092c604083018662000894565b6200093b6060830185620008a5565b6200094a6080830184620008e8565b9695505050505050565b5f82825260208201905092915050565b5f5b838110156200098357808201518184015260208101905062000966565b5f8484015250505050565b5f601f19601f8301169050919050565b5f620009aa826200044a565b620009b6818562000954565b9350620009c881856020860162000964565b620009d3816200098e565b840191505092915050565b5f6020820190508181035f830152620009f881846200099e565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f62000a2682516200088b565b80915050919050565b5f62000a3b8262000a00565b8262000a478462000a0a565b905062000a548162000a19565b9250602082101562000a975762000a927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262000503565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516101605161309662000afa5f395f61097f01525f611e9b01525f611e6001525f611fbe01525f611f9d01525f611d5e01525f611db401525f611ddd01526130965ff3fe608060405234801561000f575f80fd5b50600436106101d8575f3560e01c806373c69eb711610102578063a457c2d7116100a0578063c4ef1c4c1161006f578063c4ef1c4c146105ec578063d505accf1461061c578063dd62ed3e14610638578063ef2374f214610668576101d8565b8063a457c2d714610554578063a9059cbb14610584578063ae5c6cd3146105b4578063c0c53b8b146105d0576101d8565b806384af40b9116100dc57806384af40b9146104c457806384b0196e146104f45780639358928b1461051857806395d89b4114610536576101d8565b806373c69eb71461042e578063775646ed146104645780637ecebe0014610494576101d8565b8063313ce5671161017a5780634cf088d9116101495780634cf088d9146103925780635cce3711146103b057806361d027b3146103e057806370a08231146103fe576101d8565b8063313ce567146102f657806335dd0c4d146103145780633644e515146103445780633950935114610362576101d8565b806318160ddd116101b657806318160ddd1461025a5780631b0ee4a61461027857806323b872dd146102a85780632986c0e5146102d8576101d8565b8063058ecdb4146101dc57806306fdde031461020c578063095ea7b31461022a575b5f80fd5b6101f660048036038101906101f19190612471565b610686565b60405161020391906124be565b60405180910390f35b610214610890565b6040516102219190612561565b60405180910390f35b610244600480360381019061023f91906125db565b610920565b6040516102519190612633565b60405180910390f35b610262610938565b60405161026f91906124be565b60405180910390f35b610292600480360381019061028d919061264c565b610941565b60405161029f91906124be565b60405180910390f35b6102c260048036038101906102bd9190612677565b610957565b6040516102cf9190612633565b60405180910390f35b6102e0610979565b6040516102ed91906124be565b60405180910390f35b6102fe6109a8565b60405161030b91906126e2565b60405180910390f35b61032e6004803603810190610329919061264c565b6109b0565b60405161033b91906124be565b60405180910390f35b61034c610a51565b6040516103599190612713565b60405180910390f35b61037c600480360381019061037791906125db565b610a5f565b6040516103899190612633565b60405180910390f35b61039a610afd565b6040516103a7919061273b565b60405180910390f35b6103ca60048036038101906103c5919061264c565b610b22565b6040516103d791906124be565b60405180910390f35b6103e8610bc3565b6040516103f5919061273b565b60405180910390f35b61041860048036038101906104139190612754565b610be8565b60405161042591906124be565b60405180910390f35b6104486004803603810190610443919061264c565b610c3b565b60405161045b979695949392919061277f565b60405180910390f35b61047e6004803603810190610479919061264c565b610c88565b60405161048b91906124be565b60405180910390f35b6104ae60048036038101906104a99190612754565b610c9e565b6040516104bb91906124be565b60405180910390f35b6104de60048036038101906104d9919061264c565b610caf565b6040516104eb9190612887565b60405180910390f35b6104fc610d2e565b60405161050f9796959493929190612982565b60405180910390f35b610520610dd3565b60405161052d91906124be565b60405180910390f35b61053e610fd8565b60405161054b9190612561565b60405180910390f35b61056e600480360381019061056991906125db565b611068565b60405161057b9190612633565b60405180910390f35b61059e600480360381019061059991906125db565b611119565b6040516105ab9190612633565b60405180910390f35b6105ce60048036038101906105c99190612a2e565b61112f565b005b6105ea60048036038101906105e59190612a7e565b6112a5565b005b61060660048036038101906106019190612754565b61156d565b60405161061391906124be565b60405180910390f35b61063660048036038101906106319190612b22565b611582565b005b610652600480360381019061064d9190612bbf565b6116c7565b60405161065f91906124be565b60405180910390f35b610670611749565b60405161067d919061273b565b60405180910390f35b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070d576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610716610dd3565b90505f84036107a257600a549150827f0417b340e646d4be71f9b2da63b5c3c69bc9cfa069f0e0db4756271886130bf48360405161075491906124be565b60405180910390a2827f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb25f610787610979565b604051610795929190612c3f565b60405180910390a26107d7565b5f8111156107c65780600a54856107b99190612c93565b6107c39190612d01565b93505b83600a546107d49190612d31565b91505b6fffffffffffffffffffffffffffffffff8016821115610807576fffffffffffffffffffffffffffffffff801691505b81600a81905550816611c37937e080007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6108429190612d64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61086d9190612d94565b6108779190612d01565b6009819055506108898183868661176e565b5092915050565b60606003805461089f90612df4565b80601f01602080910402602001604051908101604052809291908181526020018280546108cb90612df4565b80156109165780601f106108ed57610100808354040283529160200191610916565b820191905f5260205f20905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b5f61092e33848460016118eb565b6001905092915050565b5f600a54905090565b5f600954826109509190612d01565b9050919050565b5f610963843384611aba565b61096e848484611b4c565b600190509392505050565b5f6109a37f0000000000000000000000000000000000000000000000000000000000000000610941565b905090565b5f6009905090565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8248768836040518263ffffffff1660e01b8152600401610a0b91906124be565b602060405180830381865afa158015610a26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4a9190612e38565b9050919050565b5f610a5a611d5b565b905090565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482610ae49190612d31565b9150610af333848460016118eb565b6001905092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5236c836040518263ffffffff1660e01b8152600401610b7d91906124be565b602060405180830381865afa158015610b98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bbc9190612e38565b9050919050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60095460105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c349190612d01565b9050919050565b600e8181548110610c4a575f80fd5b905f5260205f2090600702015f91509050805f0154908060010154908060020154908060030154908060040154908060050154908060060154905087565b5f60095482610c979190612c93565b9050919050565b5f610ca882611e11565b9050919050565b610cb7612404565b600e8281548110610ccb57610cca612e63565b5b905f5260205f2090600702016040518060e00160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050919050565b5f6060805f805f6060610d3f611e57565b610d47611e92565b46305f801b5f67ffffffffffffffff811115610d6657610d65612e90565b5b604051908082528060200260200182016040528015610d945781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f610dfe600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610be8565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663201386416040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190612e38565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8248768600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612e38565b6040518263ffffffff1660e01b8152600401610f7391906124be565b602060405180830381865afa158015610f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb29190612e38565b600a54610fbf9190612d31565b610fc99190612d31565b610fd39190612d94565b905090565b606060048054610fe790612df4565b80601f016020809104026020016040519081016040528092919081815260200182805461101390612df4565b801561105e5780601f106110355761010080835404028352916020019161105e565b820191905f5260205f20905b81548152906001019060200180831161104157829003601f168201915b5050505050905090565b5f8060115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508083106110f2575f6110ff565b82816110fe9190612d94565b5b925061110e33858560016118eb565b600191505092915050565b5f611125338484611b4c565b6001905092915050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111b5576040517fb90cdbb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508161120c5783816112079190612d94565b611219565b83816112189190612d31565b5b905061122483610be8565b81111561125d576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461132b576040517fceeb95b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506611c37937e080007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61141e9190612d64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6114499190612d94565b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405161152991906124be565b60405180910390a37f817c653428858ed536dc085c5d8273734c517b55de44b55f5c5877a75e3373a183604051611560919061273b565b60405180910390a1505050565b600f602052805f5260405f205f915090505481565b834211156115c757836040517f627913020000000000000000000000000000000000000000000000000000000081526004016115be91906124be565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886115f58c611ecd565b8960405160200161160b96959493929190612ebd565b6040516020818303038152906040528051906020012090505f61162d82611f20565b90505f61163c82878787611f39565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116b057808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016116a7929190612f1c565b60405180910390fd5b6116bb8a8a8a611f67565b50505050505050505050565b5f60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80851161179c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117bc565b84670de0b6b3a7640000846117b19190612c93565b6117bb9190612d01565b5b90505f6117c7610979565b9050600e6040518060e001604052808581526020018481526020018881526020016117f0610dd3565b815260200186815260200183815260200143815250908060018154018082558091505060019003905f5260205f2090600702015f909190919091505f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601555050827f0417b340e646d4be71f9b2da63b5c3c69bc9cfa069f0e0db4756271886130bf4866040516118a191906124be565b60405180910390a2827f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb283836040516118db929190612f43565b60405180910390a2505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361195b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611952919061273b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119cb575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016119c2919061273b565b60405180910390fd5b8160115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611ab4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611aab91906124be565b60405180910390a35b50505050565b5f611ac584846116c7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b465781811015611b37578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b2e93929190612f6a565b60405180910390fd5b611b4584848484035f6118eb565b5b50505050565b5f60095482611b5b9190612c93565b90508060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ba69190612d94565b60105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c309190612d31565b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611cb885610be8565b1015611cf0576040517f7bd309d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d4d91906124be565b60405180910390a350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611dd657507f000000000000000000000000000000000000000000000000000000000000000046145b15611e03577f00000000000000000000000000000000000000000000000000000000000000009050611e0e565b611e0b611f79565b90505b90565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060611e8d60057f000000000000000000000000000000000000000000000000000000000000000061200e90919063ffffffff16565b905090565b6060611ec860067f000000000000000000000000000000000000000000000000000000000000000061200e90919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f611f32611f2c611d5b565b836120bb565b9050919050565b5f805f80611f49888888886120fb565b925092509250611f5982826121e2565b829350505050949350505050565b611f7483838360016118eb565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611ff3959493929190612f9f565b60405160208183030381529060405280519060200120905090565b606060ff5f1b831461202a5761202383612344565b90506120b5565b81805461203690612df4565b80601f016020809104026020016040519081016040528092919081815260200182805461206290612df4565b80156120ad5780601f10612084576101008083540402835291602001916120ad565b820191905f5260205f20905b81548152906001019060200180831161209057829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115612137575f6003859250925092506121d8565b5f6001888888886040515f815260200160405260405161215a9493929190612ff0565b6020604051602081039080840390855afa15801561217a573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121cb575f60015f801b935093509350506121d8565b805f805f1b935093509350505b9450945094915050565b5f60038111156121f5576121f4613033565b5b82600381111561220857612207613033565b5b0315612340576001600381111561222257612221613033565b5b82600381111561223557612234613033565b5b0361226c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156122805761227f613033565b5b82600381111561229357612292613033565b5b036122d757805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016122ce91906124be565b60405180910390fd5b6003808111156122ea576122e9613033565b5b8260038111156122fd576122fc613033565b5b0361233f57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016123369190612713565b60405180910390fd5b5b5050565b60605f612350836123b6565b90505f602067ffffffffffffffff81111561236e5761236d612e90565b5b6040519080825280601f01601f1916602001820160405280156123a05781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156123fb576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f80fd5b5f819050919050565b6124508161243e565b811461245a575f80fd5b50565b5f8135905061246b81612447565b92915050565b5f80604083850312156124875761248661243a565b5b5f6124948582860161245d565b92505060206124a58582860161245d565b9150509250929050565b6124b88161243e565b82525050565b5f6020820190506124d15f8301846124af565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561250e5780820151818401526020810190506124f3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612533826124d7565b61253d81856124e1565b935061254d8185602086016124f1565b61255681612519565b840191505092915050565b5f6020820190508181035f8301526125798184612529565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125aa82612581565b9050919050565b6125ba816125a0565b81146125c4575f80fd5b50565b5f813590506125d5816125b1565b92915050565b5f80604083850312156125f1576125f061243a565b5b5f6125fe858286016125c7565b925050602061260f8582860161245d565b9150509250929050565b5f8115159050919050565b61262d81612619565b82525050565b5f6020820190506126465f830184612624565b92915050565b5f602082840312156126615761266061243a565b5b5f61266e8482850161245d565b91505092915050565b5f805f6060848603121561268e5761268d61243a565b5b5f61269b868287016125c7565b93505060206126ac868287016125c7565b92505060406126bd8682870161245d565b9150509250925092565b5f60ff82169050919050565b6126dc816126c7565b82525050565b5f6020820190506126f55f8301846126d3565b92915050565b5f819050919050565b61270d816126fb565b82525050565b5f6020820190506127265f830184612704565b92915050565b612735816125a0565b82525050565b5f60208201905061274e5f83018461272c565b92915050565b5f602082840312156127695761276861243a565b5b5f612776848285016125c7565b91505092915050565b5f60e0820190506127925f83018a6124af565b61279f60208301896124af565b6127ac60408301886124af565b6127b960608301876124af565b6127c660808301866124af565b6127d360a08301856124af565b6127e060c08301846124af565b98975050505050505050565b6127f58161243e565b82525050565b60e082015f82015161280f5f8501826127ec565b50602082015161282260208501826127ec565b50604082015161283560408501826127ec565b50606082015161284860608501826127ec565b50608082015161285b60808501826127ec565b5060a082015161286e60a08501826127ec565b5060c082015161288160c08501826127ec565b50505050565b5f60e08201905061289a5f8301846127fb565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6128d4816128a0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61290e83836127ec565b60208301905092915050565b5f602082019050919050565b5f612930826128da565b61293a81856128e4565b9350612945836128f4565b805f5b8381101561297557815161295c8882612903565b97506129678361291a565b925050600181019050612948565b5085935050505092915050565b5f60e0820190506129955f83018a6128cb565b81810360208301526129a78189612529565b905081810360408301526129bb8188612529565b90506129ca60608301876124af565b6129d7608083018661272c565b6129e460a0830185612704565b81810360c08301526129f68184612926565b905098975050505050505050565b612a0d81612619565b8114612a17575f80fd5b50565b5f81359050612a2881612a04565b92915050565b5f805f60608486031215612a4557612a4461243a565b5b5f612a528682870161245d565b9350506020612a63868287016125c7565b9250506040612a7486828701612a1a565b9150509250925092565b5f805f60608486031215612a9557612a9461243a565b5b5f612aa2868287016125c7565b9350506020612ab3868287016125c7565b9250506040612ac4868287016125c7565b9150509250925092565b612ad7816126c7565b8114612ae1575f80fd5b50565b5f81359050612af281612ace565b92915050565b612b01816126fb565b8114612b0b575f80fd5b50565b5f81359050612b1c81612af8565b92915050565b5f805f805f805f60e0888a031215612b3d57612b3c61243a565b5b5f612b4a8a828b016125c7565b9750506020612b5b8a828b016125c7565b9650506040612b6c8a828b0161245d565b9550506060612b7d8a828b0161245d565b9450506080612b8e8a828b01612ae4565b93505060a0612b9f8a828b01612b0e565b92505060c0612bb08a828b01612b0e565b91505092959891949750929550565b5f8060408385031215612bd557612bd461243a565b5b5f612be2858286016125c7565b9250506020612bf3858286016125c7565b9150509250929050565b5f819050919050565b5f819050919050565b5f612c29612c24612c1f84612bfd565b612c06565b61243e565b9050919050565b612c3981612c0f565b82525050565b5f604082019050612c525f830185612c30565b612c5f60208301846124af565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c9d8261243e565b9150612ca88361243e565b9250828202612cb68161243e565b91508282048414831517612ccd57612ccc612c66565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612d0b8261243e565b9150612d168361243e565b925082612d2657612d25612cd4565b5b828204905092915050565b5f612d3b8261243e565b9150612d468361243e565b9250828201905080821115612d5e57612d5d612c66565b5b92915050565b5f612d6e8261243e565b9150612d798361243e565b925082612d8957612d88612cd4565b5b828206905092915050565b5f612d9e8261243e565b9150612da98361243e565b9250828203905081811115612dc157612dc0612c66565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e0b57607f821691505b602082108103612e1e57612e1d612dc7565b5b50919050565b5f81519050612e3281612447565b92915050565b5f60208284031215612e4d57612e4c61243a565b5b5f612e5a84828501612e24565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050612ed05f830189612704565b612edd602083018861272c565b612eea604083018761272c565b612ef760608301866124af565b612f0460808301856124af565b612f1160a08301846124af565b979650505050505050565b5f604082019050612f2f5f83018561272c565b612f3c602083018461272c565b9392505050565b5f604082019050612f565f8301856124af565b612f6360208301846124af565b9392505050565b5f606082019050612f7d5f83018661272c565b612f8a60208301856124af565b612f9760408301846124af565b949350505050565b5f60a082019050612fb25f830188612704565b612fbf6020830187612704565b612fcc6040830186612704565b612fd960608301856124af565b612fe6608083018461272c565b9695505050505050565b5f6080820190506130035f830187612704565b61301060208301866126d3565b61301d6040830185612704565b61302a6060830184612704565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220c9fab193d4b30f84965b7617c8e1fa53ff1aeb2308451286b7435b0433a82bb964736f6c63430008140033","sourceMap":"287:7783:93:-:0;;;1020:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1574:52:23;;;;;;;;;;;;;;;;;1613:4;3328:431:37;;;;;;;;;;;;;;;;;1896:113:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1970:5;1962;:13;;;;;;:::i;:::-;;1995:7;1985;:17;;;;;;:::i;:::-;;1896:113;;3401:45:37;3432:13;3401:4;:30;;;;:45;;;;:::i;:::-;3393:53;;;;;;3467:51;3501:16;3467:7;:33;;;;:51;;;;:::i;:::-;3456:62;;;;;;3558:4;3542:22;;;;;;3528:36;;;;;;3607:7;3591:25;;;;;;3574:42;;;;;;3644:13;3627:30;;;;;;3692:23;:21;;;:23;;:::i;:::-;3667:48;;;;;;3747:4;3725:27;;;;;;;;;;3328:431;;1574:52:23;1122:10:93::2;1107:12;;:25;;;;;;;;;;;;;;;;;;1159:9;1142:26;;;;::::0;::::2;380:10;1178:12;:36;;;;380:10;::::0;457:17:::2;:41;;;;:::i;:::-;436:17;:63;;;;:::i;:::-;1241:36;;;;:::i;:::-;1224:14;:53;;;;1020:264:::0;287:7783;;2914:340:33;3010:11;3059:2;3043:5;3037:19;:24;3033:215;;;3084:20;3098:5;3084:13;;;:20;;:::i;:::-;3077:27;;;;3033:215;3176:5;3135:32;3161:5;3135:25;;;:32;;:::i;:::-;:38;;:46;;;;;;:::i;:::-;;1390:66;3219:17;;3195:42;;2914:340;;;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;;4239:14;;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;1708:286:33:-;1773:11;1796:17;1822:3;1796:30;;1854:2;1840:4;:11;:16;1836:72;;;1893:3;1879:18;;;;;;;;;;;:::i;:::-;;;;;;;;1836:72;1974:4;:11;1965:4;1957:13;;;:::i;:::-;1949:22;;:36;1941:45;;1917:70;;;1708:286;;;:::o;3135:202:34:-;3203:20;3311:10;3301:20;;3135:202;;;:::o;88:117:133:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:143::-;602:5;633:6;627:13;618:22;;649:33;676:5;649:33;:::i;:::-;545:143;;;;:::o;694:351::-;764:6;813:2;801:9;792:7;788:23;784:32;781:119;;;819:79;;:::i;:::-;781:119;939:1;964:64;1020:7;1011:6;1000:9;996:22;964:64;:::i;:::-;954:74;;910:128;694:351;;;;:::o;1051:99::-;1103:6;1137:5;1131:12;1121:22;;1051:99;;;:::o;1156:180::-;1204:77;1201:1;1194:88;1301:4;1298:1;1291:15;1325:4;1322:1;1315:15;1342:180;1390:77;1387:1;1380:88;1487:4;1484:1;1477:15;1511:4;1508:1;1501:15;1528:320;1572:6;1609:1;1603:4;1599:12;1589:22;;1656:1;1650:4;1646:12;1677:18;1667:81;;1733:4;1725:6;1721:17;1711:27;;1667:81;1795:2;1787:6;1784:14;1764:18;1761:38;1758:84;;1814:18;;:::i;:::-;1758:84;1579:269;1528:320;;;:::o;1854:141::-;1903:4;1926:3;1918:11;;1949:3;1946:1;1939:14;1983:4;1980:1;1970:18;1962:26;;1854:141;;;:::o;2001:93::-;2038:6;2085:2;2080;2073:5;2069:14;2065:23;2055:33;;2001:93;;;:::o;2100:107::-;2144:8;2194:5;2188:4;2184:16;2163:37;;2100:107;;;;:::o;2213:393::-;2282:6;2332:1;2320:10;2316:18;2355:97;2385:66;2374:9;2355:97;:::i;:::-;2473:39;2503:8;2492:9;2473:39;:::i;:::-;2461:51;;2545:4;2541:9;2534:5;2530:21;2521:30;;2594:4;2584:8;2580:19;2573:5;2570:30;2560:40;;2289:317;;2213:393;;;;;:::o;2612:60::-;2640:3;2661:5;2654:12;;2612:60;;;:::o;2678:142::-;2728:9;2761:53;2779:34;2788:24;2806:5;2788:24;:::i;:::-;2779:34;:::i;:::-;2761:53;:::i;:::-;2748:66;;2678:142;;;:::o;2826:75::-;2869:3;2890:5;2883:12;;2826:75;;;:::o;2907:269::-;3017:39;3048:7;3017:39;:::i;:::-;3078:91;3127:41;3151:16;3127:41;:::i;:::-;3119:6;3112:4;3106:11;3078:91;:::i;:::-;3072:4;3065:105;2983:193;2907:269;;;:::o;3182:73::-;3227:3;3182:73;:::o;3261:189::-;3338:32;;:::i;:::-;3379:65;3437:6;3429;3423:4;3379:65;:::i;:::-;3314:136;3261:189;;:::o;3456:186::-;3516:120;3533:3;3526:5;3523:14;3516:120;;;3587:39;3624:1;3617:5;3587:39;:::i;:::-;3560:1;3553:5;3549:13;3540:22;;3516:120;;;3456:186;;:::o;3648:543::-;3749:2;3744:3;3741:11;3738:446;;;3783:38;3815:5;3783:38;:::i;:::-;3867:29;3885:10;3867:29;:::i;:::-;3857:8;3853:44;4050:2;4038:10;4035:18;4032:49;;;4071:8;4056:23;;4032:49;4094:80;4150:22;4168:3;4150:22;:::i;:::-;4140:8;4136:37;4123:11;4094:80;:::i;:::-;3753:431;;3738:446;3648:543;;;:::o;4197:117::-;4251:8;4301:5;4295:4;4291:16;4270:37;;4197:117;;;;:::o;4320:169::-;4364:6;4397:51;4445:1;4441:6;4433:5;4430:1;4426:13;4397:51;:::i;:::-;4393:56;4478:4;4472;4468:15;4458:25;;4371:118;4320:169;;;;:::o;4494:295::-;4570:4;4716:29;4741:3;4735:4;4716:29;:::i;:::-;4708:37;;4778:3;4775:1;4771:11;4765:4;4762:21;4754:29;;4494:295;;;;:::o;4794:1395::-;4911:37;4944:3;4911:37;:::i;:::-;5013:18;5005:6;5002:30;4999:56;;;5035:18;;:::i;:::-;4999:56;5079:38;5111:4;5105:11;5079:38;:::i;:::-;5164:67;5224:6;5216;5210:4;5164:67;:::i;:::-;5258:1;5282:4;5269:17;;5314:2;5306:6;5303:14;5331:1;5326:618;;;;5988:1;6005:6;6002:77;;;6054:9;6049:3;6045:19;6039:26;6030:35;;6002:77;6105:67;6165:6;6158:5;6105:67;:::i;:::-;6099:4;6092:81;5961:222;5296:887;;5326:618;5378:4;5374:9;5366:6;5362:22;5412:37;5444:4;5412:37;:::i;:::-;5471:1;5485:208;5499:7;5496:1;5493:14;5485:208;;;5578:9;5573:3;5569:19;5563:26;5555:6;5548:42;5629:1;5621:6;5617:14;5607:24;;5676:2;5665:9;5661:18;5648:31;;5522:4;5519:1;5515:12;5510:17;;5485:208;;;5721:6;5712:7;5709:19;5706:179;;;5779:9;5774:3;5770:19;5764:26;5822:48;5864:4;5856:6;5852:17;5841:9;5822:48;:::i;:::-;5814:6;5807:64;5729:156;5706:179;5931:1;5927;5919:6;5915:14;5911:22;5905:4;5898:36;5333:611;;;5296:887;;4886:1303;;;4794:1395;;:::o;6195:180::-;6243:77;6240:1;6233:88;6340:4;6337:1;6330:15;6364:4;6361:1;6354:15;6381:176;6413:1;6430:20;6448:1;6430:20;:::i;:::-;6425:25;;6464:20;6482:1;6464:20;:::i;:::-;6459:25;;6503:1;6493:35;;6508:18;;:::i;:::-;6493:35;6549:1;6546;6542:9;6537:14;;6381:176;;;;:::o;6563:180::-;6611:77;6608:1;6601:88;6708:4;6705:1;6698:15;6732:4;6729:1;6722:15;6749:194;6789:4;6809:20;6827:1;6809:20;:::i;:::-;6804:25;;6843:20;6861:1;6843:20;:::i;:::-;6838:25;;6887:1;6884;6880:9;6872:17;;6911:1;6905:4;6902:11;6899:37;;;6916:18;;:::i;:::-;6899:37;6749:194;;;;:::o;6949:185::-;6989:1;7006:20;7024:1;7006:20;:::i;:::-;7001:25;;7040:20;7058:1;7040:20;:::i;:::-;7035:25;;7079:1;7069:35;;7084:18;;:::i;:::-;7069:35;7126:1;7123;7119:9;7114:14;;6949:185;;;;:::o;7140:77::-;7177:7;7206:5;7195:16;;7140:77;;;:::o;7223:118::-;7310:24;7328:5;7310:24;:::i;:::-;7305:3;7298:37;7223:118;;:::o;7347:::-;7434:24;7452:5;7434:24;:::i;:::-;7429:3;7422:37;7347:118;;:::o;7471:126::-;7508:7;7548:42;7541:5;7537:54;7526:65;;7471:126;;;:::o;7603:96::-;7640:7;7669:24;7687:5;7669:24;:::i;:::-;7658:35;;7603:96;;;:::o;7705:118::-;7792:24;7810:5;7792:24;:::i;:::-;7787:3;7780:37;7705:118;;:::o;7829:664::-;8034:4;8072:3;8061:9;8057:19;8049:27;;8086:71;8154:1;8143:9;8139:17;8130:6;8086:71;:::i;:::-;8167:72;8235:2;8224:9;8220:18;8211:6;8167:72;:::i;:::-;8249;8317:2;8306:9;8302:18;8293:6;8249:72;:::i;:::-;8331;8399:2;8388:9;8384:18;8375:6;8331:72;:::i;:::-;8413:73;8481:3;8470:9;8466:19;8457:6;8413:73;:::i;:::-;7829:664;;;;;;;;:::o;8499:169::-;8583:11;8617:6;8612:3;8605:19;8657:4;8652:3;8648:14;8633:29;;8499:169;;;;:::o;8674:246::-;8755:1;8765:113;8779:6;8776:1;8773:13;8765:113;;;8864:1;8859:3;8855:11;8849:18;8845:1;8840:3;8836:11;8829:39;8801:2;8798:1;8794:10;8789:15;;8765:113;;;8912:1;8903:6;8898:3;8894:16;8887:27;8736:184;8674:246;;;:::o;8926:102::-;8967:6;9018:2;9014:7;9009:2;9002:5;8998:14;8994:28;8984:38;;8926:102;;;:::o;9034:377::-;9122:3;9150:39;9183:5;9150:39;:::i;:::-;9205:71;9269:6;9264:3;9205:71;:::i;:::-;9198:78;;9285:65;9343:6;9338:3;9331:4;9324:5;9320:16;9285:65;:::i;:::-;9375:29;9397:6;9375:29;:::i;:::-;9370:3;9366:39;9359:46;;9126:285;9034:377;;;;:::o;9417:313::-;9530:4;9568:2;9557:9;9553:18;9545:26;;9617:9;9611:4;9607:20;9603:1;9592:9;9588:17;9581:47;9645:78;9718:4;9709:6;9645:78;:::i;:::-;9637:86;;9417:313;;;;:::o;9736:98::-;9787:6;9821:5;9815:12;9805:22;;9736:98;;;:::o;9840:116::-;9891:4;9914:3;9906:11;;9944:4;9939:3;9935:14;9927:22;;9840:116;;;:::o;9962:154::-;10005:11;10041:29;10065:3;10059:10;10041:29;:::i;:::-;10104:5;10080:29;;10017:99;9962:154;;;:::o;10122:594::-;10206:5;10237:38;10269:5;10237:38;:::i;:::-;10300:5;10327:40;10361:5;10327:40;:::i;:::-;10315:52;;10386:35;10412:8;10386:35;:::i;:::-;10377:44;;10445:2;10437:6;10434:14;10431:278;;;10516:169;10601:66;10571:6;10567:2;10563:15;10560:1;10556:23;10516:169;:::i;:::-;10493:5;10472:227;10463:236;;10431:278;10212:504;;10122:594;;;:::o;287:7783:93:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106101d8575f3560e01c806373c69eb711610102578063a457c2d7116100a0578063c4ef1c4c1161006f578063c4ef1c4c146105ec578063d505accf1461061c578063dd62ed3e14610638578063ef2374f214610668576101d8565b8063a457c2d714610554578063a9059cbb14610584578063ae5c6cd3146105b4578063c0c53b8b146105d0576101d8565b806384af40b9116100dc57806384af40b9146104c457806384b0196e146104f45780639358928b1461051857806395d89b4114610536576101d8565b806373c69eb71461042e578063775646ed146104645780637ecebe0014610494576101d8565b8063313ce5671161017a5780634cf088d9116101495780634cf088d9146103925780635cce3711146103b057806361d027b3146103e057806370a08231146103fe576101d8565b8063313ce567146102f657806335dd0c4d146103145780633644e515146103445780633950935114610362576101d8565b806318160ddd116101b657806318160ddd1461025a5780631b0ee4a61461027857806323b872dd146102a85780632986c0e5146102d8576101d8565b8063058ecdb4146101dc57806306fdde031461020c578063095ea7b31461022a575b5f80fd5b6101f660048036038101906101f19190612471565b610686565b60405161020391906124be565b60405180910390f35b610214610890565b6040516102219190612561565b60405180910390f35b610244600480360381019061023f91906125db565b610920565b6040516102519190612633565b60405180910390f35b610262610938565b60405161026f91906124be565b60405180910390f35b610292600480360381019061028d919061264c565b610941565b60405161029f91906124be565b60405180910390f35b6102c260048036038101906102bd9190612677565b610957565b6040516102cf9190612633565b60405180910390f35b6102e0610979565b6040516102ed91906124be565b60405180910390f35b6102fe6109a8565b60405161030b91906126e2565b60405180910390f35b61032e6004803603810190610329919061264c565b6109b0565b60405161033b91906124be565b60405180910390f35b61034c610a51565b6040516103599190612713565b60405180910390f35b61037c600480360381019061037791906125db565b610a5f565b6040516103899190612633565b60405180910390f35b61039a610afd565b6040516103a7919061273b565b60405180910390f35b6103ca60048036038101906103c5919061264c565b610b22565b6040516103d791906124be565b60405180910390f35b6103e8610bc3565b6040516103f5919061273b565b60405180910390f35b61041860048036038101906104139190612754565b610be8565b60405161042591906124be565b60405180910390f35b6104486004803603810190610443919061264c565b610c3b565b60405161045b979695949392919061277f565b60405180910390f35b61047e6004803603810190610479919061264c565b610c88565b60405161048b91906124be565b60405180910390f35b6104ae60048036038101906104a99190612754565b610c9e565b6040516104bb91906124be565b60405180910390f35b6104de60048036038101906104d9919061264c565b610caf565b6040516104eb9190612887565b60405180910390f35b6104fc610d2e565b60405161050f9796959493929190612982565b60405180910390f35b610520610dd3565b60405161052d91906124be565b60405180910390f35b61053e610fd8565b60405161054b9190612561565b60405180910390f35b61056e600480360381019061056991906125db565b611068565b60405161057b9190612633565b60405180910390f35b61059e600480360381019061059991906125db565b611119565b6040516105ab9190612633565b60405180910390f35b6105ce60048036038101906105c99190612a2e565b61112f565b005b6105ea60048036038101906105e59190612a7e565b6112a5565b005b61060660048036038101906106019190612754565b61156d565b60405161061391906124be565b60405180910390f35b61063660048036038101906106319190612b22565b611582565b005b610652600480360381019061064d9190612bbf565b6116c7565b60405161065f91906124be565b60405180910390f35b610670611749565b60405161067d919061273b565b60405180910390f35b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070d576040517f135420fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610716610dd3565b90505f84036107a257600a549150827f0417b340e646d4be71f9b2da63b5c3c69bc9cfa069f0e0db4756271886130bf48360405161075491906124be565b60405180910390a2827f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb25f610787610979565b604051610795929190612c3f565b60405180910390a26107d7565b5f8111156107c65780600a54856107b99190612c93565b6107c39190612d01565b93505b83600a546107d49190612d31565b91505b6fffffffffffffffffffffffffffffffff8016821115610807576fffffffffffffffffffffffffffffffff801691505b81600a81905550816611c37937e080007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6108429190612d64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61086d9190612d94565b6108779190612d01565b6009819055506108898183868661176e565b5092915050565b60606003805461089f90612df4565b80601f01602080910402602001604051908101604052809291908181526020018280546108cb90612df4565b80156109165780601f106108ed57610100808354040283529160200191610916565b820191905f5260205f20905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b5f61092e33848460016118eb565b6001905092915050565b5f600a54905090565b5f600954826109509190612d01565b9050919050565b5f610963843384611aba565b61096e848484611b4c565b600190509392505050565b5f6109a37f0000000000000000000000000000000000000000000000000000000000000000610941565b905090565b5f6009905090565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8248768836040518263ffffffff1660e01b8152600401610a0b91906124be565b602060405180830381865afa158015610a26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4a9190612e38565b9050919050565b5f610a5a611d5b565b905090565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482610ae49190612d31565b9150610af333848460016118eb565b6001905092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5236c836040518263ffffffff1660e01b8152600401610b7d91906124be565b602060405180830381865afa158015610b98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bbc9190612e38565b9050919050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60095460105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c349190612d01565b9050919050565b600e8181548110610c4a575f80fd5b905f5260205f2090600702015f91509050805f0154908060010154908060020154908060030154908060040154908060050154908060060154905087565b5f60095482610c979190612c93565b9050919050565b5f610ca882611e11565b9050919050565b610cb7612404565b600e8281548110610ccb57610cca612e63565b5b905f5260205f2090600702016040518060e00160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050919050565b5f6060805f805f6060610d3f611e57565b610d47611e92565b46305f801b5f67ffffffffffffffff811115610d6657610d65612e90565b5b604051908082528060200260200182016040528015610d945781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f610dfe600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610be8565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663201386416040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190612e38565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8248768600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612e38565b6040518263ffffffff1660e01b8152600401610f7391906124be565b602060405180830381865afa158015610f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb29190612e38565b600a54610fbf9190612d31565b610fc99190612d31565b610fd39190612d94565b905090565b606060048054610fe790612df4565b80601f016020809104026020016040519081016040528092919081815260200182805461101390612df4565b801561105e5780601f106110355761010080835404028352916020019161105e565b820191905f5260205f20905b81548152906001019060200180831161104157829003601f168201915b5050505050905090565b5f8060115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508083106110f2575f6110ff565b82816110fe9190612d94565b5b925061110e33858560016118eb565b600191505092915050565b5f611125338484611b4c565b6001905092915050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111b5576040517fb90cdbb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508161120c5783816112079190612d94565b611219565b83816112189190612d31565b5b905061122483610be8565b81111561125d576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461132b576040517fceeb95b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506611c37937e080007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61141e9190612d64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6114499190612d94565b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405161152991906124be565b60405180910390a37f817c653428858ed536dc085c5d8273734c517b55de44b55f5c5877a75e3373a183604051611560919061273b565b60405180910390a1505050565b600f602052805f5260405f205f915090505481565b834211156115c757836040517f627913020000000000000000000000000000000000000000000000000000000081526004016115be91906124be565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886115f58c611ecd565b8960405160200161160b96959493929190612ebd565b6040516020818303038152906040528051906020012090505f61162d82611f20565b90505f61163c82878787611f39565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116b057808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016116a7929190612f1c565b60405180910390fd5b6116bb8a8a8a611f67565b50505050505050505050565b5f60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80851161179c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117bc565b84670de0b6b3a7640000846117b19190612c93565b6117bb9190612d01565b5b90505f6117c7610979565b9050600e6040518060e001604052808581526020018481526020018881526020016117f0610dd3565b815260200186815260200183815260200143815250908060018154018082558091505060019003905f5260205f2090600702015f909190919091505f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601555050827f0417b340e646d4be71f9b2da63b5c3c69bc9cfa069f0e0db4756271886130bf4866040516118a191906124be565b60405180910390a2827f6012dbce857565c4a40974aa5de8373a761fc429077ef0c8c8611d1e20d63fb283836040516118db929190612f43565b60405180910390a2505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361195b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611952919061273b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119cb575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016119c2919061273b565b60405180910390fd5b8160115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611ab4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611aab91906124be565b60405180910390a35b50505050565b5f611ac584846116c7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b465781811015611b37578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b2e93929190612f6a565b60405180910390fd5b611b4584848484035f6118eb565b5b50505050565b5f60095482611b5b9190612c93565b90508060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ba69190612d94565b60105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c309190612d31565b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611cb885610be8565b1015611cf0576040517f7bd309d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d4d91906124be565b60405180910390a350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611dd657507f000000000000000000000000000000000000000000000000000000000000000046145b15611e03577f00000000000000000000000000000000000000000000000000000000000000009050611e0e565b611e0b611f79565b90505b90565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060611e8d60057f000000000000000000000000000000000000000000000000000000000000000061200e90919063ffffffff16565b905090565b6060611ec860067f000000000000000000000000000000000000000000000000000000000000000061200e90919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f611f32611f2c611d5b565b836120bb565b9050919050565b5f805f80611f49888888886120fb565b925092509250611f5982826121e2565b829350505050949350505050565b611f7483838360016118eb565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611ff3959493929190612f9f565b60405160208183030381529060405280519060200120905090565b606060ff5f1b831461202a5761202383612344565b90506120b5565b81805461203690612df4565b80601f016020809104026020016040519081016040528092919081815260200182805461206290612df4565b80156120ad5780601f10612084576101008083540402835291602001916120ad565b820191905f5260205f20905b81548152906001019060200180831161209057829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115612137575f6003859250925092506121d8565b5f6001888888886040515f815260200160405260405161215a9493929190612ff0565b6020604051602081039080840390855afa15801561217a573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121cb575f60015f801b935093509350506121d8565b805f805f1b935093509350505b9450945094915050565b5f60038111156121f5576121f4613033565b5b82600381111561220857612207613033565b5b0315612340576001600381111561222257612221613033565b5b82600381111561223557612234613033565b5b0361226c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156122805761227f613033565b5b82600381111561229357612292613033565b5b036122d757805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016122ce91906124be565b60405180910390fd5b6003808111156122ea576122e9613033565b5b8260038111156122fd576122fc613033565b5b0361233f57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016123369190612713565b60405180910390fd5b5b5050565b60605f612350836123b6565b90505f602067ffffffffffffffff81111561236e5761236d612e90565b5b6040519080825280601f01601f1916602001820160405280156123a05781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156123fb576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f80fd5b5f819050919050565b6124508161243e565b811461245a575f80fd5b50565b5f8135905061246b81612447565b92915050565b5f80604083850312156124875761248661243a565b5b5f6124948582860161245d565b92505060206124a58582860161245d565b9150509250929050565b6124b88161243e565b82525050565b5f6020820190506124d15f8301846124af565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561250e5780820151818401526020810190506124f3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612533826124d7565b61253d81856124e1565b935061254d8185602086016124f1565b61255681612519565b840191505092915050565b5f6020820190508181035f8301526125798184612529565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125aa82612581565b9050919050565b6125ba816125a0565b81146125c4575f80fd5b50565b5f813590506125d5816125b1565b92915050565b5f80604083850312156125f1576125f061243a565b5b5f6125fe858286016125c7565b925050602061260f8582860161245d565b9150509250929050565b5f8115159050919050565b61262d81612619565b82525050565b5f6020820190506126465f830184612624565b92915050565b5f602082840312156126615761266061243a565b5b5f61266e8482850161245d565b91505092915050565b5f805f6060848603121561268e5761268d61243a565b5b5f61269b868287016125c7565b93505060206126ac868287016125c7565b92505060406126bd8682870161245d565b9150509250925092565b5f60ff82169050919050565b6126dc816126c7565b82525050565b5f6020820190506126f55f8301846126d3565b92915050565b5f819050919050565b61270d816126fb565b82525050565b5f6020820190506127265f830184612704565b92915050565b612735816125a0565b82525050565b5f60208201905061274e5f83018461272c565b92915050565b5f602082840312156127695761276861243a565b5b5f612776848285016125c7565b91505092915050565b5f60e0820190506127925f83018a6124af565b61279f60208301896124af565b6127ac60408301886124af565b6127b960608301876124af565b6127c660808301866124af565b6127d360a08301856124af565b6127e060c08301846124af565b98975050505050505050565b6127f58161243e565b82525050565b60e082015f82015161280f5f8501826127ec565b50602082015161282260208501826127ec565b50604082015161283560408501826127ec565b50606082015161284860608501826127ec565b50608082015161285b60808501826127ec565b5060a082015161286e60a08501826127ec565b5060c082015161288160c08501826127ec565b50505050565b5f60e08201905061289a5f8301846127fb565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6128d4816128a0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61290e83836127ec565b60208301905092915050565b5f602082019050919050565b5f612930826128da565b61293a81856128e4565b9350612945836128f4565b805f5b8381101561297557815161295c8882612903565b97506129678361291a565b925050600181019050612948565b5085935050505092915050565b5f60e0820190506129955f83018a6128cb565b81810360208301526129a78189612529565b905081810360408301526129bb8188612529565b90506129ca60608301876124af565b6129d7608083018661272c565b6129e460a0830185612704565b81810360c08301526129f68184612926565b905098975050505050505050565b612a0d81612619565b8114612a17575f80fd5b50565b5f81359050612a2881612a04565b92915050565b5f805f60608486031215612a4557612a4461243a565b5b5f612a528682870161245d565b9350506020612a63868287016125c7565b9250506040612a7486828701612a1a565b9150509250925092565b5f805f60608486031215612a9557612a9461243a565b5b5f612aa2868287016125c7565b9350506020612ab3868287016125c7565b9250506040612ac4868287016125c7565b9150509250925092565b612ad7816126c7565b8114612ae1575f80fd5b50565b5f81359050612af281612ace565b92915050565b612b01816126fb565b8114612b0b575f80fd5b50565b5f81359050612b1c81612af8565b92915050565b5f805f805f805f60e0888a031215612b3d57612b3c61243a565b5b5f612b4a8a828b016125c7565b9750506020612b5b8a828b016125c7565b9650506040612b6c8a828b0161245d565b9550506060612b7d8a828b0161245d565b9450506080612b8e8a828b01612ae4565b93505060a0612b9f8a828b01612b0e565b92505060c0612bb08a828b01612b0e565b91505092959891949750929550565b5f8060408385031215612bd557612bd461243a565b5b5f612be2858286016125c7565b9250506020612bf3858286016125c7565b9150509250929050565b5f819050919050565b5f819050919050565b5f612c29612c24612c1f84612bfd565b612c06565b61243e565b9050919050565b612c3981612c0f565b82525050565b5f604082019050612c525f830185612c30565b612c5f60208301846124af565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c9d8261243e565b9150612ca88361243e565b9250828202612cb68161243e565b91508282048414831517612ccd57612ccc612c66565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612d0b8261243e565b9150612d168361243e565b925082612d2657612d25612cd4565b5b828204905092915050565b5f612d3b8261243e565b9150612d468361243e565b9250828201905080821115612d5e57612d5d612c66565b5b92915050565b5f612d6e8261243e565b9150612d798361243e565b925082612d8957612d88612cd4565b5b828206905092915050565b5f612d9e8261243e565b9150612da98361243e565b9250828203905081811115612dc157612dc0612c66565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e0b57607f821691505b602082108103612e1e57612e1d612dc7565b5b50919050565b5f81519050612e3281612447565b92915050565b5f60208284031215612e4d57612e4c61243a565b5b5f612e5a84828501612e24565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050612ed05f830189612704565b612edd602083018861272c565b612eea604083018761272c565b612ef760608301866124af565b612f0460808301856124af565b612f1160a08301846124af565b979650505050505050565b5f604082019050612f2f5f83018561272c565b612f3c602083018461272c565b9392505050565b5f604082019050612f565f8301856124af565b612f6360208301846124af565b9392505050565b5f606082019050612f7d5f83018661272c565b612f8a60208301856124af565b612f9760408301846124af565b949350505050565b5f60a082019050612fb25f830188612704565b612fbf6020830187612704565b612fcc6040830186612704565b612fd960608301856124af565b612fe6608083018461272c565b9695505050505050565b5f6080820190506130035f830187612704565b61301060208301866126d3565b61301d6040830185612704565b61302a6060830184612704565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220c9fab193d4b30f84965b7617c8e1fa53ff1aeb2308451286b7435b0433a82bb964736f6c63430008140033","sourceMap":"287:7783:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1748:919;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2074:89:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3131:197:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4049:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4647:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2867:258;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5307:112;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3961:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4913:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2656:112:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3334:268:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;721:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4781:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;774:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4168:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;804:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;4513:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2406:143:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5425:113:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:557:37;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;5049:252:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2276:93:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3608:347:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2673:188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5544:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1290:452;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;833:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1680:672:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4327:180:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;749:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1748:919;1847:22;1899:7;;;;;;;;;;;1885:21;;:10;:21;;;1881:54;;1915:20;;;;;;;;;;;;;;1881:54;1945:27;1975:19;:17;:19::i;:::-;1945:49;;2024:1;2009:11;:16;2005:386;;2058:12;;2041:29;;2099:5;2089:32;2106:14;2089:32;;;;;;:::i;:::-;;;;;;;;2150:5;2140:28;2157:1;2160:7;:5;:7::i;:::-;2140:28;;;;;;;:::i;:::-;;;;;;;;2005:386;;;2225:1;2203:19;:23;2199:125;;;2290:19;2275:12;;2261:11;:26;;;;:::i;:::-;:48;;;;:::i;:::-;2247:62;;2199:125;2369:11;2354:12;;:26;;;;:::i;:::-;2337:43;;2005:386;543:17;2422:10;;2405:14;:27;2401:85;;;543:17;2465:10;;2448:27;;2401:85;2511:14;2496:12;:29;;;;2567:14;380:10;457:17;:41;;;;:::i;:::-;436:17;:63;;;;:::i;:::-;2552:29;;;;:::i;:::-;2535:14;:46;;;;2591:69;2604:19;2625:14;2641:11;2654:5;2591:12;:69::i;:::-;1871:796;1748:919;;;;:::o;2074:89:21:-;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;3131:197:93:-;3242:4;3258:42;3267:10;3279:7;3288:5;3295:4;3258:8;:42::i;:::-;3317:4;3310:11;;3131:197;;;;:::o;4049:113::-;4117:7;4143:12;;4136:19;;4049:113;:::o;4647:128::-;4719:7;4754:14;;4745:6;:23;;;;:::i;:::-;4738:30;;4647:128;;;:::o;2867:258::-;3000:4;3016:40;3032:4;3038:10;3050:5;3016:15;:40::i;:::-;3066:31;3081:4;3087:2;3091:5;3066:14;:31::i;:::-;3114:4;3107:11;;2867:258;;;;;:::o;5307:112::-;5354:7;5380:32;5397:14;5380:16;:32::i;:::-;5373:39;;5307:112;:::o;3961:82::-;4011:5;4035:1;4028:8;;3961:82;:::o;4913:130::-;4979:7;5011:4;;;;;;;;;;;5005:23;;;5029:6;5005:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4998:38;;4913:130;;;:::o;2656:112:23:-;2715:7;2741:20;:18;:20::i;:::-;2734:27;;2656:112;:::o;3334:268:93:-;3444:4;3484:13;:25;3498:10;3484:25;;;;;;;;;;;;;;;:34;3510:7;3484:34;;;;;;;;;;;;;;;;3472:9;:46;;;;:::i;:::-;3460:58;;3528:46;3537:10;3549:7;3558:9;3569:4;3528:8;:46::i;:::-;3591:4;3584:11;;3334:268;;;;:::o;721:22::-;;;;;;;;;;;;;:::o;4781:126::-;4845:7;4877:4;;;;;;;;;;;4871:21;;;4893:6;4871:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4864:36;;4781:126;;;:::o;774:23::-;;;;;;;;;;;;;:::o;4168:153::-;4259:7;4300:14;;4285:7;:12;4293:3;4285:12;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;4278:36;;4168:153;;;:::o;804:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4513:128::-;4585:7;4620:14;;4611:6;:23;;;;:::i;:::-;4604:30;;4513:128;;;:::o;2406:143:23:-;2497:7;2523:19;2536:5;2523:12;:19::i;:::-;2516:26;;2406:143;;;:::o;5425:113:93:-;5487:13;;:::i;:::-;5519:7;5527:3;5519:12;;;;;;;;:::i;:::-;;;;;;;;;;;;5512:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5425:113;;;:::o;5144:557:37:-;5242:13;5269:18;5301:21;5336:15;5365:25;5404:12;5430:27;5533:13;:11;:13::i;:::-;5560:16;:14;:16::i;:::-;5590:13;5625:4;5652:1;5644:10;;5682:1;5668:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5482:212;;;;;;;;;;;;;;;;;;;;;5144:557;;;;;;;:::o;5049:252:93:-;5108:7;5276:18;5286:7;;;;;;;;;;;5276:9;:18::i;:::-;5236:7;;;;;;;;;;;5227:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5167:4;;;;;;;;;;;5161:23;;;5192:4;;;;;;;;;;;5185:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5161:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5134:12;;:78;;;;:::i;:::-;:127;;;;:::i;:::-;:160;;;;:::i;:::-;5127:167;;5049:252;:::o;2276:93:21:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;3608:347:93:-;3718:4;3734:21;3758:13;:25;3772:10;3758:25;;;;;;;;;;;;;;;:34;3784:7;3758:34;;;;;;;;;;;;;;;;3734:58;;3826:13;3814:9;:25;:57;;3870:1;3814:57;;;3858:9;3842:13;:25;;;;:::i;:::-;3814:57;3802:69;;3881:46;3890:10;3902:7;3911:9;3922:4;3881:8;:46::i;:::-;3944:4;3937:11;;;3608:347;;;;:::o;2673:188::-;2780:4;2796:37;2811:10;2823:2;2827:5;2796:14;:37::i;:::-;2850:4;2843:11;;2673:188;;;;:::o;5544:419::-;5682:8;;;;;;;;;;;5668:22;;:10;:22;;;5664:48;;5699:13;;;;;;;;;;;;;;5664:48;5722:19;5744:12;:20;5757:6;5744:20;;;;;;;;;;;;;;;;5722:42;;5788:3;:49;;5831:6;5817:11;:20;;;;:::i;:::-;5788:49;;;5808:6;5794:11;:20;;;;:::i;:::-;5788:49;5774:63;;5865:17;5875:6;5865:9;:17::i;:::-;5851:11;:31;5847:65;;;5891:21;;;;;;;;;;;;;;5847:65;5945:11;5922:12;:20;5935:6;5922:20;;;;;;;;;;;;;;;:34;;;;5654:309;5544:419;;;:::o;1290:452::-;1429:12;;;;;;;;;;;1415:26;;:10;:26;;;1411:55;;1450:16;;;;;;;;;;;;;;1411:55;1487:8;1477:7;;:18;;;;;;;;;;;;;;;;;;1516:9;1505:8;;:20;;;;;;;;;;;;;;;;;;1542:5;1535:4;;:12;;;;;;;;;;;;;;;;;;380:10;457:17;:41;;;;:::i;:::-;436:17;:63;;;;:::i;:::-;1558:7;:17;1566:8;1558:17;;;;;;;;;;;;;;;:32;;;;1623:1;1600:12;;:25;;;;;;;;;;;;;;;;;;1662:8;1641:44;;1658:1;1641:44;;;1672:12;;1641:44;;;;;;:::i;:::-;;;;;;;;1700:35;1726:8;1700:35;;;;;;:::i;:::-;;;;;;;;1290:452;;;:::o;833:56::-;;;;;;;;;;;;;;;;;:::o;1680:672:23:-;1901:8;1883:15;:26;1879:97;;;1956:8;1932:33;;;;;;;;;;;:::i;:::-;;;;;;;;1879:97;1986:18;1022:95;2045:5;2052:7;2061:5;2068:16;2078:5;2068:9;:16::i;:::-;2086:8;2017:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2007:89;;;;;;1986:110;;2107:12;2122:28;2139:10;2122:16;:28::i;:::-;2107:43;;2161:14;2178:28;2192:4;2198:1;2201;2204;2178:13;:28::i;:::-;2161:45;;2230:5;2220:15;;:6;:15;;;2216:88;;2279:6;2287:5;2258:35;;;;;;;;;;;;:::i;:::-;;;;;;;;2216:88;2314:31;2323:5;2330:7;2339:5;2314:8;:31::i;:::-;1869:483;;;1680:672;;;;;;;:::o;4327:180:93:-;4445:7;4471:13;:20;4485:5;4471:20;;;;;;;;;;;;;;;:29;4492:7;4471:29;;;;;;;;;;;;;;;;4464:36;;4327:180;;;;:::o;749:19::-;;;;;;;;;;;;;:::o;5969:824::-;6137:21;6183:1;6161:19;:23;:110;;6254:17;6161:110;;;6220:19;6213:4;6199:11;:18;;;;:::i;:::-;:40;;;;:::i;:::-;6161:110;6137:134;;6281:16;6300:7;:5;:7::i;:::-;6281:26;;6317:7;6343:329;;;;;;;;6375:5;6343:329;;;;6406:13;6343:329;;;;6456:19;6343:329;;;;6511:19;:17;:19::i;:::-;6343:329;;;;6563:11;6343:329;;;;6599:8;6343:329;;;;6645:12;6343:329;;;6317:365;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6708:5;6698:32;6715:14;6698:32;;;;;;:::i;:::-;;;;;;;;6755:5;6745:41;6762:13;6777:8;6745:41;;;;;;;:::i;:::-;;;;;;;;6127:666;;5969:824;;;;:::o;7667:401::-;7835:1;7818:19;;:5;:19;;;7814:64;;7875:1;7846:32;;;;;;;;;;;:::i;:::-;;;;;;;;7814:64;7911:1;7892:21;;:7;:21;;;7888:65;;7950:1;7922:31;;;;;;;;;;;:::i;:::-;;;;;;;;7888:65;7995:5;7963:13;:20;7977:5;7963:20;;;;;;;;;;;;;;;:29;7984:7;7963:29;;;;;;;;;;;;;;;:37;;;;8014:9;8010:51;;;8046:7;8030:31;;8039:5;8030:31;;;8055:5;8030:31;;;;;;:::i;:::-;;;;;;;;8010:51;7667:401;;;;:::o;7183:478::-;7283:24;7310:25;7320:5;7327:7;7310:9;:25::i;:::-;7283:52;;7369:17;7349:16;:37;7345:310;;7425:5;7406:16;:24;7402:130;;;7484:7;7493:16;7511:5;7457:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;7402:130;7573:57;7582:5;7589:7;7617:5;7598:16;:24;7624:5;7573:8;:57::i;:::-;7345:310;7273:388;7183:478;;;:::o;6799:378::-;6913:19;6943:14;;6935:5;:22;;;;:::i;:::-;6913:44;;6999:11;6983:7;:13;6991:4;6983:13;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;6967:7;:13;6975:4;6967:13;;;;;;;;;;;;;;;:43;;;;7048:11;7034:7;:11;7042:2;7034:11;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;7020:7;:11;7028:2;7020:11;;;;;;;;;;;;;;;:39;;;;7091:12;:18;7104:4;7091:18;;;;;;;;;;;;;;;;7073:15;7083:4;7073:9;:15::i;:::-;:36;7069:61;;;7118:12;;;;;;;;;;;;;;7069:61;7160:2;7145:25;;7154:4;7145:25;;;7164:5;7145:25;;;;;;:::i;:::-;;;;;;;;6903:274;6799:378;;;:::o;3845:262:37:-;3898:7;3938:11;3921:28;;3929:4;3921:28;;;:63;;;;;3970:14;3953:13;:31;3921:63;3917:184;;;4007:22;4000:29;;;;3917:184;4067:23;:21;:23::i;:::-;4060:30;;3845:262;;:::o;538:107:32:-;598:7;624;:14;632:5;624:14;;;;;;;;;;;;;;;;617:21;;538:107;;;:::o;6021:126:37:-;6067:13;6099:41;6126:13;6099:5;:26;;:41;;;;:::i;:::-;6092:48;;6021:126;:::o;6473:135::-;6522:13;6554:47;6584:16;6554:8;:29;;:47;;;;:::i;:::-;6547:54;;6473:135;:::o;759:395:32:-;819:7;1121;:14;1129:5;1121:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;1114:23;;759:395;;;:::o;4917:176:37:-;4994:7;5020:66;5053:20;:18;:20::i;:::-;5075:10;5020:32;:66::i;:::-;5013:73;;4917:176;;;:::o;6803:260:36:-;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;7047:9;7040:16;;;;;6803:260;;;;;;:::o;8989:128:21:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;4113:179:37:-;4168:7;2079:95;4226:11;4239:14;4255:13;4278:4;4204:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;:::o;3385:267:33:-;3479:13;1390:66;3537:17;;3527:5;3508:46;3504:142;;3577:15;3586:5;3577:8;:15::i;:::-;3570:22;;;;3504:142;3630:5;3623:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3385:267;;;;;:::o;3353:401:38:-;3446:14;3555:4;3549:11;3585:10;3580:3;3573:23;3632:15;3625:4;3620:3;3616:14;3609:39;3684:10;3677:4;3672:3;3668:14;3661:34;3733:4;3728:3;3718:20;3708:30;;3524:224;3353:401;;;;:::o;5140:1530:36:-;5266:7;5275:12;5289:7;6199:66;6194:1;6186:10;;:79;6182:164;;;6297:1;6301:30;6333:1;6281:54;;;;;;;;6182:164;6440:14;6457:24;6467:4;6473:1;6476;6479;6457:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6440:41;;6513:1;6495:20;;:6;:20;;;6491:113;;6547:1;6551:29;6590:1;6582:10;;6531:62;;;;;;;;;6491:113;6622:6;6630:20;6660:1;6652:10;;6614:49;;;;;;;5140:1530;;;;;;;;;:::o;7196:532::-;7291:20;7282:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;7278:444;7327:7;7278:444;7387:29;7378:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;7374:348;;7439:23;;;;;;;;;;;;;;7374:348;7492:35;7483:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;7479:243;;7586:8;7578:17;;7550:46;;;;;;;;;;;:::i;:::-;;;;;;;;7479:243;7626:30;7617:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;7613:109;;7702:8;7679:32;;;;;;;;;;;:::i;:::-;;;;;;;;7613:109;7196:532;;;:::o;2078:405:33:-;2137:13;2162:11;2176:16;2187:4;2176:10;:16::i;:::-;2162:30;;2280:17;2311:2;2300:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2280:34;;2402:3;2397;2390:16;2442:4;2435;2430:3;2426:14;2419:28;2473:3;2466:10;;;;2078:405;;;:::o;2555:245::-;2616:7;2635:14;2688:4;2679;2652:33;;:40;2635:57;;2715:2;2706:6;:11;2702:69;;;2740:20;;;;;;;;;;;;;;2702:69;2787:6;2780:13;;;2555:245;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:133:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:246::-;1883:1;1893:113;1907:6;1904:1;1901:13;1893:113;;;1992:1;1987:3;1983:11;1977:18;1973:1;1968:3;1964:11;1957:39;1929:2;1926:1;1922:10;1917:15;;1893:113;;;2040:1;2031:6;2026:3;2022:16;2015:27;1864:184;1802:246;;;:::o;2054:102::-;2095:6;2146:2;2142:7;2137:2;2130:5;2126:14;2122:28;2112:38;;2054:102;;;:::o;2162:377::-;2250:3;2278:39;2311:5;2278:39;:::i;:::-;2333:71;2397:6;2392:3;2333:71;:::i;:::-;2326:78;;2413:65;2471:6;2466:3;2459:4;2452:5;2448:16;2413:65;:::i;:::-;2503:29;2525:6;2503:29;:::i;:::-;2498:3;2494:39;2487:46;;2254:285;2162:377;;;;:::o;2545:313::-;2658:4;2696:2;2685:9;2681:18;2673:26;;2745:9;2739:4;2735:20;2731:1;2720:9;2716:17;2709:47;2773:78;2846:4;2837:6;2773:78;:::i;:::-;2765:86;;2545:313;;;;:::o;2864:126::-;2901:7;2941:42;2934:5;2930:54;2919:65;;2864:126;;;:::o;2996:96::-;3033:7;3062:24;3080:5;3062:24;:::i;:::-;3051:35;;2996:96;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:619::-;4690:6;4698;4706;4755:2;4743:9;4734:7;4730:23;4726:32;4723:119;;;4761:79;;:::i;:::-;4723:119;4881:1;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4852:117;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;5136:2;5162:53;5207:7;5198:6;5187:9;5183:22;5162:53;:::i;:::-;5152:63;;5107:118;4613:619;;;;;:::o;5238:86::-;5273:7;5313:4;5306:5;5302:16;5291:27;;5238:86;;;:::o;5330:112::-;5413:22;5429:5;5413:22;:::i;:::-;5408:3;5401:35;5330:112;;:::o;5448:214::-;5537:4;5575:2;5564:9;5560:18;5552:26;;5588:67;5652:1;5641:9;5637:17;5628:6;5588:67;:::i;:::-;5448:214;;;;:::o;5668:77::-;5705:7;5734:5;5723:16;;5668:77;;;:::o;5751:118::-;5838:24;5856:5;5838:24;:::i;:::-;5833:3;5826:37;5751:118;;:::o;5875:222::-;5968:4;6006:2;5995:9;5991:18;5983:26;;6019:71;6087:1;6076:9;6072:17;6063:6;6019:71;:::i;:::-;5875:222;;;;:::o;6103:118::-;6190:24;6208:5;6190:24;:::i;:::-;6185:3;6178:37;6103:118;;:::o;6227:222::-;6320:4;6358:2;6347:9;6343:18;6335:26;;6371:71;6439:1;6428:9;6424:17;6415:6;6371:71;:::i;:::-;6227:222;;;;:::o;6455:329::-;6514:6;6563:2;6551:9;6542:7;6538:23;6534:32;6531:119;;;6569:79;;:::i;:::-;6531:119;6689:1;6714:53;6759:7;6750:6;6739:9;6735:22;6714:53;:::i;:::-;6704:63;;6660:117;6455:329;;;;:::o;6790:886::-;7051:4;7089:3;7078:9;7074:19;7066:27;;7103:71;7171:1;7160:9;7156:17;7147:6;7103:71;:::i;:::-;7184:72;7252:2;7241:9;7237:18;7228:6;7184:72;:::i;:::-;7266;7334:2;7323:9;7319:18;7310:6;7266:72;:::i;:::-;7348;7416:2;7405:9;7401:18;7392:6;7348:72;:::i;:::-;7430:73;7498:3;7487:9;7483:19;7474:6;7430:73;:::i;:::-;7513;7581:3;7570:9;7566:19;7557:6;7513:73;:::i;:::-;7596;7664:3;7653:9;7649:19;7640:6;7596:73;:::i;:::-;6790:886;;;;;;;;;;:::o;7682:108::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7682:108;;:::o;7846:1429::-;7993:4;7988:3;7984:14;8081:4;8074:5;8070:16;8064:23;8100:63;8157:4;8152:3;8148:14;8134:12;8100:63;:::i;:::-;8008:165;8257:4;8250:5;8246:16;8240:23;8276:63;8333:4;8328:3;8324:14;8310:12;8276:63;:::i;:::-;8183:166;8444:4;8437:5;8433:16;8427:23;8463:63;8520:4;8515:3;8511:14;8497:12;8463:63;:::i;:::-;8359:177;8630:4;8623:5;8619:16;8613:23;8649:63;8706:4;8701:3;8697:14;8683:12;8649:63;:::i;:::-;8546:176;8813:4;8806:5;8802:16;8796:23;8832:63;8889:4;8884:3;8880:14;8866:12;8832:63;:::i;:::-;8732:173;8988:4;8981:5;8977:16;8971:23;9007:63;9064:4;9059:3;9055:14;9041:12;9007:63;:::i;:::-;8915:165;9176:4;9169:5;9165:16;9159:23;9195:63;9252:4;9247:3;9243:14;9229:12;9195:63;:::i;:::-;9090:178;7962:1313;7846:1429;;:::o;9281:323::-;9424:4;9462:3;9451:9;9447:19;9439:27;;9476:121;9594:1;9583:9;9579:17;9570:6;9476:121;:::i;:::-;9281:323;;;;:::o;9610:149::-;9646:7;9686:66;9679:5;9675:78;9664:89;;9610:149;;;:::o;9765:115::-;9850:23;9867:5;9850:23;:::i;:::-;9845:3;9838:36;9765:115;;:::o;9886:114::-;9953:6;9987:5;9981:12;9971:22;;9886:114;;;:::o;10006:184::-;10105:11;10139:6;10134:3;10127:19;10179:4;10174:3;10170:14;10155:29;;10006:184;;;;:::o;10196:132::-;10263:4;10286:3;10278:11;;10316:4;10311:3;10307:14;10299:22;;10196:132;;;:::o;10334:179::-;10403:10;10424:46;10466:3;10458:6;10424:46;:::i;:::-;10502:4;10497:3;10493:14;10479:28;;10334:179;;;;:::o;10519:113::-;10589:4;10621;10616:3;10612:14;10604:22;;10519:113;;;:::o;10668:732::-;10787:3;10816:54;10864:5;10816:54;:::i;:::-;10886:86;10965:6;10960:3;10886:86;:::i;:::-;10879:93;;10996:56;11046:5;10996:56;:::i;:::-;11075:7;11106:1;11091:284;11116:6;11113:1;11110:13;11091:284;;;11192:6;11186:13;11219:63;11278:3;11263:13;11219:63;:::i;:::-;11212:70;;11305:60;11358:6;11305:60;:::i;:::-;11295:70;;11151:224;11138:1;11135;11131:9;11126:14;;11091:284;;;11095:14;11391:3;11384:10;;10792:608;;;10668:732;;;;:::o;11406:1215::-;11755:4;11793:3;11782:9;11778:19;11770:27;;11807:69;11873:1;11862:9;11858:17;11849:6;11807:69;:::i;:::-;11923:9;11917:4;11913:20;11908:2;11897:9;11893:18;11886:48;11951:78;12024:4;12015:6;11951:78;:::i;:::-;11943:86;;12076:9;12070:4;12066:20;12061:2;12050:9;12046:18;12039:48;12104:78;12177:4;12168:6;12104:78;:::i;:::-;12096:86;;12192:72;12260:2;12249:9;12245:18;12236:6;12192:72;:::i;:::-;12274:73;12342:3;12331:9;12327:19;12318:6;12274:73;:::i;:::-;12357;12425:3;12414:9;12410:19;12401:6;12357:73;:::i;:::-;12478:9;12472:4;12468:20;12462:3;12451:9;12447:19;12440:49;12506:108;12609:4;12600:6;12506:108;:::i;:::-;12498:116;;11406:1215;;;;;;;;;;:::o;12627:116::-;12697:21;12712:5;12697:21;:::i;:::-;12690:5;12687:32;12677:60;;12733:1;12730;12723:12;12677:60;12627:116;:::o;12749:133::-;12792:5;12830:6;12817:20;12808:29;;12846:30;12870:5;12846:30;:::i;:::-;12749:133;;;;:::o;12888:613::-;12962:6;12970;12978;13027:2;13015:9;13006:7;13002:23;12998:32;12995:119;;;13033:79;;:::i;:::-;12995:119;13153:1;13178:53;13223:7;13214:6;13203:9;13199:22;13178:53;:::i;:::-;13168:63;;13124:117;13280:2;13306:53;13351:7;13342:6;13331:9;13327:22;13306:53;:::i;:::-;13296:63;;13251:118;13408:2;13434:50;13476:7;13467:6;13456:9;13452:22;13434:50;:::i;:::-;13424:60;;13379:115;12888:613;;;;;:::o;13507:619::-;13584:6;13592;13600;13649:2;13637:9;13628:7;13624:23;13620:32;13617:119;;;13655:79;;:::i;:::-;13617:119;13775:1;13800:53;13845:7;13836:6;13825:9;13821:22;13800:53;:::i;:::-;13790:63;;13746:117;13902:2;13928:53;13973:7;13964:6;13953:9;13949:22;13928:53;:::i;:::-;13918:63;;13873:118;14030:2;14056:53;14101:7;14092:6;14081:9;14077:22;14056:53;:::i;:::-;14046:63;;14001:118;13507:619;;;;;:::o;14132:118::-;14203:22;14219:5;14203:22;:::i;:::-;14196:5;14193:33;14183:61;;14240:1;14237;14230:12;14183:61;14132:118;:::o;14256:135::-;14300:5;14338:6;14325:20;14316:29;;14354:31;14379:5;14354:31;:::i;:::-;14256:135;;;;:::o;14397:122::-;14470:24;14488:5;14470:24;:::i;:::-;14463:5;14460:35;14450:63;;14509:1;14506;14499:12;14450:63;14397:122;:::o;14525:139::-;14571:5;14609:6;14596:20;14587:29;;14625:33;14652:5;14625:33;:::i;:::-;14525:139;;;;:::o;14670:1199::-;14781:6;14789;14797;14805;14813;14821;14829;14878:3;14866:9;14857:7;14853:23;14849:33;14846:120;;;14885:79;;:::i;:::-;14846:120;15005:1;15030:53;15075:7;15066:6;15055:9;15051:22;15030:53;:::i;:::-;15020:63;;14976:117;15132:2;15158:53;15203:7;15194:6;15183:9;15179:22;15158:53;:::i;:::-;15148:63;;15103:118;15260:2;15286:53;15331:7;15322:6;15311:9;15307:22;15286:53;:::i;:::-;15276:63;;15231:118;15388:2;15414:53;15459:7;15450:6;15439:9;15435:22;15414:53;:::i;:::-;15404:63;;15359:118;15516:3;15543:51;15586:7;15577:6;15566:9;15562:22;15543:51;:::i;:::-;15533:61;;15487:117;15643:3;15670:53;15715:7;15706:6;15695:9;15691:22;15670:53;:::i;:::-;15660:63;;15614:119;15772:3;15799:53;15844:7;15835:6;15824:9;15820:22;15799:53;:::i;:::-;15789:63;;15743:119;14670:1199;;;;;;;;;;:::o;15875:474::-;15943:6;15951;16000:2;15988:9;15979:7;15975:23;15971:32;15968:119;;;16006:79;;:::i;:::-;15968:119;16126:1;16151:53;16196:7;16187:6;16176:9;16172:22;16151:53;:::i;:::-;16141:63;;16097:117;16253:2;16279:53;16324:7;16315:6;16304:9;16300:22;16279:53;:::i;:::-;16269:63;;16224:118;15875:474;;;;;:::o;16355:85::-;16400:7;16429:5;16418:16;;16355:85;;;:::o;16446:60::-;16474:3;16495:5;16488:12;;16446:60;;;:::o;16512:158::-;16570:9;16603:61;16621:42;16630:32;16656:5;16630:32;:::i;:::-;16621:42;:::i;:::-;16603:61;:::i;:::-;16590:74;;16512:158;;;:::o;16676:147::-;16771:45;16810:5;16771:45;:::i;:::-;16766:3;16759:58;16676:147;;:::o;16829:348::-;16958:4;16996:2;16985:9;16981:18;16973:26;;17009:79;17085:1;17074:9;17070:17;17061:6;17009:79;:::i;:::-;17098:72;17166:2;17155:9;17151:18;17142:6;17098:72;:::i;:::-;16829:348;;;;;:::o;17183:180::-;17231:77;17228:1;17221:88;17328:4;17325:1;17318:15;17352:4;17349:1;17342:15;17369:410;17409:7;17432:20;17450:1;17432:20;:::i;:::-;17427:25;;17466:20;17484:1;17466:20;:::i;:::-;17461:25;;17521:1;17518;17514:9;17543:30;17561:11;17543:30;:::i;:::-;17532:41;;17722:1;17713:7;17709:15;17706:1;17703:22;17683:1;17676:9;17656:83;17633:139;;17752:18;;:::i;:::-;17633:139;17417:362;17369:410;;;;:::o;17785:180::-;17833:77;17830:1;17823:88;17930:4;17927:1;17920:15;17954:4;17951:1;17944:15;17971:185;18011:1;18028:20;18046:1;18028:20;:::i;:::-;18023:25;;18062:20;18080:1;18062:20;:::i;:::-;18057:25;;18101:1;18091:35;;18106:18;;:::i;:::-;18091:35;18148:1;18145;18141:9;18136:14;;17971:185;;;;:::o;18162:191::-;18202:3;18221:20;18239:1;18221:20;:::i;:::-;18216:25;;18255:20;18273:1;18255:20;:::i;:::-;18250:25;;18298:1;18295;18291:9;18284:16;;18319:3;18316:1;18313:10;18310:36;;;18326:18;;:::i;:::-;18310:36;18162:191;;;;:::o;18359:176::-;18391:1;18408:20;18426:1;18408:20;:::i;:::-;18403:25;;18442:20;18460:1;18442:20;:::i;:::-;18437:25;;18481:1;18471:35;;18486:18;;:::i;:::-;18471:35;18527:1;18524;18520:9;18515:14;;18359:176;;;;:::o;18541:194::-;18581:4;18601:20;18619:1;18601:20;:::i;:::-;18596:25;;18635:20;18653:1;18635:20;:::i;:::-;18630:25;;18679:1;18676;18672:9;18664:17;;18703:1;18697:4;18694:11;18691:37;;;18708:18;;:::i;:::-;18691:37;18541:194;;;;:::o;18741:180::-;18789:77;18786:1;18779:88;18886:4;18883:1;18876:15;18910:4;18907:1;18900:15;18927:320;18971:6;19008:1;19002:4;18998:12;18988:22;;19055:1;19049:4;19045:12;19076:18;19066:81;;19132:4;19124:6;19120:17;19110:27;;19066:81;19194:2;19186:6;19183:14;19163:18;19160:38;19157:84;;19213:18;;:::i;:::-;19157:84;18978:269;18927:320;;;:::o;19253:143::-;19310:5;19341:6;19335:13;19326:22;;19357:33;19384:5;19357:33;:::i;:::-;19253:143;;;;:::o;19402:351::-;19472:6;19521:2;19509:9;19500:7;19496:23;19492:32;19489:119;;;19527:79;;:::i;:::-;19489:119;19647:1;19672:64;19728:7;19719:6;19708:9;19704:22;19672:64;:::i;:::-;19662:74;;19618:128;19402:351;;;;:::o;19759:180::-;19807:77;19804:1;19797:88;19904:4;19901:1;19894:15;19928:4;19925:1;19918:15;19945:180;19993:77;19990:1;19983:88;20090:4;20087:1;20080:15;20114:4;20111:1;20104:15;20131:775;20364:4;20402:3;20391:9;20387:19;20379:27;;20416:71;20484:1;20473:9;20469:17;20460:6;20416:71;:::i;:::-;20497:72;20565:2;20554:9;20550:18;20541:6;20497:72;:::i;:::-;20579;20647:2;20636:9;20632:18;20623:6;20579:72;:::i;:::-;20661;20729:2;20718:9;20714:18;20705:6;20661:72;:::i;:::-;20743:73;20811:3;20800:9;20796:19;20787:6;20743:73;:::i;:::-;20826;20894:3;20883:9;20879:19;20870:6;20826:73;:::i;:::-;20131:775;;;;;;;;;:::o;20912:332::-;21033:4;21071:2;21060:9;21056:18;21048:26;;21084:71;21152:1;21141:9;21137:17;21128:6;21084:71;:::i;:::-;21165:72;21233:2;21222:9;21218:18;21209:6;21165:72;:::i;:::-;20912:332;;;;;:::o;21250:::-;21371:4;21409:2;21398:9;21394:18;21386:26;;21422:71;21490:1;21479:9;21475:17;21466:6;21422:71;:::i;:::-;21503:72;21571:2;21560:9;21556:18;21547:6;21503:72;:::i;:::-;21250:332;;;;;:::o;21588:442::-;21737:4;21775:2;21764:9;21760:18;21752:26;;21788:71;21856:1;21845:9;21841:17;21832:6;21788:71;:::i;:::-;21869:72;21937:2;21926:9;21922:18;21913:6;21869:72;:::i;:::-;21951;22019:2;22008:9;22004:18;21995:6;21951:72;:::i;:::-;21588:442;;;;;;:::o;22036:664::-;22241:4;22279:3;22268:9;22264:19;22256:27;;22293:71;22361:1;22350:9;22346:17;22337:6;22293:71;:::i;:::-;22374:72;22442:2;22431:9;22427:18;22418:6;22374:72;:::i;:::-;22456;22524:2;22513:9;22509:18;22500:6;22456:72;:::i;:::-;22538;22606:2;22595:9;22591:18;22582:6;22538:72;:::i;:::-;22620:73;22688:3;22677:9;22673:19;22664:6;22620:73;:::i;:::-;22036:664;;;;;;;;:::o;22706:545::-;22879:4;22917:3;22906:9;22902:19;22894:27;;22931:71;22999:1;22988:9;22984:17;22975:6;22931:71;:::i;:::-;23012:68;23076:2;23065:9;23061:18;23052:6;23012:68;:::i;:::-;23090:72;23158:2;23147:9;23143:18;23134:6;23090:72;:::i;:::-;23172;23240:2;23229:9;23225:18;23216:6;23172:72;:::i;:::-;22706:545;;;;;;;:::o;23257:180::-;23305:77;23302:1;23295:88;23402:4;23399:1;23392:15;23426:4;23423:1;23416:15","linkReferences":{},"immutableReferences":{"57804":[{"start":2431,"length":32}],"8316":[{"start":7645,"length":32}],"8318":[{"start":7604,"length":32}],"8320":[{"start":7518,"length":32}],"8322":[{"start":8093,"length":32}],"8324":[{"start":8126,"length":32}],"8327":[{"start":7776,"length":32}],"8330":[{"start":7835,"length":32}]}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceForShares(uint256)":"1b0ee4a6","balanceOf(address)":"70a08231","changeDebt(uint256,address,bool)":"ae5c6cd3","circulatingSupply()":"9358928b","debtBalances(address)":"c4ef1c4c","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","eip712Domain()":"84b0196e","fromGhst(uint256)":"35dd0c4d","getRebase(uint256)":"84af40b9","ghst()":"ef2374f2","increaseAllowance(address,uint256)":"39509351","index()":"2986c0e5","initialize(address,address,address)":"c0c53b8b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rebase(uint256,uint256)":"058ecdb4","rebases(uint256)":"73c69eb7","sharesForBalance(uint256)":"775646ed","staking()":"4cf088d9","symbol()":"95d89b41","toGhst(uint256)":"5cce3711","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","treasury()":"61d027b3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"usedIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DebtExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStakingContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotTreasury\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rebase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"LogRebase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stakingContract\",\"type\":\"address\"}],\"name\":\"LogStakingContractUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"LogSupply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"balanceForShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"add\",\"type\":\"bool\"}],\"name\":\"changeDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"circulatingSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"debtBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"imbalance\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"fromGhst\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getRebase\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rebase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStakedBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStakedAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountRebased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumberOccured\",\"type\":\"uint256\"}],\"internalType\":\"struct ISTNK.Rebase\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ghst\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"imbalance\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"index\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staking\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ghst\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"supplyDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"rebase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rebases\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rebase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStakedBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStakedAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountRebased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumberOccured\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sharesForBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staking\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"toGhst\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/StinkyERC20.sol\":\"Stinky\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/\",\":@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/\",\":forge-std-1.9.2/=dependencies/forge-std-1.9.2/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/StinkyERC20.sol\":{\"keccak256\":\"0xedbb9c63dd0970851bad36f79269b67753469247e429785dc61436a49b222b5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://de70db8d30a43af32352e7a39825f51a480c9f405fa054d85295c8e6d8c0c8bc\",\"dweb:/ipfs/QmPddbTu81QSduUqMyViDQgPz8kTLEZsSHoAw3PeoHSEdh\"]},\"src/interfaces/IGHST.sol\":{\"keccak256\":\"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c\",\"dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG\"]},\"src/interfaces/ISTNK.sol\":{\"keccak256\":\"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b\",\"dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ\"]},\"src/interfaces/IStaking.sol\":{\"keccak256\":\"0xec99f7da7b07c78769cd3d35192568b24e3faa0fa1edcbf107c1af3c6070c7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71c04f0ed15f9f3051f825b38b5d8606d900670ffdeb25b0706c729868ca7947\",\"dweb:/ipfs/QmQDaR1n5bhmGRhTxZFMonBDiB5hiTfHrkaU3qiFF7STe3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"usedIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"DebtExists"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[],"type":"error","name":"InsufficientBalance"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidShortString"},{"inputs":[],"type":"error","name":"NotInitializer"},{"inputs":[],"type":"error","name":"NotStakingContract"},{"inputs":[],"type":"error","name":"NotTreasury"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"type":"error","name":"StringTooLong"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"uint256","name":"rebase","type":"uint256","indexed":false},{"internalType":"uint256","name":"index","type":"uint256","indexed":false}],"type":"event","name":"LogRebase","anonymous":false},{"inputs":[{"internalType":"address","name":"stakingContract","type":"address","indexed":false}],"type":"event","name":"LogStakingContractUpdated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"uint256","name":"totalSupply","type":"uint256","indexed":false}],"type":"event","name":"LogSupply","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function","name":"balanceForShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"debtor","type":"address"},{"internalType":"bool","name":"add","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"changeDebt"},{"inputs":[],"stateMutability":"view","type":"function","name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"debtBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"imbalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"fromGhst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"view","type":"function","name":"getRebase","outputs":[{"internalType":"struct ISTNK.Rebase","name":"","type":"tuple","components":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"rebase","type":"uint256"},{"internalType":"uint256","name":"totalStakedBefore","type":"uint256"},{"internalType":"uint256","name":"totalStakedAfter","type":"uint256"},{"internalType":"uint256","name":"amountRebased","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"blockNumberOccured","type":"uint256"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"ghst","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"imbalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_ghst","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[{"internalType":"uint256","name":"supplyDelta","type":"uint256"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"rebase","outputs":[{"internalType":"uint256","name":"newTotalSupply","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"rebases","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"rebase","type":"uint256"},{"internalType":"uint256","name":"totalStakedBefore","type":"uint256"},{"internalType":"uint256","name":"totalStakedAfter","type":"uint256"},{"internalType":"uint256","name":"amountRebased","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"blockNumberOccured","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"sharesForBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"toGhst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin-contracts/=dependencies/@openzeppelin-contracts-5.0.2/","@uniswap-v2-core/=dependencies/@uniswap-v2-core-1.0.1/contracts/","forge-std-1.9.2/=dependencies/forge-std-1.9.2/","forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/StinkyERC20.sol":"Stinky"},"evmVersion":"shanghai","libraries":{}},"sources":{"dependencies/@openzeppelin-contracts-5.0.2/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/ERC20.sol":{"keccak256":"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80","urls":["bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229","dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/ERC20Permit.sol":{"keccak256":"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee","urls":["bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2","dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Nonces.sol":{"keccak256":"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f","urls":["bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e","dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/ShortStrings.sol":{"keccak256":"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6","urls":["bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c","dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol":{"keccak256":"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf","urls":["bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c","dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/EIP712.sol":{"keccak256":"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0","urls":["bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21","dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435","urls":["bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c","dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"dependencies/@openzeppelin-contracts-5.0.2/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/StinkyERC20.sol":{"keccak256":"0xedbb9c63dd0970851bad36f79269b67753469247e429785dc61436a49b222b5c","urls":["bzz-raw://de70db8d30a43af32352e7a39825f51a480c9f405fa054d85295c8e6d8c0c8bc","dweb:/ipfs/QmPddbTu81QSduUqMyViDQgPz8kTLEZsSHoAw3PeoHSEdh"],"license":"MIT"},"src/interfaces/IGHST.sol":{"keccak256":"0x16dd16dafd13762f657557c397286f4476e7c9aa585c057384033798a0fe6c89","urls":["bzz-raw://5c2d865219cc11681e2d104bad179bd4bf532ef901d4d18fe2a4fef80867f35c","dweb:/ipfs/QmZPqppiqQGMXP54w8idGBsGbW499z9ADiZnC1Hqv5qjUG"],"license":"MIT"},"src/interfaces/ISTNK.sol":{"keccak256":"0x24cba3aea4b94fc3129028f9c384ba31310bd97af3cb546f11cdb45e05285cdf","urls":["bzz-raw://ab2faef605bba05e8712228b59ea29724dd5dfcf3e7adb16af6fa8c6ae4d5e3b","dweb:/ipfs/QmVnYMaqMkdwcsdBmP5GvtnybrGcCkw9ofMztB95WqRMhZ"],"license":"MIT"},"src/interfaces/IStaking.sol":{"keccak256":"0xec99f7da7b07c78769cd3d35192568b24e3faa0fa1edcbf107c1af3c6070c7ff","urls":["bzz-raw://71c04f0ed15f9f3051f825b38b5d8606d900670ffdeb25b0706c729868ca7947","dweb:/ipfs/QmQDaR1n5bhmGRhTxZFMonBDiB5hiTfHrkaU3qiFF7STe3"],"license":"MIT"}},"version":1},"id":93} diff --git a/src/abi/UniswapV2Factory.json b/src/abi/UniswapV2Factory.json new file mode 100644 index 0000000..bc0c83c --- /dev/null +++ b/src/abi/UniswapV2Factory.json @@ -0,0 +1 @@ +{"abi":[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]} diff --git a/src/abi/UniswapV2Pair.json b/src/abi/UniswapV2Pair.json new file mode 100644 index 0000000..34e460f --- /dev/null +++ b/src/abi/UniswapV2Pair.json @@ -0,0 +1 @@ +{"abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]} diff --git a/src/abi/UniswapV2Router.json b/src/abi/UniswapV2Router.json new file mode 100644 index 0000000..adff9a0 --- /dev/null +++ b/src/abi/UniswapV2Router.json @@ -0,0 +1 @@ +{"abi":[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]} diff --git a/src/assets/icons/arrow-up.svg b/src/assets/icons/arrow-up.svg new file mode 100644 index 0000000..b4607e0 --- /dev/null +++ b/src/assets/icons/arrow-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/ghost-nav-header.svg b/src/assets/icons/ghost-nav-header.svg new file mode 100644 index 0000000..b82fe65 --- /dev/null +++ b/src/assets/icons/ghost-nav-header.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/hamburger.svg b/src/assets/icons/hamburger.svg new file mode 100644 index 0000000..adb2f0d --- /dev/null +++ b/src/assets/icons/hamburger.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/sushiswap.svg b/src/assets/icons/sushiswap.svg new file mode 100644 index 0000000..5e9ea34 --- /dev/null +++ b/src/assets/icons/sushiswap.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/assets/icons/uniswap.svg b/src/assets/icons/uniswap.svg new file mode 100644 index 0000000..733ac60 --- /dev/null +++ b/src/assets/icons/uniswap.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/wallet.svg b/src/assets/icons/wallet.svg new file mode 100644 index 0000000..2f3f373 --- /dev/null +++ b/src/assets/icons/wallet.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/tokens/DAI.svg b/src/assets/tokens/DAI.svg new file mode 100644 index 0000000..0f0558f --- /dev/null +++ b/src/assets/tokens/DAI.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + diff --git a/src/assets/tokens/GHST.svg b/src/assets/tokens/GHST.svg new file mode 100644 index 0000000..a25c76f --- /dev/null +++ b/src/assets/tokens/GHST.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/tokens/Tether.svg b/src/assets/tokens/Tether.svg new file mode 100644 index 0000000..d291b2e --- /dev/null +++ b/src/assets/tokens/Tether.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/tokens/USDC.svg b/src/assets/tokens/USDC.svg new file mode 100644 index 0000000..663f8a3 --- /dev/null +++ b/src/assets/tokens/USDC.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/tokens/Unknown.svg b/src/assets/tokens/Unknown.svg new file mode 100644 index 0000000..20e70a7 --- /dev/null +++ b/src/assets/tokens/Unknown.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/tokens/eGHST.svg b/src/assets/tokens/eGHST.svg new file mode 100644 index 0000000..8a44d9f --- /dev/null +++ b/src/assets/tokens/eGHST.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/tokens/sGHST.svg b/src/assets/tokens/sGHST.svg new file mode 100644 index 0000000..300f076 --- /dev/null +++ b/src/assets/tokens/sGHST.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/tokens/wETH.svg b/src/assets/tokens/wETH.svg new file mode 100644 index 0000000..2097243 --- /dev/null +++ b/src/assets/tokens/wETH.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/Accordion/Accordion.jsx b/src/components/Accordion/Accordion.jsx new file mode 100644 index 0000000..2b8ca77 --- /dev/null +++ b/src/components/Accordion/Accordion.jsx @@ -0,0 +1,75 @@ +import { Accordion as MuiAccordion, AccordionDetails, AccordionSummary } from "@mui/material"; +import { styled } from "@mui/material/styles"; +import { useEffect, useState } from "react"; +import GhostStyledIcon from "../Icon/GhostIcon"; + +const PREFIX = "Accordion"; + +const classes = { + root: `${PREFIX}-root`, +}; + +const StyledMuiAccordion = styled(MuiAccordion)(() => ({ + [`&.${classes.root}`]: { + "& .MuiAccordionSummary-content": { + display: "initial", + margin: "initial", + }, + "&.MuiAccordion-root": { + backdropFilter: "none", + backgroundColor: "transparent", + }, + "& .MuiAccordionDetails-root": { + padding: "0px 0px 0px 16px", + }, + "& .MuiAccordionSummary-expandIconWrapper": { + padding: "0px 11px", + }, + "& .MuiAccordionSummary-root": { + minHeight: "initial", + padding: "initial", + }, + }, +})); + +const Accordion = ({ + summary, + children, + arrowOnlyCollapse = false, + defaultExpanded = true, + ...props +}) => { + const [expand, setExpand] = useState(false); + const toggleAcordion = () => { + setExpand(prev => !prev); + }; + useEffect(() => { + if (arrowOnlyCollapse && defaultExpanded) { + setExpand(true); + } + }, [defaultExpanded]); + return ( + + + }> + {summary} + + {children} + + ); +}; + +export default Accordion; diff --git a/src/components/BackgroundCanvas/BackgroundCanvas.jsx b/src/components/BackgroundCanvas/BackgroundCanvas.jsx new file mode 100644 index 0000000..50def5c --- /dev/null +++ b/src/components/BackgroundCanvas/BackgroundCanvas.jsx @@ -0,0 +1,231 @@ +import { useState, useEffect } from "react"; + +function BackgroundCanvas() { + const [err, setErr] = useState(false); + + const webGlInit = (some) => { + const options = { + alpha: true, + stencil: false, + antialias: false, + depth: false, + }; + + some.elem = document.querySelector("canvas"); + // eslint-disable-next-line + some.gl = (some.elem.getContext("webgl", options) || some.elem.getContext("experimental-webgl", options)); + + if (!some.gl) return false; + const vertexShader = some.gl.createShader(some.gl.VERTEX_SHADER); + some.gl.shaderSource( + vertexShader, + ` + precision highp float; + attribute vec2 aPosition; + uniform vec3 uHSV; + uniform vec2 uResolution; + varying vec4 vColor; + vec3 hsv2rgb(vec3 c) { + vec4 K = vec4(1.0, 3.0, 1.9, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void main() { + gl_PointSize = 1.0; + gl_Position = vec4( + ( aPosition.x / uResolution.x * 2.0) - 1.0, + (-aPosition.y / uResolution.y * 2.0) + 1.0, + 0.0, + 1.0 + ); + vColor = vec4(hsv2rgb(uHSV), 1.0); + } + `, + ); + + some.gl.compileShader(vertexShader); + const fragmentShader = some.gl.createShader(some.gl.FRAGMENT_SHADER); + some.gl.shaderSource( + fragmentShader, + ` + precision highp float; + varying vec4 vColor; + void main() { + gl_FragColor = vColor; + } + `, + ); + + some.gl.compileShader(fragmentShader); + some.program = some.gl.createProgram(); + some.gl.attachShader(some.program, vertexShader); + some.gl.attachShader(some.program, fragmentShader); + some.gl.linkProgram(some.program); + some.gl.useProgram(some.program); + some.aPosition = some.gl.getAttribLocation(some.program, "aPosition"); + some.gl.enableVertexAttribArray(some.aPosition); + some.positionBuffer = some.gl.createBuffer(); + some.uHSV = some.gl.getUniformLocation(some.program, "uHSV"); + some.gl.enableVertexAttribArray(some.uHSV); + some = webGlResize(some); + window.addEventListener( + "resize", + () => { + some = webGlResize(some); + }, + false, + ); + return some; + }; + + const webGlResize = (some) => { + some.width = some.elem.width = some.elem.offsetWidth; + some.height = some.elem.height = some.elem.offsetHeight; + const uResolution = some.gl.getUniformLocation(some.program, "uResolution"); + some.gl.enableVertexAttribArray(uResolution); + some.gl.uniform2f(uResolution, some.width, some.height); + some.gl.viewport(0, 0, some.gl.drawingBufferWidth, some.gl.drawingBufferHeight); + return some; + }; + + const webGlBlend = (some, s, d) => { + some.gl.blendFunc(s, d); + some.gl.enable(some.gl.BLEND); + }; + + const webGlCreateBuffer = (some, len) => { + some.num = len; + some.bufferLine = new Float32Array(len * 2); + return some; + }; + + const webGlBeginPath = (some) => { + some.k = 0; + return some; + }; + + const webGlStrokeStyle = (some, h, s, v) => { + some.gl.uniform3f(some.uHSV, h, s, v); + return some; + }; + + const webGlLineTo = (some, x, y) => { + some.bufferLine[some.k++] = x; + some.bufferLine[some.k++] = y; + return some; + }; + + const webGlStroke = (some) => { + some.gl.bindBuffer(some.gl.ARRAY_BUFFER, some.positionBuffer); + some.gl.vertexAttribPointer(some.aPosition, 2, some.gl.FLOAT, false, 0, 0); + some.gl.bufferData(some.gl.ARRAY_BUFFER, some.bufferLine, some.gl.DYNAMIC_DRAW); + some.gl.drawArrays(some.gl.LINE_STRIP, 0, some.num); + return some; + }; + + const pelinInit = (some) => { + some.p = new Uint8Array(512); + const p = new Uint8Array(256); + for (let i = 0; i < 256; i++) p[i] = i; + for (let i = 255; i > 0; i--) { + const n = Math.floor((i + 1) * Math.random()); + [p[i], p[n]] = [p[n], p[i]]; + } + for (let i = 0; i < 512; i++) some.p[i] = p[i & 255]; + return some; + }; + + const perlinFade = (t) => { + return t * t * t * (t * (t * 6 - 15) + 10); + }; + + const perlinLerp = (t, a, b) => { + return a + t * (b - a); + }; + + const perlinGrad = (hash, x, y, z) => { + const h = hash & 15; + const u = h < 8 ? x : y; + const v = h < 4 ? y : h === 12 || h === 14 ? x : z; + return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v); + }; + + const perlinNoise = (some, xi, yi, zi) => { + const X = Math.floor(xi) & 255; + const Y = Math.floor(yi) & 255; + const Z = Math.floor(zi) & 255; + const x = xi - Math.floor(xi); + const y = yi - Math.floor(yi); + const z = zi - Math.floor(zi); + const u = perlinFade(x); + const v = perlinFade(y); + const w = perlinFade(z); + const A = some.p[X] + Y; + const AA = some.p[A] + Z; + const AB = some.p[A + 1] + Z; + const B = some.p[X + 1] + Y; + const BA = some.p[B] + Z; + const BB = some.p[B + 1] + Z; + return perlinLerp( + w, + perlinLerp( + v, + perlinLerp(u, perlinGrad(some.p[AA], x, y, z), perlinGrad(some.p[BA], x - 1, y, z)), + perlinLerp(u, perlinGrad(some.p[AB], x, y - 1, z), perlinGrad(some.p[BB], x - 1, y - 1, z)), + ), + perlinLerp( + v, + perlinLerp(u, perlinGrad(some.p[AA + 1], x, y, z - 1), perlinGrad(some.p[BA + 1], x - 1, y, z - 1)), + perlinLerp(u, perlinGrad(some.p[AB + 1], x, y - 1, z - 1), perlinGrad(some.p[BB + 1], x - 1, y - 1, z - 1)), + ), + ); + }; + + const run = (canvas, perlin, z) => { + const sw = canvas.width / 100; + const sh = sw * 40; + for (let i = 0; i < 180; i++) { + canvas = webGlBeginPath(canvas); + canvas = webGlStrokeStyle(canvas, z % 0.5, 0.5, 0.6); + for (let j = -50; j < 50; j++) { + const h = perlinNoise(perlin, j * 0.05, z - i * 0.01, z); + canvas = webGlLineTo( + canvas, + canvas.width * 0.5 + 0.01 * (i + 180) * j * sw * 0.5, + -90 + i + canvas.height * 0.5 + h * sh, + ); + } + canvas = webGlStroke(canvas); + } + + z += 0.0012; + requestAnimationFrame(function () { + run(canvas, perlin, z); + }); + }; + + // eslint-disable-next-line + const starter = () => { + //let canvas = {}; + let perlin = {}; + let canvas = webGlInit({}); + webGlBlend(canvas, canvas.gl.ONE, canvas.gl.ONE); + perlin = pelinInit(perlin); + canvas = webGlCreateBuffer(canvas, 100); + const z = 0; + run(canvas, perlin, z); + }; + + useEffect(() => { + try { + starter(); + } catch { + setErr(true); + } + }, [starter]); + + if (err === true) return (<>) + return () +} + +export default BackgroundCanvas; diff --git a/src/components/Button/Button.jsx b/src/components/Button/Button.jsx new file mode 100644 index 0000000..19ef07c --- /dev/null +++ b/src/components/Button/Button.jsx @@ -0,0 +1,130 @@ +import { Button as MuiButton, CircularProgress } from "@mui/material"; +import { styled } from "@mui/material/styles"; + +import GhostStyledIcon from "../Icon/GhostIcon"; +import ArrowUp from "../../assets/icons/arrow-up.svg?react"; + +const PREFIX = "custom"; + +const classes = { + root: `${PREFIX}-root`, +}; + +const StyledMuiButton = styled(MuiButton, { + shouldForwardProp: prop => prop !== "icon", +})(({ icon }) => ({ + [`&.${classes.root}`]: { + fontSize: "15px", + fontWeight: 500, + height: "39px", + borderRadius: "6px", + lineHeight: "21px", + margin: "4.5px", + textTransform: "none", + textDecoration: "none", + whiteSpace: "nowrap", + maxHeight: "39px", + padding: icon ? "9px" : "6px 16px", + "&.MuiButton-text": { + "&:hover": { + backgroundColor: "transparent", + }, + }, + "& .MuiSvgIcon-root": { + fontSize: "22px", + }, + "&.MuiButton-fullWidth": { + marginLeft: "0px", + marginRight: "0px", + }, + "&.MuiButton-sizeLarge": { + minWidth: icon ? "inherit" : "250px", + height: "51px", + maxHeight: "51px", + padding: icon ? "12px" : "6px 16px", + fontSize: "18px", + "& .MuiSvgIcon-root": { + fontSize: "29px", + }, + }, + "&.MuiButton-sizeSmall": { + padding: icon ? "6px" : "0px 23px", + height: "33px", + fontSize: "14px", + "& .MuiSvgIcon-root": { + fontSize: "18px", + }, + }, + "& .MuiButton-endIcon": { + marginLeft: "8px", + }, + "& .MuiButton-startIcon": { + marginRight: "8px", + }, + }, +})); + +const Button = ({ + disableElevation = true, + disableFocusRipple = true, + disableRipple = true, + template = "primary", + startIconName, + endIconName, + className = "", + loading, + ...props +}) => { + let variant = props.variant; + let color = props.color; + let localProps = {}; + //let target: HTMLAttributeAnchorTarget = undefined; + switch (template) { + case "primary": + variant = "contained"; + color = "primary"; + break; + case "secondary": + variant = "outlined"; + color = "secondary"; + break; + case "tertiary": + variant = "outlined"; + color = "primary"; + break; + case "text": + variant = "text"; + color = "secondary"; + break; + case "success": + variant = "contained"; + color = "success"; + break; + } + if (props.href) { + localProps = { + target: "_blank", + }; + } + const endIcon = endIconName || (props.href && ArrowUp) || null; + return ( + : null} + endIcon={endIcon ? : null} + > + {loading && } + {props.icon && !props.children ? : null} + {props.children} + + ); +}; + +export default Button; diff --git a/src/components/Button/index.jsx b/src/components/Button/index.jsx new file mode 100644 index 0000000..9c6d25e --- /dev/null +++ b/src/components/Button/index.jsx @@ -0,0 +1,20 @@ +import Button from "./Button"; + +export const PrimaryButton = (props) => { + return + )} + + + + ); +}; + +export default SwapCard; diff --git a/src/components/Swap/SwapCollection.jsx b/src/components/Swap/SwapCollection.jsx new file mode 100644 index 0000000..9096a75 --- /dev/null +++ b/src/components/Swap/SwapCollection.jsx @@ -0,0 +1,65 @@ +import { Box, styled, useTheme } from "@mui/material"; +import { ReactElement } from "react"; +import GhostStyledIcon from "../Icon/GhostIcon"; +import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; +import LoopIcon from '@mui/icons-material/Loop'; + +const StyledArrow = styled(Box)( + ({ theme, onClick }) => + onClick && { + "&": { + transitionProperty: "all", + transitionTimingFunction: " cubic-bezier(.4,0,.2,1)", + transitionDuration: ".15s", + cursor: "pointer", + }, + "&:hover": { + " & .rotate": { + WebkitTransform: "rotateZ(-360deg)", + MozTransition: "rotateZ(-360deg)", + transform: "rotateZ(-360deg)", + }, + }, + "& .rotate": { + WebkitTransition: "0.6s ease-out", + MozTransition: "0.6s ease-out", + transition: " 0.6s ease-out", + }, + }, +); + +const SwapCollection = ({ UpperSwapCard, LowerSwapCard, arrowOnClick }) => { + const theme = useTheme(); + + return ( + + {UpperSwapCard} + + + + + + + + {LowerSwapCard} + + ); +}; + +export default SwapCollection; diff --git a/src/components/Tabs/Tabs.jsx b/src/components/Tabs/Tabs.jsx new file mode 100644 index 0000000..914abef --- /dev/null +++ b/src/components/Tabs/Tabs.jsx @@ -0,0 +1,35 @@ +import { Tab as MuiTab, Tabs as MuiTabs } from "@mui/material"; +import { styled } from "@mui/material/styles"; +import React from "react"; +const PREFIX = "Tabs"; + +const classes = { + root: `${PREFIX}-root`, +}; + +const StyledMuiTabs = styled(MuiTabs)(() => ({ + [`&.${classes.root}`]: { + "&.MuiTabs-vertical": { + height: "auto", + minHeight: "auto", + }, + " & .MuiTabs-scrollable": { + overflowY: "hidden", + }, + }, +})); + +export const Tabs = ({ className = "", ...props }) => { + return ( + + ); +}; + +const a11yProps = (index) => ({ + id: `simple-tab-${index}`, + "aria-controls": `simple-tabpanel-${index}`, +}); + +export const Tab = ({ value, label, ...props }) => ( + +); diff --git a/src/components/Token/Token.jsx b/src/components/Token/Token.jsx new file mode 100644 index 0000000..e57af9d --- /dev/null +++ b/src/components/Token/Token.jsx @@ -0,0 +1,64 @@ +import { SvgIcon } from "@mui/material"; +import { styled } from "@mui/material/styles"; + +import FtsoIcon from "../../assets/tokens/eGHST.svg?react"; +import StnkIcon from "../../assets/tokens/sGHST.svg?react"; +import GhstIcon from "../../assets/tokens/GHST.svg?react"; +import DaiIcon from "../../assets/tokens/DAI.svg?react"; +import WethIcon from "../../assets/tokens/wETH.svg?react"; +import UnknownIcon from "../../assets/tokens/Unknown.svg?react"; + +const PREFIX = "Token"; + +const classes = { + root: `${PREFIX}-root`, +}; + +const StyledSvgIcon = styled(SvgIcon)(() => ({ + [`&.${classes.root}`]: { + display: "flex", + justifyContent: "space-between", + flexDirection: "row", + margin: "12px 0px", + }, +})); + +const Token = ({ name, viewBox = "0 0 260 260", fontSize = "large", ...props }) => { + const parseKnownToken = (name) => { + let icon; + switch (name?.toUpperCase()) { + case "FTSO": + icon = FtsoIcon; + break; + case "STNK": + icon = StnkIcon; + break; + case "GHST": + icon = GhstIcon; + break; + case "GDAI": + icon = DaiIcon; + break; + case "ETH": + icon = WethIcon; + break; + case "WETH": + icon = WethIcon; + break; + default: + icon = UnknownIcon; + } + return icon; + } + + return ( + + ); +}; + +export default Token; diff --git a/src/components/TokenAllowanceGuard/TokenAllowanceGuard.jsx b/src/components/TokenAllowanceGuard/TokenAllowanceGuard.jsx new file mode 100644 index 0000000..6e29b00 --- /dev/null +++ b/src/components/TokenAllowanceGuard/TokenAllowanceGuard.jsx @@ -0,0 +1,125 @@ +import { Box, Grid, Typography, Skeleton } from "@mui/material"; +import { styled } from "@mui/material/styles"; +import React, { ReactNode, useState } from "react"; +import { useChainId } from "wagmi"; + +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { useAllowance, approveTokens } from "../../hooks/tokens"; +import { PrimaryButton } from "../Button"; + +const PREFIX = "TokenAllowanceGuard"; + +const classes = { + inputRow: `${PREFIX}-inputRow`, + gridItem: `${PREFIX}-gridItem`, + input: `${PREFIX}-input`, + button: `${PREFIX}-button`, +}; + +const StyledAllowanceGuard = styled("div")(({ theme }) => ({ + [`& .${classes.inputRow}`]: { + justifyContent: "space-around", + alignItems: "center", + height: "auto", + marginTop: "4px", + }, + + [`& .${classes.gridItem}`]: { + width: "100%", + paddingRight: "5px", + alignItems: "center", + justifyContent: "center", + }, + + [`& .${classes.input}`]: { + [theme.breakpoints.down("md")]: { + marginBottom: "10px", + }, + [theme.breakpoints.up("sm")]: { + marginBottom: "0", + }, + }, + + [`& .${classes.button}`]: { + alignSelf: "center", + width: "100%", + minWidth: "163px", + maxWidth: "542px", + height: "43px", + }, +})); + +export const TokenAllowanceGuard = ({ + message, + isVertical = false, + approvalText = "Approve", + approvalPendingText = "Approving...", + width = "150px", + height = "auto", + spendAmount, + tokenName, + owner, + spender, + decimals, + connect, + children, +}) => { + const chainId = useChainId(); + const [isPending, setIsPending] = useState(false); + + const { + allowance: allowance, + refetch: allowanceRefetch + } = useAllowance(chainId, tokenName, owner, spender, decimals); + + const approve = async () => { + setIsPending(true); + const bigValue = 100000000000000000000000000000000000000000000000000n; + await approveTokens(chainId, tokenName, owner, spender, bigValue); + await allowanceRefetch(); + setIsPending(false); + } + + if (!allowance) { + return ( + + + + ); + } + + if (allowance && spendAmount && allowance.lt(spendAmount)) + return ( + + + + + {owner === "" + ? message ? message : "There is no connected wallet to check if allowance is sufficient." + : "Your current allowance is less than your requested spend amount." + } + + + + + + + owner === "" ? connect() : approve()} + > + {owner === "" ? + "Connect" + : + isPending ? `${approvalPendingText}` : `${approvalText}` + } + + + + + ); + + return {children}; +}; diff --git a/src/components/TokenStack/TokenStack.jsx b/src/components/TokenStack/TokenStack.jsx new file mode 100644 index 0000000..53b8c6d --- /dev/null +++ b/src/components/TokenStack/TokenStack.jsx @@ -0,0 +1,41 @@ +import { Avatar, Box } from "@mui/material"; +import Token from "../Token/Token"; + +const TokenStack = ({ tokens, style, images, network, ...props }) => { + const imageStyles = { + height: "27px", + width: "27px", + ...style, + }; + return ( + + {network && ( + + )} + {images?.map((image, i) => ( + + ))} + {tokens?.map((token, i) => ( + + ))} + + ); +}; + +export default TokenStack; diff --git a/src/components/Tooltip/InfoTooltip.jsx b/src/components/Tooltip/InfoTooltip.jsx new file mode 100644 index 0000000..5885455 --- /dev/null +++ b/src/components/Tooltip/InfoTooltip.jsx @@ -0,0 +1,13 @@ +import GhostStyledIcon from "../Icon/GhostIcon"; +import Tooltip from "./Tooltip"; +import InfoIcon from '@mui/icons-material/Info'; + +const InfoTooltip = ({ message }) => { + return ( + + + + ); +}; + +export default InfoTooltip; diff --git a/src/components/Tooltip/Tooltip.jsx b/src/components/Tooltip/Tooltip.jsx new file mode 100644 index 0000000..34c891e --- /dev/null +++ b/src/components/Tooltip/Tooltip.jsx @@ -0,0 +1,56 @@ +import { Box, Popper, Typography } from "@mui/material"; +import { ReactElement, useState } from "react"; +import Paper from "../Paper/Paper"; + +const Tooltip = ({ message, children }) => { + const [anchorEl, setAnchorEl] = useState(null); + + const handlePopoverOpen = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handlePopoverClose = () => { + setAnchorEl(null); + }; + + const open = Boolean(anchorEl); + const id = open ? undefined : "info-tooltip"; + + return ( + + {children} + + + {typeof message === "string" ? ( + + {message} + + ) : ( + <>{message} + )} + + + +); +}; + +export default Tooltip; diff --git a/src/components/TopBar/TopBar.jsx b/src/components/TopBar/TopBar.jsx new file mode 100644 index 0000000..9994be8 --- /dev/null +++ b/src/components/TopBar/TopBar.jsx @@ -0,0 +1,46 @@ +import { Box, Button, SvgIcon, useMediaQuery, useTheme } from "@mui/material"; +import MenuIcon from "../../assets/icons/hamburger.svg?react"; +import Wallet from "./Wallet" + +const PREFIX = "TopBar"; + +const classes = { + appBar: `${PREFIX}-appBar`, + menuButton: `${PREFIX}-menuButton`, + pageTitle: `${PREFIX}-pageTitle`, +}; + +function TopBar({ chainId, address, connect, handleDrawerToggle }) { + const themeColor = useTheme(); + const desktop = useMediaQuery(themeColor.breakpoints.up(1048)); + return ( + + + + + + {!desktop && ( + + )} + + + ); +} + +export default TopBar; diff --git a/src/components/TopBar/Wallet/InitialWalletView.tsx b/src/components/TopBar/Wallet/InitialWalletView.tsx new file mode 100644 index 0000000..ff3b40a --- /dev/null +++ b/src/components/TopBar/Wallet/InitialWalletView.tsx @@ -0,0 +1,167 @@ +import { + Box, + Button, + Divider, + IconButton, + Paper, + SvgIcon, + Typography, + useMediaQuery, + useTheme, +} from "@mui/material"; +import { styled } from '@mui/material/styles'; +import CloseIcon from '@mui/icons-material/Close'; +import LoopIcon from '@mui/icons-material/Loop'; +import { ReactElement, useState } from "react"; +import { useNavigate, createSearchParams } from "react-router-dom"; + +import GhostStyledIcon from "../../Icon/GhostIcon"; +import { Tokens, useWallet } from "./Token"; +import { PrimaryButton, SecondaryButton } from "../../Button"; + +import ArrowUpIcon from "../../../assets/icons/arrow-up.svg?react"; +import { formatCurrency, shorten } from "../../../helpers"; +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; +import { DAI_ADDRESSES, FTSO_ADDRESSES } from "../../../constants/addresses"; + +import { useAccount, useDisconnect } from "wagmi"; + +const DisconnectButton = ({ onClose }) => { + const { disconnect } = useDisconnect(); + return ( + { + disconnect(); + onClose(); + }} + variant="contained" + fullWidth + > + Disconnect + + ); +}; + +const CloseButton = styled(IconButton)(theme => ({ + root: { + ...theme.overrides?.MuiButton?.containedSecondary, + width: "30px", + height: "30px", + }, +})); + +const WalletTotalValue = ({ address, tokens }) => { + const ghstPrice = tokens.ghst.price; + const [currency, setCurrency] = useState("USD"); + const [topHovered, setTopHovered] = useState(false); + + const walletTotalValueUSD = Object.values(tokens).reduce( + (totalValue, token) => totalValue.add(token.balance.mul(token.price)), + new DecimalBigNumber(0n, 0), + ); + + const walletValue = { + USD: walletTotalValueUSD ? walletTotalValueUSD : new DecimalBigNumber(0n, 0), + GHST: walletTotalValueUSD && ghstPrice.gt(new DecimalBigNumber(0, 0)) ? + walletTotalValueUSD.div(ghstPrice) + : + new DecimalBigNumber(0n, 0), + }; + + return ( + setCurrency(currency === "USD" ? "GHST" : "USD")} + onMouseEnter={() => setTopHovered(true)} + onMouseLeave={() => setTopHovered(false)} + > + + + + MY WALLET + + + {shorten(address)} + + + + + + + + + + {formatCurrency(walletValue[currency], 2, currency === "USD" ? "USD" : "👻" )} + + + ); +}; + +function InitialWalletView({ address, chainId, onClose }) { + const theme = useTheme(); + const navigate = useNavigate(); + const tokens = useWallet(chainId, address); + + const onBtnClick = (dexName, from, to) => { + navigate({ + pathname: "/dex/" + dexName, + search: createSearchParams({ + pool: true, + from: from, + to: to, + }).toString() + }) + onClose(); + } + + return ( + + + + + + + + + + + + + + + + + + + + + + + onBtnClick("uniswap", DAI_ADDRESSES[chainId], FTSO_ADDRESSES[chainId])} + > + FTSO-gDAI on Uniswap + + + + + + + + + ); + } + + export default InitialWalletView; diff --git a/src/components/TopBar/Wallet/Token.tsx b/src/components/TopBar/Wallet/Token.tsx new file mode 100644 index 0000000..514cd6c --- /dev/null +++ b/src/components/TopBar/Wallet/Token.tsx @@ -0,0 +1,255 @@ +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Typography, + Skeleton, + useTheme, +} from "@mui/material"; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import { ChangeEvent, useState, useEffect } from "react"; +import { useNavigate, createSearchParams } from "react-router-dom"; +import { useQuery } from "react-query"; +import { formatCurrency, formatNumber } from "../../../helpers"; + +import GhostStyledIcon from "../../Icon/GhostIcon"; +import TokenStack from "../../TokenStack/TokenStack"; +import { PrimaryButton, SecondaryButton } from "../../Button"; + +import { useBalance } from "../../../hooks/tokens"; +import { useDaiPrice, useFtsoPrice, useStnkPrice, useGhstPrice } from "../../../hooks/prices"; +import { useAccount } from "wagmi"; + +const addTokenToWallet = async (token, userAddress) => { + if (!window.ethereum) return; + try { + await window.ethereum.request({ + method: "wallet_watchAsset", + params: { + type: "ERC20", + options: { + address: token.address, + symbol: token.symbol, + decimals: token.balance._decimals, + image: token.externalUrl, // external host + }, + }, + }); + } catch (error) { + console.log(error); + } +}; + +const BalanceValue = ({ + balance, + balanceValueUSD, + isLoading = false, +}) => ( + + + {formatNumber(balance, 5)} + + + {formatCurrency(balanceValueUSD, 2)} + + +); + +export const Token = (props) => { + const { + symbol, + icons, + address, + price = 0, + balance, + onAddTokenToWallet, + expanded, + onChangeExpanded, + daiAddress, + onClose, + isPool + } = props; + const theme = useTheme(); + const navigate = useNavigate(); + + const useLink = (symbol, fromAddress, toAddress, isPool) => { + if (symbol === "GDAI") { + navigate({ pathname: "/faucet" }) + } else { + navigate({ + pathname: "/dex/uniswap", + search: isPool ? + createSearchParams({ + pool: "true", + from: `${fromAddress}`, + to: `${toAddress}`, + }).toString() + : + createSearchParams({ + from: `${fromAddress}`, + to: `${toAddress}`, + }).toString() + }) + } + onClose(); + } + + return ( + + }> + + + + {symbol} + + + + + + + + + Add to Wallet + + useLink(symbol, daiAddress, address, isPool)} + fullWidth + > + Get on {symbol === "GDAI" ? "Faucet" : "Uniswap"} + + + + + + ); +}; + +const sumObjValues = (obj: Record = {}) => + Object.values(obj).reduce((sum, b = "0.0") => sum + (parseFloat(b) || 0), 0); + +export const useWallet = (chainId, userAddress) => { + const { + balance: daiBalance, + refetch: daiRefetch, + contractAddress: daiAddress, + } = useBalance(chainId, "GDAI", userAddress); + const { + balance: ftsoBalance, + refetch: ftsoRefetch, + contractAddress: ftsoAddress, + } = useBalance(chainId, "FTSO", userAddress); + const { + balance: stnkBalance, + refetch: stnkRefetch, + contractAddress: stnkAddress, + } = useBalance(chainId, "STNK", userAddress); + const { + balance: ghstBalance, + refetch: ghstRefetch, + contractAddress: ghstAddress, + } = useBalance(chainId, "GHST", userAddress); + const { + balance: lpDaiFtsoBalance, + refetch: lpDaiFtsoRefetch, + contractAddress: lpDaiFtsoBalanceAddress, + } = useBalance(chainId, "GDAI_FTSO", userAddress); + + const daiPrice = useDaiPrice(chainId); + const ftsoPrice = useFtsoPrice(chainId); + const stnkPrice = useStnkPrice(chainId); + const ghstPrice = useGhstPrice(chainId); + // TODO: add lp price + + const tokens = { + dai: { + symbol: "GDAI", + address: daiAddress, + balance: daiBalance, + price: daiPrice, + icons: ["GDAI"], + externalUrl: "https://ghostchain.io/wp-content/uploads/2025/03/gDAI.svg", + }, + ftso: { + symbol: "FTSO", + address: ftsoAddress, + balance: ftsoBalance, + price: ftsoPrice, + icons: ["FTSO"], + externalUrl: "https://ghostchain.io/wp-content/uploads/2025/03/eGHST.svg", + }, + stnk: { + symbol: "STNK", + address: stnkAddress, + balance: stnkBalance, + price: stnkPrice, + icons: ["STNK"], + externalUrl: "https://ghostchain.io/wp-content/uploads/2025/03/sGHST.svg", + }, + ghst: { + symbol: "GHST", + address: ghstAddress, + balance: ghstBalance, + price: ghstPrice, + icons: ["GHST"], + externalUrl: "https://ghostchain.io/wp-content/uploads/2025/03/GHST.svg", + }, + daiFtso: { + isPool: true, + symbol: "UNI-V2", + address: lpDaiFtsoBalanceAddress, + balance: lpDaiFtsoBalance, + price: ftsoPrice, + icons: ["GDAI", "FTSO"], + externalUrl: "https://ghostchain.io/wp-content/uploads/2025/03/uni-v2.svg", + } + }; + + return Object.entries(tokens).reduce((wallet, [key, token]) => { + return { + ...wallet, + [key]: { + ...token, + totalBalance: "0", + }, + }; + }, {}); +}; + +export const Tokens = ({ address, tokens, onClose }) => { + const [expanded, setExpanded] = useState(null); + const alwaysShowTokens = [tokens.dai, tokens.ftso, tokens.stnk, tokens.ghst, tokens.daiFtso]; + + const tokenProps = (token) => ({ + ...token, + expanded: expanded === token.symbol, + daiAddress: tokens.dai.address, + onChangeExpanded: (e, isExpanded) => setExpanded(isExpanded ? token.symbol : null), + onAddTokenToWallet: () => addTokenToWallet(token, address), + onClose: () => onClose(), + }); + + return ( + <> + {alwaysShowTokens.map(token => ( + + ))} + + ); +}; diff --git a/src/components/TopBar/Wallet/WalletAddressEns.tsx b/src/components/TopBar/Wallet/WalletAddressEns.tsx new file mode 100644 index 0000000..2c364cb --- /dev/null +++ b/src/components/TopBar/Wallet/WalletAddressEns.tsx @@ -0,0 +1,19 @@ +import { Link } from "@mui/material"; +import { useAccount } from "wagmi"; +import { shorten } from "../../../helpers"; + +export default function WalletAddressEns() { + const { address } = useAccount(); + if (!address) return null; + + return ( +
+ {/*ens?.avatar && {address}*/} + + + {/*ens?.name || shorten(address)*/} + {shorten(address)} + +
+ ); +} diff --git a/src/components/TopBar/Wallet/index.tsx b/src/components/TopBar/Wallet/index.tsx new file mode 100644 index 0000000..3b988a2 --- /dev/null +++ b/src/components/TopBar/Wallet/index.tsx @@ -0,0 +1,85 @@ +import { Button, SvgIcon, SwipeableDrawer, Typography } from "@mui/material"; +import { styled, useTheme } from '@mui/material/styles'; +import { useState } from "react"; +import WalletIcon from "../../../assets/icons/wallet.svg?react"; +import { useAccount, useConnect, injected } from "wagmi"; +import toast from "react-hot-toast"; + +import InitialWalletView from "./InitialWalletView"; + +const WalletButton = ({ openWallet, connect }) => { + const { isConnected, chain } = useAccount(); + const theme = useTheme(); + const onClick = isConnected ? openWallet : connect; + const label = isConnected ? `Wallet on ${chain?.name ? chain.name : "Unknown"}` : `Connect Wallet`; + return ( + + ); +}; + +const PREFIX = "WalletDrawer"; + +const classes = { + drawer: `${PREFIX}-drawer`, + drawerPaper: `${PREFIX}-drawerPaper`, +}; + +const StyledSwipeableDrawer = styled(SwipeableDrawer)(({ theme }) => ({ + [`& .${classes.drawer}`]: { + [theme.breakpoints.up("md")]: { + width: drawerWidth, + flexShrink: 0, + }, + }, + + [`& .${classes.drawerPaper}`]: { + width: drawerWidth, + borderRight: 0, + }, +})); + +const drawerWidth = 360; + +export function Wallet({ address, chainId, connect }) { + const [isWalletOpen, setWalletOpen] = useState(false); + const closeWallet = () => setWalletOpen(false); + const openWallet = () => setWalletOpen(true); + + // only enable backdrop transition on ios devices, + // because we can assume IOS is hosted on hight-end devices and will not drop frames + // also disable discovery on IOS, because of it's 'swipe to go back' feat + const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); + + return ( + <> + + + + + + ); +} + +export default Wallet; diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..1250697 --- /dev/null +++ b/src/config.js @@ -0,0 +1,18 @@ +import { http, fallback, createConfig } from 'wagmi' +import { sepolia } from 'wagmi/chains' + +export const config = createConfig({ + chains: [sepolia], + transports: { + [sepolia.id]: fallback([ + http('https://ethereum-sepolia-rpc.publicnode.com'), + http('https://rpc-sepolia.rockx.com/'), + http('https://1rpc.io/sepolia'), + http('https://eth-sepolia.public.blastapi.io'), + http('https://0xrpc.io/sep'), + http('https://api.zan.top/eth-sepolia'), + http('https://eth-sepolia.api.onfinality.io/public'), + http('https://sepolia.drpc.org') + ]), + }, +}) diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..7d4dda1 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,16 @@ +export enum NetworkId { + TESTNET_SEPOLIA = 11155111, +} + +export const isNetworkAvailable = (chainId, addressChainId) => { + chainId = addressChainId ? addressChainId : chainId; + let exists = false; + switch (chainId) { + case 11155111: + exists = true + break; + default: + break; + } + return exists; +} diff --git a/src/constants/addresses.js b/src/constants/addresses.js new file mode 100644 index 0000000..9e87d64 --- /dev/null +++ b/src/constants/addresses.js @@ -0,0 +1,57 @@ +import { NetworkId } from "../constants"; + +export const STAKING_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0xb22Ad3b4a23EaEA8c06CD151D7C0e3758d0FB580", +}; + +export const BOND_DEPOSITORY_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0x8773AC3258b31D3ACfc99Ffd13768ccB170fcF9f", +}; + +export const DAO_TREASURY_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0x2AAd1EA51044e69756880f580C13a92D910af238", +}; + +export const FTSO_DAI_LP_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0x64B19626bd074cf7B1019798846c363bbA8A0d53", +}; + +export const FTSO_STNK_LP_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0x29965676fc00C3eA9717B2A02739d294399a382e", +} + +export const DAI_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0xc7Afd3bC4c74f6E07880447b1759d5d639F2525F", +}; + +export const WETH_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14", +}; + +export const GHST_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0x4643076087234d9B81974beF1eC9c25F3A0202B9", +}; + +export const STNK_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0x84060da636f5a83f2668ad238f09f8c667a1ec8b", +}; + +export const FTSO_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0x0eF2E888710E9f1d5E734f9ce30FAD40c832D5F3", +}; + +export const DISTRIBUTOR_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0xE433D078a555163dC6B53968E72418B6a1618f04", +}; + +export const GHOST_GOVERNANCE_ADDRESSES = { + [NetworkId.TESTNET_SEPOLIA]: "0xD40E6442Ee01c234CD8AaF335122CfbB2aec8548", +}; + +export const UNISWAP_V2_ROUTER = { + [NetworkId.TESTNET_SEPOLIA]: "0xee567fe1712faf6149d80da1e6934e354124cfe3", +}; + +export const UNISWAP_V2_FACTORY = { + [NetworkId.TESTNET_SEPOLIA]: "0xF62c03E08ada871A0bEb309762E260a7a6a880E6", +}; diff --git a/src/constants/dexes.js b/src/constants/dexes.js new file mode 100644 index 0000000..ec9c680 --- /dev/null +++ b/src/constants/dexes.js @@ -0,0 +1,14 @@ +import { NetworkId } from "../constants"; + +import UniswapIcon from "../assets/icons/uniswap.svg?react"; +// import SushiswapIcon from "../assets/icons/sushiswap.svg?react"; + +export const AVAILABLE_DEXES = { + [NetworkId.TESTNET_SEPOLIA]: [ + { + name: "Uniswap", + icon: UniswapIcon, + viewBox: "0 0 195 230", + }, + ], +}; diff --git a/src/constants/ecosystem.js b/src/constants/ecosystem.js new file mode 100644 index 0000000..6853cde --- /dev/null +++ b/src/constants/ecosystem.js @@ -0,0 +1,28 @@ +import { NetworkId } from "../constants"; + +export const ECOSYSTEM = [ + { + name: "GHOST chain", + link: "https://chain.ghostchain.io/" + }, + { + name: "ghostNFT", + link: "https://app.nft.ghostchain.io/" + }, + { + name: "ghostAirdrop", + link: "https://airdrop.ghostchain.io/" + }, + { + name: "ghostAirdrop bot", + link: "https://t.me/ghostDAO_airdrop_bot" + }, + { + name: "ghostFaucet", + link: "https://faucet.ghostchain.io/" + }, + { + name: "JML NFT Collection", + link: "https://jml.ghostchain.io/" + }, +]; diff --git a/src/containers/Bond/BondModal.jsx b/src/containers/Bond/BondModal.jsx new file mode 100644 index 0000000..b033724 --- /dev/null +++ b/src/containers/Bond/BondModal.jsx @@ -0,0 +1,178 @@ +import { ArrowBack } from "@mui/icons-material"; +import { Box, Link, Skeleton, Typography } from "@mui/material"; +import { useEffect, useState } from "react"; +import { Link as RouterLink, useLocation, useNavigate, useParams } from "react-router-dom"; +import { useAccount, useChainId } from "wagmi"; +import ReactGA from "react-ga4"; + +import PageTitle from "../../components/PageTitle/PageTitle"; +import Metric from "../../components/Metric/Metric"; +import TokenStack from "../../components/TokenStack/TokenStack"; + +import BondPrice from "./components/BondPrice"; +import BondDiscount from "./components/BondDiscount"; +import BondInputArea from "./components/BondInputArea"; +import BondSettingsModal from "./components/BondSettingsModal"; + +import NotFound from "../NotFound/NotFound"; + +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { NetworkId } from "../../constants"; +import { formatNumber } from "../../helpers"; + +import { useLiveBonds } from "../../hooks/bonds"; +import { useFtsoPrice } from "../../hooks/prices"; + +const BondModalContainer = ({ chainId, address, connect }) => { + const { id } = useParams(); + const { liveBonds } = useLiveBonds(chainId); + const bond = liveBonds.find(bond => bond.id === Number(id)); + + if (!bond) return ; + + return ; +}; + +export const BondModal = ({ bond, chainId, address, connect }) => { + const navigate = useNavigate(); + const { pathname } = useLocation(); + + const [slippage, setSlippage] = useState(localStorage.getItem("bond-slippage") || "10"); + const [formatDecimals, setFormatDecimals] = useState(localStorage.getItem("bond-decimals") || "5"); + const [isSettingsOpen, setSettingsOpen] = useState(false); + const [recipientAddress, setRecipientAddress] = useState(address); + + useEffect(() => { + ReactGA.send({ hitType: "pageview", page: pathname }); + }, []) + + const setSlippageInner = (value) => { + const maybeValue = parseFloat(value); + if (!maybeValue || parseFloat(value) <= 100) { + setSlippage(value); + localStorage.setItem("bond-slippage", value); + } + } + + const setFormatDecimalsInner = (value) => { + if (Number(value) <= 17) { + setFormatDecimals(value); + localStorage.setItem("bond-decimals", value); + } + } + + useEffect(() => { + const handleKeyDown = (event) => { + if (event.key === "Escape") isSettingsOpen ? setSettingsOpen(false) : navigate("/bonds"); + }; + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }, [navigate, isSettingsOpen]); + + return ( + + + + + + + Back + + + + + + + + {bond.quoteToken.name} + + + + } + /> + + + setSettingsOpen(false)} + slippage={slippage} + recipientAddress={recipientAddress} + formatDecimals={formatDecimals} + onRecipientAddressChange={event => setRecipientAddress(event.currentTarget.value)} + onSlippageChange={event => setSlippageInner(event.currentTarget.value)} + onDecimalsChange={event => setFormatDecimalsInner(event.currentTarget.value)} + /> + + + + ) + } + /> + + } + /> + } + /> + + + + setSettingsOpen(true)} + formatDecimals={formatDecimals} + /> + + + + ); +}; + +const TokenPrice = ({ + token, + chainId, + quoteSymbol, + baseSymbol, +}) => { + const priceToken = useFtsoPrice(chainId); + const sameToken = quoteSymbol === baseSymbol; + + const price = sameToken + ? formatNumber(1, 2) + : `${formatNumber(priceToken, 2)}`; + + return price ? ( + <> + {price} {quoteSymbol} + + ) : ( + + ); +}; + +export default BondModalContainer; diff --git a/src/containers/Bond/Bonds.jsx b/src/containers/Bond/Bonds.jsx new file mode 100644 index 0000000..5ecddb5 --- /dev/null +++ b/src/containers/Bond/Bonds.jsx @@ -0,0 +1,86 @@ +import { Box, Tab, Tabs, Container, useMediaQuery } from "@mui/material"; +import { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import ReactGA from "react-ga4"; + +import Paper from "../../components/Paper/Paper"; +import Metric from "../../components/Metric/Metric"; +import MetricCollection from "../../components/Metric/MetricCollection"; +import PageTitle from "../../components/PageTitle/PageTitle"; + +import { formatCurrency } from "../../helpers"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; + +import { BondList } from "./components/BondList"; +import { ClaimBonds } from "./components/ClaimBonds"; + +import { useLiveBonds } from "../../hooks/bonds"; +import { useTotalReserves } from "../../hooks/treasury"; +import { useFtsoPrice } from "../../hooks/prices"; + +const Bonds = ({ chainId, address, connect }) => { + const [isZoomed] = useState(false); + const navigate = useNavigate(); + const [secondsTo, setSecondsTo] = useState(0); + + const isSmallScreen = useMediaQuery("(max-width: 650px)"); + const isVerySmallScreen = useMediaQuery("(max-width: 379px)"); + + useEffect(() => { + ReactGA.send({ hitType: "pageview", page: "/bonds" }); + }, []) + + const { liveBonds } = useLiveBonds(chainId); + const totalReserves = useTotalReserves(chainId); + const ftsoPrice = useFtsoPrice(chainId); + + useEffect(() => { + const interval = setInterval(() => { + const date = Math.round(Date.now() / 1000); + setSecondsTo(date); + }, 1000); + return () => clearInterval(interval); + }, []); + + return ( + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default Bonds; diff --git a/src/containers/Bond/components/BondConfirmModal.jsx b/src/containers/Bond/components/BondConfirmModal.jsx new file mode 100644 index 0000000..305bf08 --- /dev/null +++ b/src/containers/Bond/components/BondConfirmModal.jsx @@ -0,0 +1,115 @@ +import { useState } from "react"; +import { Box, Typography } from "@mui/material"; +import { styled, useTheme } from "@mui/material/styles"; +import SettingsIcon from '@mui/icons-material/Settings'; +import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; +import toast from "react-hot-toast"; + +import GhostStyledIcon from "../../../components/Icon/GhostIcon"; +import Metric from "../../../components/Metric/Metric"; +import Modal from "../../../components/Modal/Modal"; +import TokenStack from "../../../components/TokenStack/TokenStack"; +import DataRow from "../../../components/DataRow/DataRow"; +import { PrimaryButton } from "../../../components/Button"; + +import BondDiscount from "./BondDiscount"; +import BondVesting from "./BondVesting"; +import BondSlippage from "./BondSlippage"; + +import { purchaseBond } from "../../../hooks/bonds"; + +const StyledBox = styled(Box, { + shouldForwardProp: prop => prop !== "template", +})(({ theme }) => { + return { + root: {}, + }; +}); + +const BondConfirmModal = ({ + chainId, + bond, + slippage, + recipientAddress, + spendAmountValue, + spendAmount, + receiveAmount, + handleSettingsOpen, + isOpen, + handleConfirmClose +}) => { + const theme = useTheme(); + const [isPending, setIsPending] = useState(false); + + const onSubmit = async () => { + setIsPending(true); + + const shares = 100000; + const one = BigInt(shares * 100); + const floatSlippage = slippage === "" ? 0 : parseFloat(slippage); + const bigIntSlippage = one + BigInt(Math.round(floatSlippage * shares)); + + const maxPrice = bond.price.inBaseToken._value * bigIntSlippage / one; + const referral = import.meta.env.VITE_APP_REFERRAL_ADDRESS; + + await purchaseBond( + chainId, + bond.id, + spendAmountValue._value.toBigInt(), + maxPrice, + recipientAddress, + referral + ); + + setIsPending(false); + handleConfirmClose(); + } + + return ( + + + + {bond.quoteToken.name} + + + } + onClose={!isPending && handleConfirmClose} + topLeft={} + > + <> + + + + + {bond.quoteToken.name} + + + + + + + {bond.baseToken.name} + + + + + } /> + } /> + } /> + + {isPending ? "Bonding..." : "Confirm Bond Purchase"} + + + + ); +}; + +export default BondConfirmModal; diff --git a/src/containers/Bond/components/BondDiscount.jsx b/src/containers/Bond/components/BondDiscount.jsx new file mode 100644 index 0000000..96ff0f7 --- /dev/null +++ b/src/containers/Bond/components/BondDiscount.jsx @@ -0,0 +1,26 @@ +import { Box, useTheme } from "@mui/material"; +import Chip from "../../../components/Chip/Chip"; +import { formatNumber } from "../../../helpers"; +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; + +const BondDiscount = ({ discount, textOnly }) => { + const theme = useTheme(); + const discountString = `${formatNumber(Number(discount.mul(new DecimalBigNumber("100").toString())), 2)}%`; + + return textOnly ? ( + + {discountString} + + ) : ( + + ); +}; + +export default BondDiscount; diff --git a/src/containers/Bond/components/BondDuration.jsx b/src/containers/Bond/components/BondDuration.jsx new file mode 100644 index 0000000..6c54837 --- /dev/null +++ b/src/containers/Bond/components/BondDuration.jsx @@ -0,0 +1,8 @@ +import { useState, useEffect } from "react"; +import { prettifySecondsInDays } from "../../../helpers/timeUtil"; + +const BondDuration = ({ duration, secondsTo, msg }) => { + return <>{duration - secondsTo > 0 ? prettifySecondsInDays(duration - secondsTo) : msg ? msg : "Closing"}; +}; + +export default BondDuration; diff --git a/src/containers/Bond/components/BondInfoText.jsx b/src/containers/Bond/components/BondInfoText.jsx new file mode 100644 index 0000000..e8c7b87 --- /dev/null +++ b/src/containers/Bond/components/BondInfoText.jsx @@ -0,0 +1,23 @@ +import { Link, Typography, useTheme } from "@mui/material"; + +const BondInfoText = () => { + const theme = useTheme(); + return ( + + Important: Bonding is the act of selling “naked” assets such as gDAI (reserve bonds) or liquidity tokens such as gDAI-FTSO SLP (liquidity bonds) for FTSO at a discount. +  Learn more here. + + ) +}; + +export default BondInfoText; diff --git a/src/containers/Bond/components/BondInputArea.jsx b/src/containers/Bond/components/BondInputArea.jsx new file mode 100644 index 0000000..aaac7c8 --- /dev/null +++ b/src/containers/Bond/components/BondInputArea.jsx @@ -0,0 +1,231 @@ +import { CheckBoxOutlineBlank, CheckBoxOutlined } from "@mui/icons-material"; +import { Box, Checkbox, FormControlLabel } from "@mui/material"; +import { useState, useMemo } from "react"; +import { useLocation } from "react-router-dom"; + +import { BOND_DEPOSITORY_ADDRESSES } from "../../../constants/addresses"; +import { shorten, formatNumber, formatCurrency } from "../../../helpers"; +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; + +import BondDiscount from "./BondDiscount"; +import BondVesting from "./BondVesting"; +import BondConfirmModal from "./BondConfirmModal"; + +import { TokenAllowanceGuard } from "../../../components/TokenAllowanceGuard/TokenAllowanceGuard"; +import { PrimaryButton } from "../../../components/Button"; +import SwapCard from "../../../components/Swap/SwapCard"; +import SwapCollection from "../../../components/Swap/SwapCollection"; +import TokenStack from "../../../components/TokenStack/TokenStack"; +import DataRow from "../../../components/DataRow/DataRow"; +import Paper from "../../../components/Paper/Paper"; + +import { useCurrentIndex } from "../../../hooks/staking"; +import { useBalance } from "../../../hooks/tokens"; + +const BondInputArea = ({ + bond, + chainId, + slippage, + recipientAddress, + formatDecimals, + handleSettingsOpen, + address, + connect +}) => { + const { pathname } = useLocation(); + + const { currentIndex } = useCurrentIndex(chainId); + const { balance } = useBalance(chainId, bond.quoteToken.quoteTokenAddress, address); + + const [amount, setAmount] = useState(""); + const [checked, setChecked] = useState(false); + const [confirmOpen, setConfirmOpen] = useState(false); + + const parsedAmount = useMemo(() => { + return new DecimalBigNumber(amount, bond.quoteToken.decimals); + }, [bond, amount]) + + const amountInBaseToken = useMemo(() => { + if (bond.price.inBaseToken._value !== 0n) return parsedAmount.div(bond.price.inBaseToken); + return new DecimalBigNumber(0n, 0); + }, [parsedAmount]); + + const showDisclaimer = useMemo(() => { + return new DecimalBigNumber("0").gt(bond.discount); + }, [bond]); + + const handleConfirmClose = () => { + setAmount(""); + setConfirmOpen(false); + } + + const setMax = () => { + if (!balance) return; + + if (bond.capacity.inQuoteToken.lt(bond.maxPayout.inQuoteToken)) { + return setAmount( + bond.capacity.inQuoteToken.lt(balance) + ? bond.capacity.inQuoteToken.toString() // Capacity is the smallest + : balance.toString(), + ); + } + + setAmount( + bond.maxPayout.inQuoteToken.lt(balance) + ? bond.maxPayout.inQuoteToken.toString() // Payout is the smallest + : balance.toString(), + ); + }; + + const baseTokenString = (bond.maxPayout.inBaseToken.lt(bond.capacity.inBaseToken) + ? bond.maxPayout.inBaseToken + : bond.capacity.inBaseToken + ); + + const quoteTokenString = (bond.maxPayout.inQuoteToken.lt(bond.capacity.inQuoteToken) + ? bond.maxPayout.inQuoteToken + : bond.capacity.inQuoteToken + ); + + return ( + + + + + } + tokenName={bond.quoteToken.name} + info={formatCurrency(balance, formatDecimals, bond.quoteToken.name)} + endString="Max" + endStringOnClick={setMax} + value={amount} + onChange={event => setAmount(event.currentTarget.value)} + inputProps={{ "data-testid": "fromInput" }} + /> + } + LowerSwapCard={ + } + tokenName={bond.baseToken.name} + value={amountInBaseToken.toString({ decimals: 9 })} + inputProps={{ "data-testid": "toInput" }} + /> + } + /> + + + + First time bonding {bond.quoteToken.name}?
Please approve ghostDAO to use your{" "} + {bond.quoteToken.name} for bonding. + + } + > + {showDisclaimer && ( + setChecked(event.target.checked)} + icon={} + checkedIcon={} + /> + } + label="I understand that I'm buying a negative discount bond" + /> + )} + setConfirmOpen(true)} + > + Bond + +
+ + + + + {formatCurrency(amountInBaseToken, formatDecimals, "FTSO")} + {" "} + {!!currentIndex && ( + + (≈{formatCurrency(amountInBaseToken.div(currentIndex), formatDecimals, "GHST")}) + + )} + + } + tooltip={`The total amount of payout asset you will receive from this bond purchase`} + /> + + + {bond.baseToken === bond.quoteToken + ? `${formatCurrency(baseTokenString, formatDecimals, "FTSO")}` + : `${formatCurrency(baseTokenString, formatDecimals, "FTSO")} (≈${formatCurrency(quoteTokenString, formatDecimals, "GHST")})`} + + } + /> + + } + tooltip="The bond discount is the percentage difference between FTSO market value and the bond's price" + /> + + } + tooltip={"The duration of the Bond whereby the bond can be claimed in its entirety"} + /> + + {recipientAddress !== address && ( + + )} + + +
+
+ handleConfirmClose()} + /> +
+ ); + }; + +export default BondInputArea; diff --git a/src/containers/Bond/components/BondList.jsx b/src/containers/Bond/components/BondList.jsx new file mode 100644 index 0000000..fe60775 --- /dev/null +++ b/src/containers/Bond/components/BondList.jsx @@ -0,0 +1,265 @@ +import { + Box, + Link, + SvgIcon, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Typography, + useMediaQuery +} from "@mui/material"; +import { NavLink } from "react-router-dom"; +import ArrowUp from "../../../assets/icons/arrow-up.svg?react"; + +import BondDiscount from "./BondDiscount"; +import BondDuration from "./BondDuration"; +import BondInfoText from "./BondInfoText"; +import BondPrice from "./BondPrice"; + +import { useScreenSize } from "../../../hooks/useScreenSize"; +import { sortBondsByDiscount, formatNumber } from "../../../helpers"; +import TokenStack from "../../../components/TokenStack/TokenStack"; +import { TertiaryButton } from "../../../components/Button"; + +export const BondList = ({ bonds, secondsTo, chainId }) => { + const isSmallScreen = useScreenSize("md"); + + if (bonds.length === 0) { + return ( + + No active bonds + + ); + } + + if (isSmallScreen) { + return ( + <> + + + + + {sortBondsByDiscount(bonds).map(bond => ( + + ))} + + ); + } + + return ( + <> + + {sortBondsByDiscount(bonds).map(bond => ( + + ))} + + + + + + + ); +}; + +const BondCard = ({ bond, secondsTo }) => { + const quoteTokenName = bond.quoteToken.name; + const baseTokenName = bond.baseToken.name; + + return ( + + + + + + {bond.quoteToken.name} + + + + Get Asset + + + + + + + + + + + Price + + + {bond.isSoldOut ? ( + "--" + ) : ( + + )} + + + + + Discount + { + bond.isSoldOut + ? "--" + : + } + + + + Max Payout + + + {`${payoutTokenCapacity(bond)}${ + bond.baseToken.name !== bond.quoteToken.name ? ` (${quoteTokenCapacity(bond)})` : `` + }`} + + + + + Duration + + + + + + + + + + Bond + + + + + ); +}; + +const BondTable = ({ children }) => ( + + + + + Bond + Price + Discount + Max Payout + Duration + + + + {children} +
+
+); + +const quoteTokenCapacity = (bond) => { + const quoteTokenCapacity = bond.maxPayout.inQuoteToken.lt(bond.capacity.inQuoteToken) + ? bond.maxPayout.inQuoteToken + : bond.capacity.inQuoteToken; + return `${formatNumber(quoteTokenCapacity, 4)} ${bond.quoteToken.name}`; +}; + +const payoutTokenCapacity = (bond) => { + const payoutTokenCapacity = bond.maxPayout.inBaseToken.lt(bond.capacity.inBaseToken) + ? bond.maxPayout.inBaseToken + : bond.capacity.inBaseToken; + return `${formatNumber(payoutTokenCapacity, 4)} FTSO`; +}; + +const BondRow = ({ bond, secondsTo }) => { + const quoteTokenName = bond.quoteToken.name; + const baseTokenName = bond.baseToken.name; + + return ( + + + + + + + + {bond.isSoldOut ? ( + "--" + ) : ( + + )} + + + + + + {bond.isSoldOut ? "--" : } + + + + + + {payoutTokenCapacity(bond)} + {bond.baseToken.name !== bond.quoteToken.name && ( + + {quoteTokenCapacity(bond)} + + )} + + + + + { + bond.isSoldOut + ? "--" + : + } + + + + + + {bond.isSoldOut ? "Sold Out" : `Bond`} + + + + + ); +}; + +const TokenIcons = ({ token, chainId, explorer }) => ( + + + + + {token.name} + + + + + {explorer ? `Explorer` : `Get Asset`} + + + + + + + + + +); diff --git a/src/containers/Bond/components/BondPrice.jsx b/src/containers/Bond/components/BondPrice.jsx new file mode 100644 index 0000000..10f5c6f --- /dev/null +++ b/src/containers/Bond/components/BondPrice.jsx @@ -0,0 +1,9 @@ +const BondPrice = ({ price, symbol }) => { + return ( + <> + {price.toString({ decimals: 2, format: true, trim: false })} {symbol} + + ); +}; + +export default BondPrice; diff --git a/src/containers/Bond/components/BondSettingsModal.jsx b/src/containers/Bond/components/BondSettingsModal.jsx new file mode 100644 index 0000000..09b6e83 --- /dev/null +++ b/src/containers/Bond/components/BondSettingsModal.jsx @@ -0,0 +1,78 @@ +import { Box, FormControl, InputAdornment, InputLabel, OutlinedInput, Typography } from "@mui/material"; +import Modal from "../../../components/Modal/Modal"; + +const BondSettingsModal = props => { + return ( + + + Slippage + + + %} + /> + + + + + Transaction may revert if price changes by more than slippage % + + + + + + Decimal representation + + + + + + + + Number of decimals to be shown in token balances + + + + + + Recipient Address + + + + + + + + Choose recipient address. By default, this is your currently connected address + + + + + ); +}; + +export default BondSettingsModal; diff --git a/src/containers/Bond/components/BondSlippage.jsx b/src/containers/Bond/components/BondSlippage.jsx new file mode 100644 index 0000000..1fa4135 --- /dev/null +++ b/src/containers/Bond/components/BondSlippage.jsx @@ -0,0 +1,26 @@ +import { Box, useTheme } from "@mui/material"; +import Chip from "../../../components/Chip/Chip"; +import { formatNumber } from "../../../helpers"; +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; + +const BondSlippage = ({ slippage, textOnly }) => { + const theme = useTheme(); + const isSlippageBig = parseFloat(slippage) > 15; + + return textOnly ? ( + + {slippage}% + + ) : ( + + ); +}; + +export default BondSlippage; diff --git a/src/containers/Bond/components/BondVesting.jsx b/src/containers/Bond/components/BondVesting.jsx new file mode 100644 index 0000000..9d74149 --- /dev/null +++ b/src/containers/Bond/components/BondVesting.jsx @@ -0,0 +1,7 @@ +import { prettifySecondsInDays } from "../../../helpers/timeUtil"; + +const BondVesting = ({ vesting }) => { + return <>{vesting > 0 ? prettifySecondsInDays(vesting) : "Instant"}; +}; + +export default BondVesting; diff --git a/src/containers/Bond/components/ClaimBonds.jsx b/src/containers/Bond/components/ClaimBonds.jsx new file mode 100644 index 0000000..6dc4a1b --- /dev/null +++ b/src/containers/Bond/components/ClaimBonds.jsx @@ -0,0 +1,236 @@ +import { Box, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from "@mui/material"; +import { useState, useEffect } from "react"; +import toast from "react-hot-toast"; + +import BondVesting from "./BondVesting"; +import BondDuration from "./BondDuration"; +import WarmupConfirmModal from "./WarmupConfirmModal"; + +import Paper from "../../../components/Paper/Paper"; +import TokenStack from "../../../components/TokenStack/TokenStack"; +import { Tab, Tabs } from "../../../components/Tabs/Tabs"; +import { PrimaryButton, TertiaryButton } from "../../../components/Button"; +import { useScreenSize } from "../../../hooks/useScreenSize"; + +import { BOND_DEPOSITORY_ADDRESSES } from "../../../constants/addresses"; + +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; +import { formatCurrency } from "../../../helpers"; + +import { useCurrentIndex, useEpoch, useWarmupLength, useWarmupInfo } from "../../../hooks/staking"; +import { useNotes, redeem } from "../../../hooks/bonds"; + +export const ClaimBonds = ({ chainId, address, secondsTo }) => { + const isSmallScreen = useScreenSize("md"); + const [isPending, setIsPending] = useState(false); + const [isWarmup, setIsWapmup] = useState(false); + const [isPreClaimConfirmed, setPreClaimConfirmed] = useState(false); + const [isPayoutGhst, setIsPayoutGhst] = useState(localStorage.getItem("bond-isGhstPayout") + ? localStorage.getItem("bond-isGhstPayout") === "true" + : true + ); + + const { epoch } = useEpoch(chainId); + const { warmupExists } = useWarmupLength(chainId); + const { warmupInfo } = useWarmupInfo(chainId, BOND_DEPOSITORY_ADDRESSES[chainId]); + + const { currentIndex, refetch: currentIndexRefetch } = useCurrentIndex(chainId); + const { notes, refetch: notesRefetch } = useNotes(chainId, address); + + if (!notes || notes.length === 0) return null; + + const totalClaimableBalance = new DecimalBigNumber( + notes.reduce((res, note) => { + if (secondsTo < note.matured) return res + 0n; + return res + note.payout._value + }, 0n), + 18 + ); + + const setIsPayoutGhstInner = (value) => { + setIsPayoutGhst(value); + localStorage.setItem("bond-isGhstPayout", value); + } + + const onSubmit = async (indexes) => { + const isFundsInWarmup = warmupInfo.deposit._value > 0n; + if ((warmupExists && isFundsInWarmup) || !isPreClaimConfirmed) { + setIsWapmup(true); + } else { + setIsPending(true); + await redeem( + chainId, + address, + isPayoutGhst, + indexes + ); + setIsPending(false); + } + } + + return ( + <> + setIsWapmup(false)} + address={address} + warmupLength={warmupInfo.expiry - epoch.number} + setPreClaimConfirmed={() => setPreClaimConfirmed(true)} + /> + + + + Payout Options + + setIsPayoutGhstInner(view === 1)} + TabIndicatorProps={{ style: { display: "none" } }} + > + + + + + + + + + Claimable Balance + + + + + {isPayoutGhst + ? formatCurrency(totalClaimableBalance, 5, "GHST") + : formatCurrency(currentIndex.mul(totalClaimableBalance), 5, "STNK") + } + + + + onSubmit(notes.filter((note) => secondsTo > note.matured).map(note => note.id))} + > + Claim All + + + + + + {isSmallScreen ? ( + <> + {notes.map((note, index) => ( + + + + + {note.quoteToken.name} + + + + + Duration + + + + + + + Remaining + + + + + + + Payout + + {isPayoutGhst + ? formatCurrency(note.payout, 5, "GHST") + : formatCurrency(currentIndex.mul(note.payout), 5, "STNK") + } + + + + + onSubmit([note.id])} + > + Claim + + + + ))} + + ) : ( + + + + + Bond + Duration + Remaining + Payout + + + + {notes.map((note, index) => ( + + + + + + {note.quoteToken.name} + + + + + + + + + + + + + + + + + + + {isPayoutGhst + ? formatCurrency(note.payout, 5, "GHST") + : formatCurrency(currentIndex.mul(note.payout), 5, "STNK") + } + + + + + onSubmit([note.id])} + > + Claim + + + + ))} + +
+
+ )} +
+
+ + ); +}; diff --git a/src/containers/Bond/components/WarmupConfirmModal.jsx b/src/containers/Bond/components/WarmupConfirmModal.jsx new file mode 100644 index 0000000..1714e4c --- /dev/null +++ b/src/containers/Bond/components/WarmupConfirmModal.jsx @@ -0,0 +1,67 @@ +import { useState } from "react"; +import { Box, Typography } from "@mui/material"; +import { styled, useTheme } from "@mui/material/styles"; +import SettingsIcon from '@mui/icons-material/Settings'; + +import Modal from "../../../components/Modal/Modal"; +import { PrimaryButton } from "../../../components/Button"; + +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; +import { formatNumber } from "../../../helpers"; + +import { purchaseBond } from "../../../hooks/bonds"; +import { claim } from "../../../hooks/staking"; + +const StyledBox = styled(Box, { + shouldForwardProp: prop => prop !== "template", +})(({ theme }) => { + return { + root: {}, + }; +}); + +const WarmupConfirmModal = ({ + chainId, + address, + warmupLength, + isOpen, + handleConfirmClose, + setPreClaimConfirmed +}) => { + const theme = useTheme(); + + const onSubmit = () => { + setPreClaimConfirmed(); + handleConfirmClose(); + } + + return ( + = 0 ? "150px" : "200px"} + open={isOpen} + headerText={ + warmupLength >= 0 + ? "Bond Warm-Up is Pending..." + : "Unlock Bond" + } + onClose={handleConfirmClose} + > + + + { + warmupLength >= 0 + ? `This bond is currently in a warm-up period and cannot be claimed yet. It'll be available for claim in ${warmupLength} epochs.` + : "This bond is warmed-up and can be unlocked. Please unlock it on behalf of the collective." + } + + + {warmupLength < 0 && + Confirm + } + + + ); +}; + +export default WarmupConfirmModal; diff --git a/src/containers/Dex/Dex.jsx b/src/containers/Dex/Dex.jsx new file mode 100644 index 0000000..cbdba53 --- /dev/null +++ b/src/containers/Dex/Dex.jsx @@ -0,0 +1,355 @@ +import { + Box, + Container, + Divider, + Typography, + InputLabel, + FormControl, + OutlinedInput, + useMediaQuery, + useTheme, +} from "@mui/material"; +import SettingsIcon from '@mui/icons-material/Settings'; +import { useEffect, useState } from "react"; +import { useParams, useLocation, useSearchParams } from "react-router-dom"; +import { Helmet } from "react-helmet"; +import ReactGA from "react-ga4"; + +import InfoTooltip from "../../components/Tooltip/InfoTooltip"; +import Modal from "../../components/Modal/Modal"; +import PageTitle from "../../components/PageTitle/PageTitle"; +import Paper from "../../components/Paper/Paper"; +import SwapCard from "../../components/Swap/SwapCard"; +import GhostStyledIcon from "../../components/Icon/GhostIcon"; +import { Tab, Tabs } from "../../components/Tabs/Tabs"; + +import { + UNISWAP_V2_ROUTER, + UNISWAP_V2_FACTORY, + DAI_ADDRESSES, + FTSO_ADDRESSES, +} from "../../constants/addresses"; +import { useTokenSymbol } from "../../hooks/tokens"; + +import PoolContainer from "./PoolContainer"; +import SwapContainer from "./SwapContainer"; +import TokenModal from "./TokenModal"; + +const Dex = ({ chainId, address, connect }) => { + const location = useLocation(); + const pathname = useParams(); + + const theme = useTheme(); + + const isSmallScreen = useMediaQuery("(max-width: 650px)"); + const isVerySmallScreen = useMediaQuery("(max-width: 379px)"); + + const [currentQueryParameters, setSearchParams] = useSearchParams(); + const newQueryParameters = new URLSearchParams(); + + const [isSwap, setIsSwap] = useState(false); + const [settingsOpen, handleSettingsOpen] = useState(false); + const [topTokenListOpen, setTopTokenListOpen] = useState(false); + const [bottomTokenListOpen, setBottomTokenListOpen] = useState(false); + + const [secondsToWait, setSecondsToWait] = useState(localStorage.getItem("dex-deadline") || "60"); + const [slippage, setSlippage] = useState(localStorage.getItem("dex-slippage") || "5"); + const [formatDecimals, setFormatDecimals] = useState(localStorage.getItem("dex-decimals") || "5"); + + const [tokenAddressTop, setTokenAddressTop] = useState(DAI_ADDRESSES[chainId]); + const [tokenAddressBottom, setTokenAddressBottom] = useState(FTSO_ADDRESSES[chainId]); + + const { symbol: tokenNameTop } = useTokenSymbol(chainId, tokenAddressTop); + const { symbol: tokenNameBottom } = useTokenSymbol(chainId, tokenAddressBottom); + + useEffect(() => { + if (currentQueryParameters.has("pool")) { + setIsSwap(false); + newQueryParameters.set("pool", true); + } else { + setIsSwap(true); + newQueryParameters.delete("pool"); + } + + if (currentQueryParameters.has("from")) { + setTokenAddressTop(currentQueryParameters.get("from")); + newQueryParameters.set("from", currentQueryParameters.get("from")); + } else { + setTokenAddressTop(DAI_ADDRESSES[chainId]); + newQueryParameters.set("from", DAI_ADDRESSES[chainId]); + } + + if (currentQueryParameters.has("to")) { + setTokenAddressBottom(currentQueryParameters.get("to")); + newQueryParameters.set("to", currentQueryParameters.get("to")); + } else { + setTokenAddressBottom(FTSO_ADDRESSES[chainId]); + newQueryParameters.set("to", FTSO_ADDRESSES[chainId]); + } + + setSearchParams(newQueryParameters) + }, [currentQueryParameters]) + + useEffect(() => { + ReactGA.send({ hitType: "pageview", page: location.pathname + location.search }); + }, [location]) + + const dexAddresses = { + router: UNISWAP_V2_ROUTER[chainId], + factory: UNISWAP_V2_FACTORY[chainId], + } + + const onCardsSwap = () => { + const tmpFrom = currentQueryParameters.get("from"); + const tmpTo = currentQueryParameters.get("to"); + + if (currentQueryParameters.has("pool")) newQueryParameters.set("pool", true); + else newQueryParameters.delete("pool"); + + newQueryParameters.set("from", tmpTo); + newQueryParameters.set("to", tmpFrom); + + setSearchParams(newQueryParameters); + } + + const changeSwapTab = (swap) => { + if (swap) newQueryParameters.delete("pool"); + else newQueryParameters.set("pool", true); + newQueryParameters.set("from", currentQueryParameters.get("from")); + newQueryParameters.set("to", currentQueryParameters.get("to")); + setSearchParams(newQueryParameters); + } + + const setInnerTokenAddressTop = (tokenAddress) => { + if (currentQueryParameters.has("pool")) newQueryParameters.set("pool", true); + else newQueryParameters.delete("pool"); + + if (currentQueryParameters.get("to") === tokenAddress) { + newQueryParameters.set("from", currentQueryParameters.get("from")); + } else newQueryParameters.set("from", tokenAddress); + newQueryParameters.set("to", currentQueryParameters.get("to")); + setSearchParams(newQueryParameters); + } + + const setInnerTokenAddressBottom = (tokenAddress) => { + if (currentQueryParameters.has("pool")) newQueryParameters.set("pool", true); + else newQueryParameters.delete("pool"); + + newQueryParameters.set("from", currentQueryParameters.get("from")); + if (currentQueryParameters.get("from") === tokenAddress) { + newQueryParameters.set("to", currentQueryParameters.get("to")); + } else newQueryParameters.set("to", tokenAddress); + setSearchParams(newQueryParameters); + } + + const setSlippageInner = (value) => { + const maybeValue = parseFloat(value); + if (!maybeValue || parseFloat(value) <= 100) { + setSlippage(value); + localStorage.setItem("dex-slippage", value); + } + } + + const setSecondsToWaitInner = (value) => { + localStorage.setItem("dex-deadline", value); + setSecondsToWait(value); + } + + const setFormatDecimalsInner = (value) => { + if (Number(value) <= 17) { + localStorage.setItem("dex-decimals", value); + setFormatDecimals(value); + } + } + + return ( + + + ghostSwap | The pure web3 legacy v2 swap + + + + + + + + + + + + + + + + + + + + + handleSettingsOpen(false)} + > + + Slippage + + + setSlippageInner(event.currentTarget.value)} + endAdornment="%" + /> + + + + + Transaction may revert if price changes by more than slippage % + + + + + + Transaction deadline + + + setSecondsToWaitInner(event.currentTarget.value)} + endAdornment="seconds" + /> + + + + + How long transaction is valid in the transaction pool + + + + + + Decimal representation + + + setFormatDecimalsInner(event.currentTarget.value)} + endAdornment="decimals" + /> + + + + + Number of decimals to be shown in token balances + + + + + + + + + + + } + headerContent={ + changeSwapTab(view === 0)} + TabIndicatorProps={{ style: { display: "none" } }} + > + + + + } + > + + {isSwap ? + + : + + } + + + + + + ) +} + +export default Dex; diff --git a/src/containers/Dex/PoolContainer.jsx b/src/containers/Dex/PoolContainer.jsx new file mode 100644 index 0000000..a39db0b --- /dev/null +++ b/src/containers/Dex/PoolContainer.jsx @@ -0,0 +1,305 @@ +import { useState, useEffect, useMemo } from "react"; +import { Box, Typography, useTheme, useMediaQuery } from "@mui/material"; +import toast from "react-hot-toast"; + +import TokenStack from "../../components/TokenStack/TokenStack"; +import SwapCard from "../../components/Swap/SwapCard"; +import SwapCollection from "../../components/Swap/SwapCollection"; +import { TokenAllowanceGuard } from "../../components/TokenAllowanceGuard/TokenAllowanceGuard"; +import { SecondaryButton } from "../../components/Button"; + +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { formatNumber, formatCurrency } from "../../helpers"; + +import { useBalance, useTotalSupply } from "../../hooks/tokens"; +import { useUniswapV2Pair, useUniswapV2PairReserves, addLiquidity } from "../../hooks/uniswapv2"; + +const PoolContainer = ({ + tokenNameTop, + tokenNameBottom, + onCardsSwap, + address, + chainId, + dexAddresses, + connect, + slippage, + secondsToWait, + setTopTokenListOpen, + setBottomTokenListOpen, + formatDecimals + }) => { + const theme = useTheme(); + const isSmallScreen = useMediaQuery("(max-width: 456px)"); + + const [isPending, setIsPending] = useState(false); + const [amountTop, setAmountTop] = useState(""); + const [amountBottom, setAmountBottom] = useState(""); + + const { + balance: balanceTop, + refetch: balanceRefetchTop, + contractAddress: addressTop, + } = useBalance(chainId, tokenNameTop, address); + const { + balance: balanceBottom, + refetch: balanceRefetchBottom, + contractAddress: addressBottom, + } = useBalance(chainId, tokenNameBottom, address); + + const { + pairAddress, + refetch: pairAddressRefetch, + } = useUniswapV2Pair(chainId, dexAddresses.factory, addressTop, addressBottom); + const { + balance: lpBalance, + refetch: lpRefetch, + } = useBalance(chainId, pairAddress, address); + const { + totalSupply: lpTotalSupply, + refetch: lpTotalSupplyRefetch + } = useTotalSupply(chainId, pairAddress); + const { + reserves: pairReserves, + refetch: pairReservesRefetch, + } = useUniswapV2PairReserves( + chainId, + pairAddress, + balanceTop._decimals, + balanceBottom._decimals, + tokenNameTop, + tokenNameBottom, + ); + + const onSwap = () => { + const oldAmountTop = amountTop; + const oldAmountBottom = amountBottom; + setAmountBottom(oldAmountTop); + setAmountTop(oldAmountBottom); + onCardsSwap(); + } + + const setMaxTop = () => setAmountTop(balanceTop.toString()); + const setMaxBottom = () => setAmountBottom(balanceBottom.toString()); + + const bigIntSqrt = (n) => { + if (n < 0n) { + throw new Error("Cannot compute the square root of a negative number."); + } + if (n < 2n) { + return n; // The square root of 0 or 1 is the number itself + } + + let low = 0n; + let high = n; + let mid; + + while (low <= high) { + mid = (low + high) / 2n; + const midSquared = mid * mid; + + if (midSquared === n) { + return mid; // Found the exact square root + } else if (midSquared < n) { + low = mid + 1n; // Move to the right half + } else { + high = mid - 1n; // Move to the left half + } + } + + return high; // The integer part of the square root + } + + const estimatedAmountOut = useMemo(() => { + const zero = new DecimalBigNumber(0n, 0); + const value0 = new DecimalBigNumber(amountTop, balanceTop._decimals) + const value1 = new DecimalBigNumber(amountBottom, balanceBottom._decimals) + const amountToAddA = new DecimalBigNumber(value0._value.toBigInt(), balanceTop._decimals); + const amountToAddB = new DecimalBigNumber(value1._value.toBigInt(), balanceBottom._decimals); + + if ( + pairReserves.reserve0.gt(zero) && + pairReserves.reserve1.gt(zero) && + lpTotalSupply.gt(new DecimalBigNumber(0n, 0)) + ) { + const lpTokensFromA = (amountToAddA.mul(lpTotalSupply).div(pairReserves.reserve0)); + const lpTokensFromB = (amountToAddB.mul(lpTotalSupply).div(pairReserves.reserve1)); + const lpTokensToMint = lpTokensFromA.gt(lpTokensFromB) ? lpTokensFromB : lpTokensFromA; + return lpTokensToMint; + } else { + const tokens = bigIntSqrt(BigInt(amountToAddA.mul(amountToAddB)._value)); + const lpTokensToMint = new DecimalBigNumber(tokens, 18); + return lpTokensToMint; + } + }, [pairReserves, amountTop, amountBottom, balanceTop, balanceBottom]); + + useEffect(() => { + if (pairReserves && pairReserves.reserve1.gt(new DecimalBigNumber(0n, 0))) { + const value = new DecimalBigNumber(amountTop, balanceTop._decimals) + const amountToAdd = new DecimalBigNumber(value._value.toBigInt(), balanceTop._decimals); + const amount = amountToAdd.mul(pairReserves.reserve0).div(pairReserves.reserve1); + setAmountBottom(amount.toString()); + } + }, [amountTop, pairReserves]) + + useEffect(() => { + setAmountTop(""); + setAmountBottom(""); + }, [tokenNameTop, tokenNameBottom]) + + const addLiquidityInner = async () => { + setIsPending(true); + + const deadline = Math.floor(Date.now() / 1000) + secondsToWait; + const destination = address; + + const shares = 100000; + const one = BigInt(shares * 100); + const floatSlippage = slippage === "" ? 0 : parseFloat(slippage); + const bigIntSlippage = one - BigInt(Math.round(floatSlippage * shares)); + + if (floatSlippage < 3) toast("Slippage is too low, transaction highly likely will fail."); + + const amountADesired = BigInt(Math.round(parseFloat(amountTop) * Math.pow(10, balanceTop._decimals))); + const amountBDesired = BigInt(Math.round(parseFloat(amountBottom) * Math.pow(10, balanceBottom._decimals))); + const amountAMin = amountADesired * bigIntSlippage / one; + const amountBMin = amountBDesired * bigIntSlippage / one; + + await addLiquidity( + chainId, + tokenNameTop, + tokenNameBottom, + amountADesired, + amountBDesired, + amountAMin, + amountBMin, + destination, + deadline, + ); + + await balanceRefetchTop(); + await balanceRefetchBottom(); + await pairAddressRefetch(); + await lpRefetch(); + await lpTotalSupplyRefetch(); + await pairReservesRefetch(); + + setAmountTop(""); + setAmountBottom(""); + + setIsPending(false); + } + + const emptyPool = useMemo(() => { + return pairAddress === "" || pairAddress === "0x0000000000000000000000000000000000000000" + }, [pairAddress]) + + return ( + + } + tokenName={tokenNameTop} + info={(!isSmallScreen ? "Balance: " : "") + formatCurrency(balanceTop, formatDecimals, tokenNameTop)} + endString="Max" + endStringOnClick={setMaxTop} + value={amountTop} + onChange={event => setAmountTop(event.currentTarget.value)} + tokenOnClick={() => setTopTokenListOpen(true)} + inputProps={{ "data-testid": "fromInput" }} + /> + } + LowerSwapCard={ + } + tokenName={tokenNameBottom} + value={amountBottom } + onChange={event => emptyPool ? setAmountBottom(event.currentTarget.value) : {}} + endString={emptyPool ? "Max" : undefined} + endStringOnClick={emptyPool ? setMaxBottom : {}} + inputProps={{ "data-testid": "toInput" }} + tokenOnClick={() => setBottomTokenListOpen(true)} + info={(!isSmallScreen ? "Balance: " : "") + formatCurrency(balanceBottom, formatDecimals, tokenNameBottom)} + /> + } + arrowOnClick={onSwap} + /> + {!isSmallScreen && + + Current Balance: + {formatNumber(lpBalance, formatDecimals)} LP + + + Total Supply: + {formatNumber(lpTotalSupply, formatDecimals)} LP + + + Extra Balance: + ~{formatNumber(estimatedAmountOut, formatDecimals)} LP + + } + + + address === "" ? connect() : addLiquidityInner()} + > + {address === "" ? + "Connect" + : + pairAddress === "0x0000000000000000000000000000000000000000" ? + "Create Pool" + : + "Add Liquidity" + } + + + + + ) +} + +export default PoolContainer; diff --git a/src/containers/Dex/SwapContainer.jsx b/src/containers/Dex/SwapContainer.jsx new file mode 100644 index 0000000..1f7b310 --- /dev/null +++ b/src/containers/Dex/SwapContainer.jsx @@ -0,0 +1,243 @@ +import { useState, useEffect } from "react"; +import { Box, Typography, useTheme, useMediaQuery } from "@mui/material"; +import toast from "react-hot-toast"; + +import TokenStack from "../../components/TokenStack/TokenStack"; +import SwapCard from "../../components/Swap/SwapCard"; +import SwapCollection from "../../components/Swap/SwapCollection"; +import { TokenAllowanceGuard } from "../../components/TokenAllowanceGuard/TokenAllowanceGuard"; +import { SecondaryButton } from "../../components/Button"; + +import { formatCurrency } from "../../helpers"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { prettifySecondsInDays } from "../../helpers/timeUtil"; + +import { getTokenAddress } from "../../hooks/helpers"; +import { useBalance } from "../../hooks/tokens"; +import { useUniswapV2Pair, useUniswapV2PairReserves, swapExactTokensForTokens } from "../../hooks/uniswapv2"; + +const SwapContainer = ({ + tokenNameTop, + tokenNameBottom, + address, + chainId, + dexAddresses, + connect, + onCardsSwap, + setTopTokenListOpen, + setBottomTokenListOpen, + slippage, + secondsToWait, + setIsSwap, + formatDecimals +}) => { + const theme = useTheme(); + const isSmallScreen = useMediaQuery("(max-width: 456px)"); + + const [isPending, setIsPending] = useState(false); + const [amountBottom, setAmountBottom] = useState(""); + const [amountTop, setAmountTop] = useState(""); + + const [currentPrice, setCurrentPrice] = useState(new DecimalBigNumber(0n, 0)); + const [nextPrice, setNextPrice] = useState(new DecimalBigNumber(0n, 0)); + + const { + balance: balanceTop, + refetch: balanceRefetchTop, + contractAddress: addressTop, + } = useBalance(chainId, tokenNameTop, address); + const { + balance: balanceBottom, + refetch: balanceRefetchBottom, + contractAddress: addressBottom, + } = useBalance(chainId, tokenNameBottom, address); + + const { + pairAddress, + } = useUniswapV2Pair(chainId, dexAddresses.factory, addressTop, addressBottom); + + const { + reserves: pairReserves, + tokens: tokenAddresses, + refetch: pairReservesRefetch, + } = useUniswapV2PairReserves( + chainId, + pairAddress, + ); + + const onSwap = () => { + setAmountTop(""); + setAmountBottom(""); + onCardsSwap(); + } + const setMax = () => setAmountTop(balanceTop.toString()); + + useEffect(() => { + const zero = new DecimalBigNumber(0n, 0); + const raw = new DecimalBigNumber(amountTop, balanceTop._decimals); + const amountInRaw = new DecimalBigNumber(raw._value.toBigInt(), balanceTop._decimals); + const amountInWithFee = amountInRaw.mul(new DecimalBigNumber(997n, 3)); + + const topAddress = getTokenAddress(chainId, tokenNameTop); + const bottomAddress = getTokenAddress(chainId, tokenNameBottom); + + const amountIn = addressTop.toUpperCase() === tokenAddresses.token0.toUpperCase() ? pairReserves.reserve0 : pairReserves.reserve1; + const amountOut = addressBottom.toUpperCase() === tokenAddresses.token1.toUpperCase() ? pairReserves.reserve1 : pairReserves.reserve0; + + if (amountIn.eq(zero)) { + setCurrentPrice(""); + } else { + setCurrentPrice(amountIn.div(amountOut).toString()); + } + + if (amountIn.eq(zero) || amountInWithFee.eq(zero)) { + setAmountBottom(""); + setNextPrice(""); + } else { + const nominator = amountOut.mul(amountIn); + const denominator = amountIn.add(amountInWithFee); + const newAmountOut = nominator.div(denominator); + + setAmountBottom(amountOut.sub(newAmountOut).toString()); + setNextPrice(denominator.div(newAmountOut).toString()) + } + }, [amountTop, addressTop]); + + const swapTokens = async () => { + setIsPending(true); + + const deadline = Math.floor(Date.now() / 1000) + secondsToWait; + const destination = address; + + const shares = 100000; + const one = BigInt(shares * 100); + const floatSlippage = slippage === "" ? 0 : parseFloat(slippage); + const bigIntSlippage = one - BigInt(Math.round(floatSlippage * shares)); + + if (floatSlippage < 3) toast("Slippage is too low, transaction highly likely will fail."); + + const amountADesired = BigInt(Math.round(parseFloat(amountTop) * Math.pow(10, balanceTop._decimals))); + const amountBDesired = BigInt(Math.round(parseFloat(amountBottom) * Math.pow(10, balanceBottom._decimals))); + const amountBMin = amountBDesired * bigIntSlippage / one; + + await swapExactTokensForTokens( + chainId, + amountADesired, + amountBMin, + [tokenNameTop, tokenNameBottom], + destination, + deadline + ); + + await balanceRefetchTop(); + await balanceRefetchBottom(); + await pairReservesRefetch(); + + setAmountTop(""); + setIsPending(false); + } + + return ( + + } + tokenName={tokenNameTop} + info={ + (!isSmallScreen ? "Balance: " : "") + + formatCurrency(balanceTop ? balanceTop : "0", formatDecimals, tokenNameTop) + } + endString="Max" + endStringOnClick={setMax} + value={amountTop} + onChange={event => setAmountTop(event.currentTarget.value)} + tokenOnClick={() => setTopTokenListOpen(true)} + inputProps={{ "data-testid": "fromInput" }} + /> + } + LowerSwapCard={ + } + tokenName={tokenNameBottom} + value={amountBottom} + inputProps={{ "data-testid": "toInput" }} + tokenOnClick={() => setBottomTokenListOpen(true)} + info={ + (!isSmallScreen ? "Balance: " : "") + + formatCurrency(balanceBottom ? balanceBottom : "0", formatDecimals, tokenNameBottom) + } + /> + } + arrowOnClick={onSwap} + /> + {!isSmallScreen && + + Current price: + {formatCurrency(currentPrice, formatDecimals)} + + + Next price: + {formatCurrency(nextPrice === "" ? currentPrice : nextPrice, formatDecimals)} + + + Transaction deadline: + ~{prettifySecondsInDays(secondsToWait)} + + } + + address === "" ? + connect() + : + pairAddress === "0x0000000000000000000000000000000000000000" ? setIsSwap(false) : swapTokens() + } + > + {address === "" ? + "Connect" + : + pairAddress === "0x0000000000000000000000000000000000000000" ? + "Create Pool" + : + "Swap" + } + + + + ) +} + +export default SwapContainer; diff --git a/src/containers/Dex/TokenModal.jsx b/src/containers/Dex/TokenModal.jsx new file mode 100644 index 0000000..e904adc --- /dev/null +++ b/src/containers/Dex/TokenModal.jsx @@ -0,0 +1,146 @@ +import { useState, useEffect, useMemo } from "react"; +import { + Divider, + Typography, + TableContainer, + Table, + TableHead, + TableBody, + TableRow, + TableCell, + useMediaQuery, +} from "@mui/material"; +import { isAddress, getAddress } from "@ethersproject/address"; + +import Modal from "../../components/Modal/Modal"; +import SwapCard from "../../components/Swap/SwapCard"; +import TokenStack from "../../components/TokenStack/TokenStack"; + +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { formatNumber } from "../../helpers/"; +import { useBalance, useTokenSymbol } from "../../hooks/tokens"; +import { DAI_ADDRESSES, FTSO_ADDRESSES, STNK_ADDRESSES, GHST_ADDRESSES } from "../../constants/addresses"; + +const TokenModal = ({ chainId, account, listOpen, setListOpen, setTokenAddress }) => { + const isSmallScreen = useMediaQuery("(max-width: 599px)"); + const isVerySmallScreen = useMediaQuery("(max-width: 425px)"); + + const [address, setAddress] = useState(""); + const [userInput, setUserInput] = useState(""); + const [isAddressCorrect, setIsAddressCorrect] = useState(false); + + const setUsedAddress = (token) => { + setTokenAddress(token.address); + setListOpen(false); + } + + const { symbol: searchSymbol } = useTokenSymbol(chainId, address); + const { balance: searchBalance } = useBalance(chainId, address, account); + + const { balance: daiBalance } = useBalance(chainId, "GDAI", account); + const { balance: ftsoBalance } = useBalance(chainId, "FTSO", account); + const { balance: stnkBalance } = useBalance(chainId, "STNK", account); + const { balance: ghstBalance } = useBalance(chainId, "GHST", account); + + const searchToken = useMemo(() => { + return [{ + name: searchSymbol, + icons: ["X"], + balance: searchBalance, + address: address + }] + }, [searchSymbol, searchBalance, address]); + + const knownTokens = useMemo(() => { + return [ + { + name: "gDAI", + icons: ["GDAI"], + balance: daiBalance, + address: DAI_ADDRESSES[chainId] + }, + { + name: "FTSO", + icons: ["FTSO"], + balance: ftsoBalance, + address: FTSO_ADDRESSES[chainId] + }, + { + name: "STNK", + icons: ["STNK"], + balance: stnkBalance, + address: STNK_ADDRESSES[chainId] + }, + { + name: "GHST", + icons: ["GHST"], + balance: ghstBalance, + address: GHST_ADDRESSES[chainId] + } + ] + }, [daiBalance, ghstBalance, stnkBalance, ghstBalance]); + + useEffect(() => { + if (isAddress(userInput)) { + setAddress(getAddress(userInput)); + setIsAddressCorrect(true); + } else { + setAddress(""); + setIsAddressCorrect(false); + } + }, [userInput]) + + return ( + setListOpen(false)} + > + setUserInput(event.currentTarget.value)} + /> + + Token Name + + + + + + + + + + + {(isAddressCorrect ? searchToken : knownTokens).map((token, index) => { + return ( + setUsedAddress(token)} hover key={index} id={index + `--token`} data-testid={index + `--token`}> + + + + + + {token.name} + + + + {formatNumber(token.balance, 5)} + + + ) + })} + +
+
+ +
+ ) +} + +export default TokenModal; diff --git a/src/containers/Faucet/Faucet.jsx b/src/containers/Faucet/Faucet.jsx new file mode 100644 index 0000000..79e75b3 --- /dev/null +++ b/src/containers/Faucet/Faucet.jsx @@ -0,0 +1,203 @@ +import { useState, useEffect, useMemo } from "react"; +import { Box, Container, Typography, useMediaQuery } from "@mui/material"; +import { useConfig, useBalance } from "wagmi"; +import { Helmet } from "react-helmet"; +import ReactGA from "react-ga4"; + +import PageTitle from "../../components/PageTitle/PageTitle"; +import Paper from "../../components/Paper/Paper"; +import SwapCard from "../../components/Swap/SwapCard"; +import TokenStack from "../../components/TokenStack/TokenStack"; +import { PrimaryButton } from "../../components/Button"; + +import { DAI_ADDRESSES } from "../../constants/addresses"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { formatCurrency, formatNumber } from "../../helpers"; + +import { useBalance as useTokenBalance, useConversionRate, mintDai } from "../../hooks/tokens"; + +const Faucet = ({ chainId, address, config, connect }) => { + const isSmallScreen = useMediaQuery("(max-width: 650px)"); + const isSemiSmallScreen = useMediaQuery("(max-width: 480px)"); + const isVerySmallScreen = useMediaQuery("(max-width: 379px)"); + + const daiConversionRate = useConversionRate(chainId, "GDAI"); + const { balance: daiBalance, refetch: daiBalanceRefetch } = useTokenBalance(chainId, "GDAI", address); + const { data: nativeBalance, refetch: balanceRefetch } = useBalance({ address }); + + const [isPending, setIsPending] = useState(false); + const [balance, setBalance] = useState(new DecimalBigNumber(0, 0)); + const [amount, setAmount] = useState(""); + const [faucetToken, setFaucetToken] = useState({ + name: "", + address: "", + }); + const [scanInfo, setScanInfo] = useState({ + name: "", + url: "", + }); + + useEffect(() => { + ReactGA.send({ hitType: "pageview", page: "/faucet" }); + }, []) + + useEffect(() => { + const value = nativeBalance ? nativeBalance.value : 0n; + const decimals = nativeBalance ? nativeBalance.decimals : 18; + setBalance(new DecimalBigNumber(value, decimals)); + }, [nativeBalance]); + + useEffect(() => { + let scanName = ""; + let scanUrl = ""; + + const tokenName = "gDAI"; + const tokenAddress = DAI_ADDRESSES[chainId]; + + const client = config?.getClient(); + scanName = client?.chain?.blockExplorers?.default?.name; + scanUrl = client?.chain?.blockExplorers?.default?.url; + + setFaucetToken({ + name: tokenName, + address: tokenAddress, + }); + + setScanInfo({ + name: scanName, + url: scanUrl, + }) + }, [chainId]); + + const preparedAmount = useMemo(() => { + if (address === "") new DecimalBigNumber("0", 0); + return new DecimalBigNumber(amount, 18); + }, [amount, balance]) + + const estimatedAmount = useMemo(() => { + const rate = new DecimalBigNumber(daiConversionRate.toString(), 0); + const value = new DecimalBigNumber(amount, 18); + return value.mul(rate); + }, [amount, daiConversionRate]) + + const mintOrConnect = async () => { + if (address === "") { + connect(); + } else { + setIsPending(true); + await mintDai(chainId, address, preparedAmount._value.toString()); + + await balanceRefetch(); + await daiBalanceRefetch(); + setAmount(""); + setIsPending(false); + } + } + + return ( + + + ghostFaucet | gDAI Faucet + + + + + + + + + + + + + + + + + + + + + + + Get {faucetToken.name} + {!isSemiSmallScreen && + Check on {scanInfo.name} + } + + } + enableBackground + fullWidth + > + + } + info={`${isSemiSmallScreen ? "" : "Balance: "}${formatCurrency(balance.toString(), 4, "ETH")}`} + value={amount} + onChange={event => setAmount(event.currentTarget.value)} + inputProps={{ "data-testid": "fromInput" }} + /> + + + {!isVerySmallScreen && ETH multiplier:} + {formatNumber(daiConversionRate, 2)} + + + {!isVerySmallScreen && You will get:} + {formatCurrency(estimatedAmount, 5, faucetToken.name)} + + + {!isVerySmallScreen && Your {faucetToken.name} balance:} + {formatCurrency(daiBalance, 5, faucetToken.name)} + + + mintOrConnect()} + > + {address === "" ? + "Connect" + : + "Mint" + } + + + + + + + ) +} + +export default Faucet; diff --git a/src/containers/NotFound/NotFound.jsx b/src/containers/NotFound/NotFound.jsx new file mode 100644 index 0000000..cea5b77 --- /dev/null +++ b/src/containers/NotFound/NotFound.jsx @@ -0,0 +1,26 @@ +import { Box, Link, Typography } from "@mui/material"; +import GhostStyledIcon from "../../components/Icon/GhostIcon"; +import GhostIcon from "../../assets/icons/ghost-nav-header.svg?react"; + +export default function NotFound() { + return ( + + + + + Page not found + + ); +} diff --git a/src/containers/Stake/Stake.jsx b/src/containers/Stake/Stake.jsx new file mode 100644 index 0000000..25f95d4 --- /dev/null +++ b/src/containers/Stake/Stake.jsx @@ -0,0 +1,90 @@ +import "./Stake.scss"; + +import { Box, Typography } from "@mui/material"; +import SettingsIcon from '@mui/icons-material/Settings'; +import { memo, useState, useEffect } from "react"; +import { useChainId } from "wagmi"; +import { useSearchParams } from "react-router-dom"; + +import { StakeArea } from "./components/StakeArea"; + +import GhostStyledIcon from "../../components/Icon/GhostIcon"; +import Modal from "../../components/Modal/Modal"; +import Paper from "../../components/Paper/Paper"; +import TokenStack from "../../components/TokenStack/TokenStack"; + +const Stake = ({ chainId, address, isOpened, closeModal, connect }) => { + const [action, setAction] = useState("STAKE"); + const [upperToken, setUpperToken] = useState("FTSO"); + const [bottomToken, setBottomToken] = useState("GHST"); + const [settingsModalOpen, setSettingsModalOpen] = useState(false); + + const setSettingsModalOpenInner = (value) => { + setSettingsModalOpen(value); + } + + useEffect(() => { + switch (true) { + case (upperToken === "FTSO" && bottomToken === "STNK"): + setAction("STAKE") + break; + case (upperToken === "FTSO" && bottomToken === "GHST"): + setAction("STAKE") + break; + case (upperToken === "STNK" && bottomToken === "FTSO"): + setAction("UNSTAKE") + break; + case (upperToken === "GHST" && bottomToken === "FTSO"): + setAction("UNSTAKE") + break; + case (upperToken === "STNK" && bottomToken === "GHST"): + setAction("WRAP") + break; + case (upperToken === "GHST" && bottomToken === "STNK"): + setAction("UNWRAP") + break; + default: + setAction("STAKE") + } + }, [upperToken, bottomToken]) + + return ( + + {action} + + + } + topLeft={ + setSettingsModalOpenInner(true)} + /> + } + open={isOpened} + onClose={closeModal} + maxWidth="460px" + minHeight="200px" + > + + setSettingsModalOpenInner(false)} + upperToken={upperToken} + setUpperToken={setUpperToken} + bottomToken={bottomToken} + setBottomToken={setBottomToken} + action={action} + chainId={chainId} + address={address} + connect={connect} + /> + + + ); +}; + +export default memo(Stake); diff --git a/src/containers/Stake/Stake.scss b/src/containers/Stake/Stake.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/containers/Stake/StakeContainer.jsx b/src/containers/Stake/StakeContainer.jsx new file mode 100644 index 0000000..6388ea5 --- /dev/null +++ b/src/containers/Stake/StakeContainer.jsx @@ -0,0 +1,108 @@ +import { Dispatch, SetStateAction, useState, useEffect } from "react"; +import { Box, Container, Grid, Divider, Typography, Link, useMediaQuery, useTheme } from "@mui/material"; +import ReactGA from "react-ga4"; + +import Paper from "../../components/Paper/Paper"; +import PageTitle from "../../components/PageTitle/PageTitle"; +import InfoTooltip from "../../components/Tooltip/InfoTooltip"; +import Countdown from "../../components/Countdown/Countdown"; +import { PrimaryButton } from "../../components/Button"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; + +import Stake from "./Stake"; +import FarmPools from "./components/FarmPools"; +import StakeInfoText from "./components/StakeInfoText"; +import { ClaimsArea } from "./components/ClaimsArea"; +import { Apy, CurrentIndex, TotalDeposit } from "./components/Metric"; + +import { useEpoch } from "../../hooks/staking"; + +export const StakeContainer = ({ chainId, address, connect }) => { + const [isModalOpened, handleModal] = useState(false); + + const isSemiSmallScreen = useMediaQuery("(max-width: 745px)"); + const isSmallScreen = useMediaQuery("(max-width: 650px)"); + const isVerySmallScreen = useMediaQuery("(max-width: 379px)"); + + const { epoch, refetch: refetchEpoch } = useEpoch(chainId); + + useEffect(() => { + ReactGA.send({ hitType: "pageview", page: "/stake" }); + }, []) + + if (isModalOpened) { + return ( + handleModal(false)} + /> + ) + } + + return ( + + + + + + + Rebase  + + + + + } + > + + + + + + + + + + + + + + + + + + handleModal(true)} + sx={{ maxWidth: isSemiSmallScreen ? "100%" : "350px" }} + > + Start staking + + + + + + + + + + + ) +}; + +export default StakeContainer; diff --git a/src/containers/Stake/components/ClaimConfirmationModal.jsx b/src/containers/Stake/components/ClaimConfirmationModal.jsx new file mode 100644 index 0000000..d8d7dac --- /dev/null +++ b/src/containers/Stake/components/ClaimConfirmationModal.jsx @@ -0,0 +1,80 @@ +import { useState } from "react"; +import { Box, Typography } from "@mui/material"; + +import Modal from "../../../components/Modal/Modal"; +import Metric from "../../../components/Metric/Metric"; +import GhostStyledIcon from "../../../components/Icon/GhostIcon"; +import { PrimaryButton, SecondaryButton } from "../../../components/Button"; + +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; +import { formatNumber, capitalize, shorten } from "../../../helpers"; + +import { forfeit, claim } from "../../../hooks/staking"; + +const ClaimConfirmationModal = (props) => { + const [isPending, setIsPending] = useState(false); + + const confirm = async () => { + setIsPending(true); + + switch (props.action.toUpperCase()) { + case "FORFEIT": + await forfeit(props.chainId, props.receiver); + break; + case "CLAIM": + await claim(props.chainId, props.receiver, props.outputToken === "STNK"); + break; + default: + console.log("Unknown action") + } + + setIsPending(false); + props.onClose(); + } + + return ( + } + headerContent={ + + {`Confirm ${capitalize(props.action)}`} + + } + open={props.open} + onClose={() => isPending ? {} : props.onClose()} + minHeight={"100px"} + > + + + + + + + {props.outputToken} + + + + + + + confirm()} + > + Confirm + + + + + ) +} + +export default ClaimConfirmationModal; diff --git a/src/containers/Stake/components/ClaimsArea.jsx b/src/containers/Stake/components/ClaimsArea.jsx new file mode 100644 index 0000000..b7630a0 --- /dev/null +++ b/src/containers/Stake/components/ClaimsArea.jsx @@ -0,0 +1,242 @@ +import { + Box, + Table, + TableBody, + TableCell, + TableHead, + TableRow, + Typography, + Skeleton, +} from "@mui/material"; +import { styled } from "@mui/material/styles"; +import { useState, useMemo } from "react"; + +import useMediaQuery from "@mui/material/useMediaQuery"; + +import { formatBalance } from "./StakeBalances"; +import { useAccount, useChainId } from "wagmi"; + +import DataRow from "../../../components/DataRow/DataRow"; +import InfoTooltip from "../../../components/Tooltip/InfoTooltip"; +import Paper from "../../../components/Paper/Paper"; +import Token from "../../../components/Token/Token"; +import { PrimaryButton, SecondaryButton } from "../../../components/Button"; +import { Tab, Tabs } from "../../../components/Tabs/Tabs"; + +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; +import { prettifySecondsInDays } from "../../../helpers/timeUtil"; +import { formatNumber } from "../../../helpers"; +import { STAKING_ADDRESSES } from "../../../constants/addresses"; +import { useCurrentIndex, useWarmupInfo } from "../../../hooks/staking"; +import { useBalanceForShares } from "../../../hooks/tokens"; + +import ClaimConfirmationModal from "./ClaimConfirmationModal"; + +const PREFIX = "ExternalStakePools"; + +const classes = { + stakePoolsWrapper: `${PREFIX}-stakePoolsWrapper`, + stakePoolHeaderText: `${PREFIX}-stakePoolHeaderText`, + poolPair: `${PREFIX}-poolPair`, + poolName: `${PREFIX}-poolName`, +}; + +const StyledTableHeader = styled(TableHead)(({ theme }) => ({ + [`&.${classes.stakePoolHeaderText}`]: { + color: theme.palette.text.secondary, + lineHeight: 1.4, + }, +})); + +export const ClaimsArea = ({ chainId, address, epoch }) => { + const isSmallScreen = useMediaQuery("(max-width: 745px)"); + + const [confirmationModalOpen, setConfirmationModalOpen] = useState(false); + const [isPayoutGhst, setIsPayoutGhst] = useState(localStorage.getItem("stake-isGhstPayout") + ? localStorage.getItem("stake-isGhstPayout") + : false + ); + + const { warmupInfo: claim, refetch: claimRefetch } = useWarmupInfo(chainId, address); + const { currentIndex, refetch: currentIndexRefetch } = useCurrentIndex(chainId); + const { balanceForShares } = useBalanceForShares(chainId, "STNK", claim.shares); + + const closeConfirmationModal = () => { + setConfirmationModalOpen(false); + claimRefetch(); + currentIndexRefetch(); + } + + if (claim.shares === 0n) return <>; + + const setIsPayoutGhstInner = (value) => { + setIsPayoutGhst(value); + localStorage.setitem("bond-isGhstPayout", value); + } + + const warmupTooltip = `Your claim earns rebases during warmup. You can emergency withdraw, but this forfeits the rebases`; + + return ( + <> + closeConfirmationModal()} + chainid={chainId} + receiver={address} + receiveAmount={claim.expiry > epoch.number ? claim.deposit : isPayoutGhst ? balanceForShares.div(currentIndex) : balanceForShares} + outputToken={claim.expiry > epoch.number ? "FTSO" : isPayoutGhst ? "GHST" : "STNK"} + action={claim.expiry > epoch.number ? "forfeit" : "claim"} + chainId={chainId} + /> + + Your active {isPayoutGhst ? "GHST" : "STNK"} claim + setIsPayoutGhstInner(view === 1)} + TabIndicatorProps={{ style: { display: "none" } }} + > + + + + + } + tooltip={warmupTooltip} + style={{ margin: "0", padding: "20px 0" }} + > + {isSmallScreen ? ( + epoch.number} + /> + ) : ( + + + + Asset + Amount + Claimable In + + + + epoch.number} + /> +
+ + )} +
+ + ); +}; + +const ClaimInfo = ({ setConfirmationModalOpen, prepareBalance, claim, epoch, isClaimable, isPayoutGhst }) => { + return ( + + + + + + + {isPayoutGhst ? "GHST" : "STNK"} + + + + + + {`${formatNumber(prepareBalance, 5)} ${isPayoutGhst ? "GHST" : "STNK"}`} + + + + {prettifySecondsInDays(epoch.length * (claim.expiry - epoch.number))} + + + + + + + ); +}; + +const MobileClaimInfo = ({ setConfirmationModalOpen, prepareBalance, epoch, claim, isPayoutGhst, isClaimable }) => { + return ( + + + + + {isPayoutGhst ? "GHST" : "STNK"} + + + + + + + + + + ); +}; + +const ActionButtons = ({ setConfirmationModalOpen, isSmallScreen = false, isClaimable = false }) => { + return ( + + setConfirmationModalOpen(true)} + disabled={!isClaimable} + > + Emergency Withdrawal + + setConfirmationModalOpen(true)} + disabled={isClaimable} + > + Claim + + + ); +}; diff --git a/src/containers/Stake/components/FarmPools.jsx b/src/containers/Stake/components/FarmPools.jsx new file mode 100644 index 0000000..70d7876 --- /dev/null +++ b/src/containers/Stake/components/FarmPools.jsx @@ -0,0 +1,143 @@ +import { + TableContainer, + TableHead, + TableBody, + TableRow, + TableCell, + Table, + Typography, + Box, + useMediaQuery, +} from "@mui/material"; +import { useNavigate, createSearchParams } from "react-router-dom"; + +import Paper from "../../../components/Paper/Paper"; +import { SecondaryButton } from "../../../components/Button"; +import TokenStack from "../../../components/TokenStack/TokenStack"; +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; +import { formatCurrency } from "../../../helpers"; + +import { useLpValuation } from "../../../hooks/treasury"; +import { useTotalSupply } from "../../../hooks/tokens"; + +import { + DAI_ADDRESSES, + FTSO_ADDRESSES, + STNK_ADDRESSES, + GHST_ADDRESSES, + FTSO_DAI_LP_ADDRESSES, +} from "../../../constants/addresses"; + +const FarmPools = ({ chainId }) => { + const isSmallScreen = useMediaQuery("(max-width: 775px)"); + + const { totalSupply: daiFtsoUniTotalSupply } = useTotalSupply(chainId, FTSO_DAI_LP_ADDRESSES[chainId]); + const daiFtsoUniValuation = useLpValuation(chainId, FTSO_DAI_LP_ADDRESSES[chainId], daiFtsoUniTotalSupply._value); + + const pools = [ + { + icons: ["FTSO", "GDAI"], + name: "FTSO-gDAI", + dex: "Uniswap V2", + url: "/dex/uniswap", + tvl: daiFtsoUniValuation, + params: createSearchParams({ + pool: "true", + from: `${DAI_ADDRESSES[chainId]}`, + to: `${FTSO_ADDRESSES[chainId]}`, + }) + }, + ]; + + if (isSmallScreen) { + return ( + <> + {pools.map((pool, id) => { + return ( + + ) + })} + + ) + } + + return ( + + + + + + Asset + TVL + + + + + + {pools.map((pool, id) => { + return ( + + ) + })} + +
+
+
+ ) +} + +const FarmPoolCard = ({ id, pool }) => { + return ( + + + + + + {pool.name} + + + {formatCurrency(pool.tvl, 2)} + + + Get on {pool.dex} + + + + + + ) +} + +const FarmPoolRow = ({ id, pool }) => { + const navigate = useNavigate(); + return ( + + + + + {pool.name} + + + + + {formatCurrency(pool.tvl, 2)} + + + + navigate({ pathname: pool.url, search: pool.params.toString() })} + > + Get on {pool.dex} + + + + ) +} + +export default FarmPools; diff --git a/src/containers/Stake/components/Metric.jsx b/src/containers/Stake/components/Metric.jsx new file mode 100644 index 0000000..6bb2d12 --- /dev/null +++ b/src/containers/Stake/components/Metric.jsx @@ -0,0 +1,62 @@ +import Metric from "../../../components/Metric/Metric"; +import { formatCurrency, formatNumber } from "../../../helpers"; + +import { useCurrentIndex } from "../../../hooks/staking"; +import { useCirculatingSupply } from "../../../hooks/tokens"; +import { useFtsoPrice } from "../../../hooks/prices"; + +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; + +export const CurrentIndex = props => { + const { currentIndex } = useCurrentIndex(props.chainId); + + const _props = { + ...props, + label: `Current Index`, + tooltip: `The current index indicates the amount of FTSO a holder would possess if they had staked and maintained 1 FTSO since its launch.`, + }; + + if (currentIndex) _props.metric = `${formatNumber(currentIndex, 2)} FTSO`; + else _props.isLoading = true; + + return ; +}; + +export const Apy = props => { + const circulatingSupply = useCirculatingSupply(props.chainId, "STNK"); + + let apy = Infinity; + if (circulatingSupply._value > 0n) { + const value = props.distribute.div(circulatingSupply); + apy = Math.pow(1 + parseFloat(value.toString()), 1095) - 1; + if (apy === 0) apy = Infinity; + } + + const _props = { + ...props, + label: "APY", + tooltip: "The annualized rate of return, accounting for compounding from STNK’s exponential rebasing.", + }; + + if (apy) _props.metric = `${formatNumber(apy, 2)}${apy === Infinity ? "" : "%"}`; + else _props.isLoading = true; + + return ; +}; + +export const TotalDeposit = props => { + const circulatingSupply = useCirculatingSupply(props.chainId, "STNK"); + const ftsoPrice = useFtsoPrice(props.chainId); + const deposit = circulatingSupply.mul(ftsoPrice); + + const _props = { + ...props, + label: "Total Deposit", + tooltip: "The total stablecoin reserves in the ghostDAO treasury backing the entire circulating supply of STNK.", + }; + + if (deposit) _props.metric = `${formatCurrency(deposit, 2)}`; + else _props.isLoading = true; + + return ; +}; diff --git a/src/containers/Stake/components/StakeArea.jsx b/src/containers/Stake/components/StakeArea.jsx new file mode 100644 index 0000000..5e0bfc5 --- /dev/null +++ b/src/containers/Stake/components/StakeArea.jsx @@ -0,0 +1,35 @@ +import { Box } from "@mui/material"; +import { useState } from "react"; +import { useAccount } from "wagmi"; + +import { StakeInputArea } from "./StakeInputArea"; + +export const StakeArea = ({ + upperToken, + setUpperToken, + bottomToken, + setBottomToken, + action, + chainId, + address, + connect, + settingsModalOpen, + closeSettingModal +}) => { + return ( + + + + ); +}; diff --git a/src/containers/Stake/components/StakeBalances.jsx b/src/containers/Stake/components/StakeBalances.jsx new file mode 100644 index 0000000..e9b8866 --- /dev/null +++ b/src/containers/Stake/components/StakeBalances.jsx @@ -0,0 +1,6 @@ +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; + +const DECIMAL_PLACES_SHOWN = 4; + +export const formatBalance = (balance) => + balance?.toString({ decimals: DECIMAL_PLACES_SHOWN, trim: false, format: true }); diff --git a/src/containers/Stake/components/StakeConfirmationModal.jsx b/src/containers/Stake/components/StakeConfirmationModal.jsx new file mode 100644 index 0000000..e62da71 --- /dev/null +++ b/src/containers/Stake/components/StakeConfirmationModal.jsx @@ -0,0 +1,171 @@ +import { CheckBoxOutlineBlank, CheckBoxOutlined } from "@mui/icons-material"; +import { Box, Checkbox, FormControlLabel, Typography } from "@mui/material"; +import { useEffect, useState } from "react"; +import ArrowRightIcon from '@mui/icons-material/ArrowRight'; + +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; + +import GhostStyledIcon from "../../../components/Icon/GhostIcon"; +import Modal from "../../../components/Modal/Modal"; +import { PrimaryButton, SecondaryButton } from "../../../components/Button"; +import Metric from "../../../components/Metric/Metric"; +import { TokenAllowanceGuard } from "../../../components/TokenAllowanceGuard/TokenAllowanceGuard"; + +import { useWarmupLength, stake, unstake, wrap, unwrap } from "../../../hooks/staking"; +import { formatNumber } from "../../../helpers"; + +import { STAKING_ADDRESSES } from "../../../constants/addresses"; + +const StakeConfirmationModal = (props) => { + const { warmupLength, warmupExists: needsWarmup } = useWarmupLength(props.chainId); + const [acknowledgedWarmup, setAcknowledgedWarmup] = useState(false); + const [isPending, setIsPending] = useState(false); + + useEffect(() => setAcknowledgedWarmup(acknowledgedWarmup || !needsWarmup), [acknowledgedWarmup, needsWarmup]) + + const AcknowledgeWarmupCheckbox = () => { + if (!needsWarmup) return <>; + return ( + <> + +
+ setAcknowledgedWarmup(event.target.checked)} + icon={} + checkedIcon={} + /> + } + label={`I understand the FTSO (eGHST) I’m staking will only be available to claim ${warmupLength.toString()} epochs after my transaction is confirmed`} + /> +
+ + ); + }; + + const NeedsWarmupDetails = () => { + if (needsWarmup && props.action === "STAKE") { + return ( + <> + + + Why is there a warmup? + + + ); + } else { + return <>; + } + }; + + const doAction = async () => { + setIsPending(true); + + const actionAmount = new DecimalBigNumber(props.amount, props.spendDecimals); + const isRebase = props.upperToken === "STNK"; + switch (props.action) { + case "STAKE": + await stake(props.chainId, props.address, actionAmount._value.toBigInt(), isRebase, props.isClaim); + break; + case "UNSTAKE": + await unstake(props.chainId, props.address, actionAmount._value.toBigInt(), props.isTrigger, isRebase); + break; + case "WRAP": + await wrap(props.chainId, props.address, actionAmount._value.toBigInt()); + break; + case "UNWRAP": + await unwrap(props.chainId, props.address, actionAmount._value.toBigInt()); + break; + default: + console.log("Wrong action to be executed!"); + } + + setIsPending(false); + props.onClose(); + } + + return ( + } + headerContent={ + + {`Confirm ${props.action}`} + + } + open={props.open} + onClose={() => isPending ? {} : props.onClose()} + minHeight={"100px"} + > + + + + + + + {props.upperToken} + + + + + + + + + {props.bottomToken} + + + + + + + {acknowledgedWarmup || props.action !== "STAKE" ? + + doAction()} + > + Confirm + + + : + + } + + + + ); +}; + +export default StakeConfirmationModal; diff --git a/src/containers/Stake/components/StakeInfoText.jsx b/src/containers/Stake/components/StakeInfoText.jsx new file mode 100644 index 0000000..a8f7271 --- /dev/null +++ b/src/containers/Stake/components/StakeInfoText.jsx @@ -0,0 +1,23 @@ +import { Link, Typography, useTheme } from "@mui/material"; + +const StakeInfoText = () => { + const theme = useTheme(); + return ( + + Staking drives value accrual, rewarding stakers with rebase yields that fluctuate based on ghostDAO monetary policy and are backed by bond proceeds. +  Learn more here. + + ) +}; + +export default StakeInfoText; diff --git a/src/containers/Stake/components/StakeInputArea.jsx b/src/containers/Stake/components/StakeInputArea.jsx new file mode 100644 index 0000000..5243f2a --- /dev/null +++ b/src/containers/Stake/components/StakeInputArea.jsx @@ -0,0 +1,298 @@ +import { Avatar, Box, Link } from "@mui/material"; +import { styled } from "@mui/material/styles"; + +import React, { useEffect, useState } from "react"; +import { useSearchParams } from "react-router-dom"; + +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; +import { useChainId } from "wagmi"; + +import TokenModal from "./TokenModal"; +import StakeConfirmationModal from "./StakeConfirmationModal"; +import StakeSettingsModal from "./StakeSettingsModal"; + +import SwapCard from "../../../components/Swap/SwapCard"; +import SwapCollection from "../../../components/Swap/SwapCollection"; +import { InfoNotification } from "../../../components/Notification"; +import { PrimaryButton } from "../../../components/Button"; + +import { + GHST_ADDRESSES, + FTSO_ADDRESSES, + STNK_ADDRESSES, + STAKING_ADDRESSES, +} from "../../../constants/addresses"; +import { useCurrentIndex } from "../../../hooks/staking"; +import { useBalance } from "../../../hooks/tokens"; +import { formatNumber } from "../../../helpers"; + +const PREFIX = "StakeInputArea"; + +const classes = { + inputRow: `${PREFIX}-inputRow`, + gridItem: `${PREFIX}-gridItem`, + input: `${PREFIX}-input`, + button: `${PREFIX}-button`, +}; + +const StyledBox = styled(Box)(({ theme }) => ({ + [`& .${classes.inputRow}`]: { + justifyContent: "space-around", + alignItems: "center", + height: "auto", + marginTop: "4px", + }, + + [`& .${classes.gridItem}`]: { + width: "100%", + paddingRight: "5px", + alignItems: "center", + justifyContent: "center", + }, + + [`& .${classes.input}`]: { + [theme.breakpoints.down("md")]: { + marginBottom: "10px", + }, + [theme.breakpoints.up("sm")]: { + marginBottom: "0", + }, + }, + + [`& .${classes.button}`]: { + width: "100%", + minWidth: "163px", + maxWidth: "542px", + }, +})); + +export const StakeInputArea = ({ + upperToken, + setUpperToken, + bottomToken, + setBottomToken, + action, + chainId, + address, + connect, + settingsModalOpen, + closeSettingModal +}) => { + const [upperTokenModalOpen, setUpperTokenModalOpen] = useState(false); + const [bottomTokenModalOpen, setBottomTokenModalOpen] = useState(false); + const [confirmationModalOpen, setConfirmationModalOpen] = useState(false); + + const [formatDecimals, setFormatDecimals] = useState(localStorage.getItem("stake-decimals") + ? localStorage.getItem("stake-decimals") + : "5" + ); + + const [isClaim, setIsClaim] = useState(localStorage.getItem("stake-isClaim") + ? localStorage.getItem("stake-isClaim") === 'true' + : true + ); + + const [isTrigger, setIsTrigger] = useState(localStorage.getItem("stake-isTrigger") + ? localStorage.getItem("stake-isTrigger") === 'true' + : true + ); + + const [amount, setAmount] = useState(""); + const [receiveAmount, setReceiveAmount] = useState(""); + const [exceedsAmount, setExceedsAmount] = useState(false) + + const { currentIndex, refetch: refetchCurrentIndex } = useCurrentIndex(chainId); + const { balance: ftsoBalance, refetch: ftsoRefetch } = useBalance(chainId, "FTSO", address); + const { balance: stnkBalance, refetch: stnkRefetch } = useBalance(chainId, "STNK", address); + const { balance: ghstBalance, refetch: ghstRefetch } = useBalance(chainId, "GHST", address); + + const setIsClaimInner = (value) => { + setIsClaim(value); + localStorage.setItem("stake-isClaim", value); + + } + + const setIsTriggerInner = (value) => { + setIsTrigger(value); + localStorage.setItem("stake-isTrigger", value); + } + + const setFormatDecimalsInner = (value) => { + if (Number(value) <= 17) { + setFormatDecimals(value); + localStorage.setItem("staking-decimals", value); + } + } + + useEffect(() => { + const innerBalance = upperToken === "GHST" ? + ghstBalance + : + upperToken === "STNK" ? + stnkBalance + : + ftsoBalance; + + if ( + (upperToken === "FTSO" && bottomToken === "STNK") || + (upperToken === "STNK" && bottomToken === "FTSO") + ) { + setReceiveAmount(amount); + setExceedsAmount(new DecimalBigNumber(amount, 9).gt(innerBalance)) + } else { + const decimals = upperToken === "GHST" ? 18 : 9; + const raw = new DecimalBigNumber(amount, decimals); + const amountIn = new DecimalBigNumber(raw._value.toBigInt(), decimals); + const result = upperToken === "GHST" ? + currentIndex.mul(amountIn).toString() + : + currentIndex._value > 0n ? amountIn.div(currentIndex).toString() : "0"; + + const innerBalance = upperToken === "GHST" ? + ghstBalance + : + upperToken === "STNK" ? + stnkBalance + : + ftsoBalance; + + setReceiveAmount(result); + setExceedsAmount(amountIn.gt(innerBalance)); + } + }, [upperToken, bottomToken, amount, currentIndex]); + + const handleTokenModalInput = (value, isUpper) => { + if (isUpper) { + if (value === bottomToken) { + const newValue = value === "GHST" ? "STNK" : "GHST"; + setBottomToken(newValue) + } + setUpperToken(value); + } else { + setBottomToken(value); + } + } + + const onSwapClick = () => { + const tmpUpper = upperToken; + const tmpBottom = bottomToken; + setUpperToken(tmpBottom); + setBottomToken(tmpUpper); + } + + const SwapCardTemplate = (tokenName, tokenAmount, isUpper, handleModal) => { + const balance = tokenName === "STNK" ? + stnkBalance : tokenName === "FTSO" ? + ftsoBalance : ghstBalance; + + return ( + handleModal(true)} + inputProps={{ "data-testid": `${tokenName.toLowerCase()}-input`, min: "0" }} + value={tokenAmount} + onChange={event => setAmount(event.target.value)} + info={`Balance: ${formatNumber(balance, formatDecimals)} ${tokenName}`} + endString={isUpper ? "Max" : ""} + endStringOnClick={() => isUpper && setAmount(balance.toString())} + disabled={!isUpper} + inputWidth={`${tokenAmount.length > 0 ? tokenAmount.length : 1}ch`} + /> + ) + } + + const closeAndUpdate = () => { + setAmount(""); + setConfirmationModalOpen(false); + refetchCurrentIndex(); + ftsoRefetch(); + stnkRefetch(); + ghstRefetch(); + } + + return ( + <> + + + + + + + + {upperTokenModalOpen && ( + handleTokenModalInput(data.name, data.isUpper)} + handleClose={() => setUpperTokenModalOpen(false)} + ftsoBalance={formatNumber(ftsoBalance, formatDecimals)} + stnkBalance={formatNumber(stnkBalance, formatDecimals)} + ghstBalance={formatNumber(ghstBalance, formatDecimals)} + isUpper={true} + /> + )} + {bottomTokenModalOpen && ( + handleTokenModalInput(data.name, data.isUpper)} + handleClose={() => setBottomTokenModalOpen(false)} + ftsoBalance={formatNumber(ftsoBalance, formatDecimals)} + stnkBalance={formatNumber(stnkBalance, formatDecimals)} + ghstBalance={formatNumber(ghstBalance, formatDecimals)} + tokenToExclude={upperToken} + isUpper={false} + /> + )} + + + setConfirmationModalOpen(true)} + loading={false} + disabled={exceedsAmount} + > + {exceedsAmount ? + "Exceeds amount" + : + action[0] + String(action.toLowerCase()).slice(1) + } + + + + + + setFormatDecimalsInner(event.currentTarget.value)} + isClaim={isClaim} + onIsClaimChanged={setIsClaimInner} + isTrigger={isTrigger} + onTriggerRebaseChange={setIsTriggerInner} + /> + closeAndUpdate()} + chainId={chainId} + address={address} + action={action} + upperToken={upperToken} + bottomToken={bottomToken} + amount={amount} + receiveAmount={receiveAmount} + amountExceedsBalance={exceedsAmount} + connect={connect} + spendDecimals={upperToken === "GHST" ? 18 : 9} + receiveDecimals={bottomToken === "GHST" ? 18 : 9} + isClaim={isClaim} + isTrigger={isTrigger} + /> + + ); +}; diff --git a/src/containers/Stake/components/StakeSettingsModal.jsx b/src/containers/Stake/components/StakeSettingsModal.jsx new file mode 100644 index 0000000..1b94304 --- /dev/null +++ b/src/containers/Stake/components/StakeSettingsModal.jsx @@ -0,0 +1,82 @@ +import { + Box, + FormControlLabel, + FormControl, + InputAdornment, + InputLabel, + OutlinedInput, + Checkbox, + Typography +} from "@mui/material"; +import { CheckBoxOutlineBlank, CheckBoxOutlined } from "@mui/icons-material"; + +import Modal from "../../../components/Modal/Modal"; + +const StakeSettingsModal = props => { + return ( + + + + props.onIsClaimChanged(event.target.checked)} + icon={} + checkedIcon={} + /> + } + label={Always try to claim during stake, works only if warmup period is zero} + /> + + + + + props.onTriggerRebaseChange(event.target.checked)} + icon={} + checkedIcon={} + /> + } + label={Try to trigger rebase on each unstake, can influence on received amount} + /> + + + + Decimals + + + + + + + + Number of decimals to be shown in token balances + + + + + ); +}; + +export default StakeSettingsModal; diff --git a/src/containers/Stake/components/TokenModal.jsx b/src/containers/Stake/components/TokenModal.jsx new file mode 100644 index 0000000..0beeae9 --- /dev/null +++ b/src/containers/Stake/components/TokenModal.jsx @@ -0,0 +1,78 @@ +import { Avatar, Box, Dialog, Link, List, ListItem, ListItemText, Typography } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; +import CloseIcon from '@mui/icons-material/Close'; +import GhostStyledIcon from "../../../components/Icon/GhostIcon"; +import Token from "../../../components/Token/Token"; + +const TokenModal = ({ + open, + handleSelect, + handleClose, + ftsoBalance = "0.00", + stnkBalance = "0.00", + ghstBalance = "0.00", + tokenToExclude, + isUpper, +}) => { + const theme = useTheme(); + + const TokenItem = ({ name, exclude, isUpper, balance = "0", icon, address = "", price, decimals, ...props }) => { + if (name === exclude) { + return <>; + } + + return ( + { + handleSelect({name, isUpper}); + handleClose(); + }} + sx={{ borderBottom: `1px solid ${theme.colors.gray[500]}` }} + {...props} + > + {icon ? ( + + ) : ( + + )} + + + + + + ); + }; + + return ( + + + + + {`Select a token`} + + + + + + + {} + {} + {} + + + + ); +}; + +export default TokenModal; diff --git a/src/containers/TreasuryDashboard/TreasuryDashboard.jsx b/src/containers/TreasuryDashboard/TreasuryDashboard.jsx new file mode 100644 index 0000000..e0ab880 --- /dev/null +++ b/src/containers/TreasuryDashboard/TreasuryDashboard.jsx @@ -0,0 +1,92 @@ +import { Box, Container, Grid, useMediaQuery, useTheme } from "@mui/material"; +import { memo, useEffect, useMemo, useState } from "react"; +import { Outlet, Route, Routes, useSearchParams } from "react-router-dom"; +import ReactGA from "react-ga4"; + +import { + TreasuryMarketCap, + FatsoBacking, + FatsoPrice, + GhostPrice, + CirculatingSupply, + CurrentIndex, +} from "./components/Metric"; +import TokenInfo from "./components/TokenInfo"; + +import Paper from "../../components/Paper/Paper"; +import PageTitle from "../../components/PageTitle/PageTitle"; +import SafariFooter from "../../components/SafariFooter/SafariFooter"; + +const MetricsDashboard = ({ chainId }) => { + const theme = useTheme(); + const isMobileScreen = useMediaQuery("(max-width: 885px)"); + const isVeryMobileScreen = useMediaQuery("(max-width: 560px)"); + + const xsCalculator = useMemo(() => { + return isMobileScreen ? isVeryMobileScreen ? 12 : 6 : 4; + }, [isMobileScreen, isVeryMobileScreen]) + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +const TreasuryDashboard = ({ chainId }) => { + const isSmallScreen = useMediaQuery("(max-width: 650px)"); + const isVerySmallScreen = useMediaQuery("(max-width: 379px)"); + + useEffect(() => { + ReactGA.send({ hitType: "pageview", page: "/dashboard" }); + }, []); + + return ( + <> + + + + + + + + ); +}; + + +export default memo(TreasuryDashboard); diff --git a/src/containers/TreasuryDashboard/components/Metric.jsx b/src/containers/TreasuryDashboard/components/Metric.jsx new file mode 100644 index 0000000..1d13d3f --- /dev/null +++ b/src/containers/TreasuryDashboard/components/Metric.jsx @@ -0,0 +1,111 @@ +import Metric from "../../../components/Metric/Metric"; +import { formatCurrency, formatNumber } from "../../../helpers"; + +import { useReadContract } from "wagmi"; +import { DecimalBigNumber }from "../../../helpers/DecimalBigNumber"; + +import { useCurrentIndex } from "../../../hooks/staking"; +import { useTotalReserves } from "../../../hooks/treasury"; +import { useFtsoPrice } from "../../../hooks/prices"; +import { useTotalSupply, useCirculatingSupply } from "../../../hooks/tokens"; + +export const CurrentIndex = props => { + const { currentIndex } = useCurrentIndex(props.chainId); + + const _props = { + ...props, + label: `Current Index`, + tooltip: `The current index indicates the amount of FTSO a holder would possess if they had staked and maintained 1 FTSO since its launch.`, + }; + + if (currentIndex) _props.metric = `${formatNumber(currentIndex, 2)} FTSO`; + else _props.isLoading = true; + + return ; +}; + +export const GhostPrice = props => { + const ftsoPrice = useFtsoPrice(props.chainId); + const { currentIndex } = useCurrentIndex(props.chainId); + const ghstPrice = ftsoPrice * currentIndex; + + const _props = { + ...props, + label: "GHST " + `Price`, + tooltip: "1 GHST = 1 FTSO x Current Index", + }; + + if (ghstPrice) _props.metric = formatCurrency(ghstPrice, 2); + else _props.isLoading = true; + + return ; +}; + +export const FatsoPrice = props => { + const ftsoPrice = useFtsoPrice(props.chainId); + + const _props = { + ...props, + label: "FTSO " + `Price`, + tooltip: `Weighted FTSO Price Across V2 DEXs on the chosen EVM Chain`, + }; + + if (ftsoPrice) _props.metric = formatCurrency(ftsoPrice, 2); + else _props.isLoading = true; + + return ; +}; + +export const CirculatingSupply = props => { + const { totalSupply } = useTotalSupply(props.chainId, "FTSO"); + const circulatingSupply = useCirculatingSupply(props.chainId, "STNK"); + + const _props = { + ...props, + label: `Circulating / Total`, + tooltip: `Circulating supply refers to the amount of STNK in circulation, excluding those held by the protocol in its treasury. However, STNK allocated to Protocol-Owned Liquidity is considered part of the circulating supply.`, + }; + + if (circulatingSupply && totalSupply) _props.metric = `${formatNumber(circulatingSupply, 0)}/${formatNumber(totalSupply, 0)}`; + else _props.isLoading = true; + + return ; +}; + +export const FatsoBacking = props => { + const { totalSupply } = useTotalSupply(props.chainId, "FTSO"); + const totalReserves = useTotalReserves(props.chainId); + + const backing = totalSupply.eq(new DecimalBigNumber(0, 0)) ? + new DecimalBigNumber(0n, 0) + : + totalReserves.div(totalSupply) + + const _props = { + ...props, + label: `Backing per FTSO`, + tooltip: `The total amount of stablecoins held by the ghostDAO treasury to support the value of each FTSO in circulation.` + }; + + if (backing) _props.metric = formatCurrency(backing, 2); + else _props.isLoading = true; + + return ; +}; + +export const TreasuryMarketCap = props => { + const ftsoPrice = useFtsoPrice(props.chainId); + const { totalSupply } = useTotalSupply(props.chainId, "FTSO"); + const marketCap = ftsoPrice.mul(totalSupply); + + const _props = { + ...props, + label: `Market Cap`, + tooltip: `Market Cap = FTSO Price × FTSO Total Supply` + }; + + if (marketCap) _props.metric = formatCurrency(marketCap, 2); + else _props.isLoading = true; + + return ; +}; diff --git a/src/containers/TreasuryDashboard/components/TokenInfo.jsx b/src/containers/TreasuryDashboard/components/TokenInfo.jsx new file mode 100644 index 0000000..ce5d1ee --- /dev/null +++ b/src/containers/TreasuryDashboard/components/TokenInfo.jsx @@ -0,0 +1,144 @@ +import { Grid, Box, Typography, useTheme } from "@mui/material"; +import { useAccount } from "wagmi"; +import { useNavigate, createSearchParams } from "react-router-dom"; + +import Token from "../../../components/Token/Token"; +import { SecondaryButton } from "../../../components/Button"; +import { formatNumber, formatCurrency } from "../../../helpers"; +import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; + +import { useBalance } from "../../../hooks/tokens"; +import { + useFtsoPrice, + useStnkPrice, + useGhstPrice, + useDaiPrice, +} from "../../../hooks/prices"; + +const TokenTab = ({ isMobileScreen, theme, tokenName, tokenUrl, tokenUrlParams, balance, price, description }) => { + const navigate = useNavigate(); + const actualBalance = balance ? balance : new DecimalBigNumber(0, 0); + + return ( + + + + + + + {tokenName} + + + + + + {formatCurrency(price ? price : new DecimalBigNumber(0, 0), 2)} + + + {formatNumber(actualBalance, 5)} {tokenName} + + + + <> + + + {description} + + + + + navigate({ + pathname: tokenUrl, + search: tokenUrlParams.toString() + })} + fullWidth + > + Get {tokenName} + + + + + + ) +} + +const TokenInfo = ({ chainId, isMobileScreen }) => { + const theme = useTheme(); + const { address } = useAccount(); + + const ftsoPrice = useFtsoPrice(chainId); + const stnkPrice = useStnkPrice(chainId); + const ghstPrice = useGhstPrice(chainId); + const daiPrice = useDaiPrice(chainId); + + const { balance: ftsoBalance, contractAddress: ftsoAddress } = useBalance(chainId, "FTSO", address); + const { balance: stnkBalance, contractAddress: stnkAddress } = useBalance(chainId, "STNK", address); + const { balance: ghstBalance, contractAddress: ghstAddress } = useBalance(chainId, "GHST", address); + const { balance: daiBalance, contractAddress: daiAddress } = useBalance(chainId, "GDAI", address); + + return ( + + + + + + + + + ) +} + +export default TokenInfo; diff --git a/src/helpers/DecimalBigNumber.js b/src/helpers/DecimalBigNumber.js new file mode 100644 index 0000000..b4c3f10 --- /dev/null +++ b/src/helpers/DecimalBigNumber.js @@ -0,0 +1,273 @@ +import { BigNumber } from "@ethersproject/bignumber"; +import { commify, formatUnits, parseUnits } from "@ethersproject/units"; + +function assert(value, message) { + if (!value) throw message instanceof Error ? message : new Error(message); +} + +export class DecimalBigNumber { + _decimals; + _value; + + /** + * Creates a new instance of `DecimalBigNumber`. + * + * This class expects and suggests that numbers be handled using `DecimalBigNumber`, instead of the inherently inaccurate + * use of `number` and `string` types. + * + * The constructor accepts the following as inputs to the number parameter: + * - `BigNumber` (from @ethersproject/bignumber): to easily shift from `BigNumber` used in smart contracts to `DecimalBigNumber` + * - `string`: to take input from the user + * + * Given these design decisions, there are some recommended approaches: + * - Obtain user input with type text, instead of a number, in order to retain precision. e.g. `` + * - Where a `number` value is present, convert it to a `DecimalBigNumber` in the manner the developer deems appropriate. This will most commonly be `new DecimalBigNumber((1000222000.2222).toString(), 4)`. While a convenience method could be offered, it could lead to unexpected behaviour around precision. + * + * @param value the BigNumber or string used to initialise the object + * @param decimals the number of decimal places supported by the number. If `number` is a string, this parameter is optional. + * @returns a new, immutable instance of `DecimalBigNumber` + */ + constructor(value, decimals) { + if (typeof value === "string") { + const _value = value.trim() === "" || isNaN(Number(value)) ? "0" : value; + const _decimals = decimals === undefined ? this._inferDecimalAmount(value) : this._ensurePositive(decimals); + const formatted = this._setDecimalAmount(_value, _decimals); + + this._value = parseUnits(formatted, _decimals); + this._decimals = _decimals; + + return; + } + assert(decimals !== undefined, "Decimal cannot be undefined"); + + this._value = value; + this._decimals = decimals; + } + + _inferDecimalAmount(value) { + const [, decimalStringOrUndefined] = value.split("."); + + return decimalStringOrUndefined?.length || 0; + } + + /** + * Sets a value to a specific decimal amount + * + * Trims unnecessary decimals + * Or pads decimals if needed + * + * @param value Input value as a string + * @param decimals Desired decimal amount + */ + _setDecimalAmount(value, decimals) { + const [integer, _decimalsOrUndefined] = value.split("."); + + const _decimals = _decimalsOrUndefined || ""; + + const paddingRequired = this._ensurePositive(decimals - _decimals.length); + + return integer + "." + _decimals.substring(0, decimals) + "0".repeat(paddingRequired); + } + + /** + * Ensures the desired decimal amount is positive + */ + _ensurePositive(decimals) { + return Math.max(0, decimals); + } + + /** + * Converts this value to a BigNumber + * + * Often used when passing this value as + * an argument to a contract method + */ + toBigNumber(decimals) { + return decimals === undefined ? this._value : new DecimalBigNumber(this.toString(), decimals)._value; + } + + /** + * Converts this value to a string + * + * By default, the string returned will: + * - Have the same decimal amount that it was initialised with + * - Have trailing zeroes removed + * - Not have thousands separators + * + * This ensures that the number string is accurate. + * + * To override any of these settings, add the `args` object as a parameter. + * + * @param args an object containing any of the properties: decimals, trim, format + * @returns a string version of the number + */ + toString({ + decimals, + trim = true, + format = false, + } = {}) { + let result = formatUnits(BigInt(this._value), this._decimals); + + // Add thousands separators + if (format) result = commify(result); + + // We default to the number of decimal places specified + const _decimals = decimals === undefined ? this._decimals : this._ensurePositive(decimals); + result = this._setDecimalAmount(result, _decimals); + + // We default to trimming trailing zeroes (and decimal points), unless there is an override + if (trim) result = result.replace(/(?:\.|(\..*?))\.?0*$/, "$1"); + + return result; + } + + /** + * @deprecated + * Please avoid using this method. + * If used for calculations: rather than converting this DecimalBigNumber + * "down" to a number, convert the other number "up" to a DecimalBigNumber. + * + * Used when performing approximate calculations with + * the number where precision __is not__ important. + */ + toApproxNumber() { + return parseFloat(this.toString()); + } + + /** + * Determines if the two values are equal + */ + eq(value) { + const valueAsDBN = value instanceof DecimalBigNumber ? value : new DecimalBigNumber(value); + + // Normalize decimals to the largest of the two values + const largestDecimalAmount = Math.max(valueAsDBN._decimals, this._decimals); + + // Normalize values to the correct decimal amount + const normalisedThis = new DecimalBigNumber(this.toString(), largestDecimalAmount); + const normalisedValue = new DecimalBigNumber(valueAsDBN.toString(), largestDecimalAmount); + + return normalisedThis._value.eq(normalisedValue._value); + } + + /** + * Subtracts this value by the value provided + */ + sub(value) { + const valueAsDBN = value instanceof DecimalBigNumber ? value : new DecimalBigNumber(value); + + // Normalize decimals to the largest of the two values + const largestDecimalAmount = Math.max(valueAsDBN._decimals, this._decimals); + + // Normalize values to the correct decimal amount + const normalisedThis = new DecimalBigNumber(this.toString(), largestDecimalAmount); + const normalisedValue = new DecimalBigNumber(valueAsDBN.toString(), largestDecimalAmount); + + return new DecimalBigNumber(normalisedThis._value.sub(normalisedValue._value), largestDecimalAmount); + } + + /** + * Sums this value and the value provided + */ + add(value) { + const valueAsDBN = value instanceof DecimalBigNumber ? value : new DecimalBigNumber(value); + + // Normalize decimals to the largest of the two values + const largestDecimalAmount = Math.max(valueAsDBN._decimals, this._decimals); + + // Normalize values to the correct decimal amount + const normalisedThis = new DecimalBigNumber(this.toString(), largestDecimalAmount); + const normalisedValue = new DecimalBigNumber(valueAsDBN.toString(), largestDecimalAmount); + + return new DecimalBigNumber(normalisedThis._value.add(normalisedValue._value), largestDecimalAmount); + } + + /** + * Determines if this value is greater than the provided value + */ + gt(value) { + const valueAsDBN = value instanceof DecimalBigNumber ? value : new DecimalBigNumber(value); + + // Normalize decimals to the largest of the two values + const largestDecimalAmount = Math.max(valueAsDBN._decimals, this._decimals); + + // Normalize values to the correct decimal amount + const normalisedThis = new DecimalBigNumber(this.toString(), largestDecimalAmount); + const normalisedValue = new DecimalBigNumber(valueAsDBN.toString(), largestDecimalAmount); + + return normalisedThis._value.gt(normalisedValue._value); + } + + /** + * Determines if this value is less than the provided value + */ + lt(value) { + const valueAsDBN = value instanceof DecimalBigNumber ? value : new DecimalBigNumber(value); + + // Normalize decimals to the largest of the two values + const largestDecimalAmount = Math.max(valueAsDBN._decimals, this._decimals); + + // Normalize values to the correct decimal amount + const normalisedThis = new DecimalBigNumber(this.toString(), largestDecimalAmount); + const normalisedValue = new DecimalBigNumber(valueAsDBN.toString(), largestDecimalAmount); + + return normalisedThis._value.lt(normalisedValue._value); + } + + /** + * Multiplies this value by the provided value + */ + mul(value) { + const valueAsDBN = value instanceof DecimalBigNumber ? value : new DecimalBigNumber(value); + + const product = this._value * valueAsDBN._value; + + // Multiplying two BigNumbers produces a product with a decimal + // amount equal to the sum of the decimal amounts of the two input numbers + return new DecimalBigNumber(product, this._decimals + valueAsDBN._decimals); + } + + /** + * Divides this value by the provided value + * + * By default, this returns a value whose decimal amount is equal + * to the sum of the decimal amounts of the two values used. + * If this isn't enough, you can specify a desired + * decimal amount using the second function argument. + * + * @param decimals The expected decimal amount of the output value + */ + div(value, decimals) { + const valueAsDBN = value instanceof DecimalBigNumber ? value : new DecimalBigNumber(value); + + const _decimals = decimals === undefined ? this._decimals + valueAsDBN._decimals : this._ensurePositive(decimals); + + // When we divide two BigNumbers, the result will never + // include any decimal places because BigNumber only deals + // with whole integer values. Therefore, in order for us to + // include a specific decimal amount in our calculation, we need to + // normalize the decimal amount of the two numbers, such that the difference + // in their decimal amount is equal to the expected decimal amount + // of the result, before we do the calculation + // + // E.g: + // 22/5 = 4.4 + // + // But ethers would return: + // 22/5 = 4 (no decimals) + // + // So before we calculate, we add n padding zeros to the + // numerator, where n is the expected decimal amount of the result: + // 220/5 = 44 + // + // Normalized to the expected decimal amount of the result + // 4.4 + + const normalisedThis = new DecimalBigNumber(this.toString(), _decimals + valueAsDBN._decimals); + + const quotient = normalisedThis._value.div(valueAsDBN._value); + + // Return result with the expected output decimal amount + return new DecimalBigNumber(quotient, _decimals); + } +} diff --git a/src/helpers/index.js b/src/helpers/index.js new file mode 100644 index 0000000..7678ce8 --- /dev/null +++ b/src/helpers/index.js @@ -0,0 +1,43 @@ +export function shorten(str) { + if (str.length < 10) return str; + return `${str.slice(0, 6)}...${str.slice(str.length - 4)}`; +} + +export function capitalize(str) { + if (str.length === 0) return str; + if (str.length === 1) return str.toUpperCase(); + return String(str[0]).toUpperCase() + String(str).slice(1); +} + +export function shouldTriggerSafetyCheck() { + const _storage = window.sessionStorage; + const _safetyCheckKey = "-ghst-safety"; + // check if sessionStorage item exists for SafetyCheck + if (!_storage.getItem(_safetyCheckKey)) { + _storage.setItem(_safetyCheckKey, "true"); + return true; + } + return false; +} + +export function formatCurrency(c, precision = 0, currency = "USD") { + const formatted = new Intl.NumberFormat("en-US", { + style: currency === "USD" || currency === "" ? "currency" : undefined, + currency: "USD", + maximumFractionDigits: precision, + minimumFractionDigits: precision, + }).format(c); + if (currency) return `${formatted} ${currency}`; + return formatted; +} + +export const formatNumber = (number, precision = 0) => { + return new Intl.NumberFormat("en-US", { + minimumFractionDigits: precision, + maximumFractionDigits: precision, + }).format(number); +}; + +export const sortBondsByDiscount = (bonds) => { + return Array.from(bonds).filter((bond) => !bond.isSoldOut).sort((a, b) => (a.discount.gt(b.discount) ? -1 : 1)); +}; diff --git a/src/helpers/timeUtil.js b/src/helpers/timeUtil.js new file mode 100644 index 0000000..30e426a --- /dev/null +++ b/src/helpers/timeUtil.js @@ -0,0 +1,36 @@ +import { useQuery } from "@tanstack/react-query"; + +export function prettifySecondsInDays(seconds) { + let prettifiedSeconds = ""; + if (seconds > 86400) { + prettifiedSeconds = prettifySeconds(seconds, "day"); + } else { + prettifiedSeconds = prettifySeconds(seconds); + } + return prettifiedSeconds === "" ? "now" : prettifiedSeconds; +} + +export function prettifySeconds(seconds, resolution) { + if (seconds !== 0 && !seconds) { + return ""; + } + + const d = Math.floor(seconds / (3600 * 24)); + const h = Math.floor((seconds % (3600 * 24)) / 3600); + const m = Math.floor((seconds % 3600) / 60); + + if (resolution === "day") { + return d + (d == 1 ? " day" : " days"); + } + + const dDisplay = d > 0 ? d + (d == 1 ? " day, " : " days, ") : ""; + const hDisplay = h > 0 ? h + (h == 1 ? " hr, " : " hrs, ") : ""; + const mDisplay = m > 0 ? m + (m == 1 ? " min" : " mins") : ""; + + let result = dDisplay + hDisplay + mDisplay; + if (mDisplay === "") { + result = result.slice(0, result.length - 2); + } + + return result; +} diff --git a/src/hooks/bonds/index.jsx b/src/hooks/bonds/index.jsx new file mode 100644 index 0000000..47b8439 --- /dev/null +++ b/src/hooks/bonds/index.jsx @@ -0,0 +1,300 @@ +import { useReadContract, useReadContracts } from "wagmi"; +import { simulateContract, writeContract, waitForTransactionReceipt } from "@wagmi/core"; +import toast from "react-hot-toast"; + +import { config } from "../../config"; + +import { BOND_DEPOSITORY_ADDRESSES, DAO_TREASURY_ADDRESSES } from "../../constants/addresses"; +import { abi as BondAbi } from "../../abi/GhostBondDepository.json"; +import { abi as TreasuryAbi } from "../../abi/GhostTreasury.json"; + +import { useFtsoPrice } from "../prices"; +import { getTokenIcons, getTokenName, getBondNameDisplayName, getTokenPurchaseLink } from "../helpers"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { shorten } from "../../helpers"; + +export const useLiveBonds = (chainId) => { + const baseTokenPerUsd = useFtsoPrice(chainId); + + const { data: liveIndexesRaw, refetch } = useReadContract({ + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "liveMarkets", + scopeKey: `liveMarkets-${chainId}`, + chainId: chainId, + }); + + const { data: markets } = useReadContracts({ + contracts: liveIndexesRaw?.map((id) => ({ + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "markets", + args: [id], + scopeKey: `markets-${id.toString()}-${chainId}`, + chainId: chainId, + })) + }); + + const { data: terms } = useReadContracts({ + contracts: liveIndexesRaw?.map((id) => ({ + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "terms", + args: [id], + scopeKey: `terms-${id.toString()}-${chainId}`, + chainId: chainId, + })) + }); + + const { data: metas } = useReadContracts({ + contracts: liveIndexesRaw?.map((id) => ({ + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "metadatas", + args: [id], + scopeKey: `metadatas-${id.toString()}-${chainId}`, + chainId: chainId, + })) + }); + + const { data: marketPrices } = useReadContracts({ + contracts: liveIndexesRaw?.map((id) => ({ + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "marketPrice", + args: [id], + scopeKey: `marketPrice-${id.toString()}-${chainId}`, + chainId: chainId, + })) + }); + + const { data: quotePrices } = useReadContracts({ + contracts: markets?.map((_, index) => { + const quoteTokenDecimals = metas?.at(index).result?.at(5) ? metas.at(index).result.at(5) : 18; + const quoteTokenAddress = markets?.at(index).result?.at(1) ? markets.at(index).result.at(1) : ""; + const one = 10n ** BigInt(quoteTokenDecimals); + + return { + abi: TreasuryAbi, + address: DAO_TREASURY_ADDRESSES[chainId], + functionName: "tokenValue", + args: [quoteTokenAddress, one], + scopeKey: `tokenValue-${quoteTokenAddress}-${one.toString()}-${chainId}`, + chainId: chainId, + } + }) + }); + + const liveBonds = liveIndexesRaw ? liveIndexesRaw.map((bondIndex, index) => { + const id = Number(bondIndex); + + const marketPrice = marketPrices?.at(index).result ? marketPrices.at(index).result : 0n; + const marketCapacity = markets?.at(index).result?.at(0) ? markets.at(index).result.at(0) : 0n; + const quoteTokenAddress = markets?.at(index).result?.at(1) ? markets.at(index).result.at(1) : ""; + const capacityInQuote = markets?.at(index).result?.at(2) ? markets.at(index).result.at(2) : 0n; + const marketMaxPayout = markets?.at(index).result?.at(4) ? markets.at(index).result.at(4) : 0n; + const quoteTokenDecimals = metas?.at(index).result?.at(5) ? metas.at(index).result.at(5) : 18; + const quoteTokenPerUsd = quotePrices?.at(index).result + ? new DecimalBigNumber(quotePrices.at(index).result * (10n ** 9n), quoteTokenDecimals) + : new DecimalBigNumber(0n, quoteTokenDecimals); + + const quoteTokenPerBaseToken = new DecimalBigNumber(marketPrice, 9); + const priceInUsd = quoteTokenPerUsd.mul(quoteTokenPerBaseToken); + const discount = baseTokenPerUsd.sub(priceInUsd).div(baseTokenPerUsd); + + const capacityInBaseToken = capacityInQuote + ? new DecimalBigNumber(marketPrice > 0n ? marketCapacity / marketPrice : 0n, 9) + : new DecimalBigNumber(marketCapacity, 9); + const capacityInQuoteToken = capacityInQuote + ? new DecimalBigNumber(marketCapacity, quoteTokenDecimals) + : new DecimalBigNumber(marketCapacity * marketPrice, quoteTokenDecimals); + + const maxPayoutInBaseToken = new DecimalBigNumber(marketMaxPayout, 9); + const maxPayoutInQuoteToken = new DecimalBigNumber( + marketMaxPayout * marketPrice, + quoteTokenDecimals + ); + + const zero = new DecimalBigNumber(0n, 0); + + return { + id, + discount, + displayName: getBondNameDisplayName(chainId, markets?.at(index).result?.at(1)), + baseToken: { + name: "FTSO", + purchaseUrl: getTokenPurchaseLink(chainId, ""), + icons: ["FTSO"] + }, + quoteToken: { + name: getTokenName(chainId, quoteTokenAddress), + purchaseUrl: getTokenPurchaseLink(chainId, quoteTokenAddress), + icons: getTokenIcons(chainId, quoteTokenAddress), + decimals: quoteTokenDecimals, + quoteTokenAddress, + }, + duration: terms?.at(index).result?.at(3) ? terms.at(index).result.at(3) : 0, + vesting: terms?.at(index).result?.at(2) ? terms.at(index).result.at(2) : 0, + isFixedTerm: terms?.at(index).result?.at(0) ? terms.at(index).result.at(0) : true, + isSoldOut: capacityInBaseToken.eq(zero) || capacityInBaseToken.eq(zero), + price: { + inUsd: priceInUsd, + inBaseToken: quoteTokenPerBaseToken, + }, + capacity: { + inBaseToken: capacityInBaseToken, + inQuoteToken: capacityInQuoteToken, + }, + maxPayout: { + inBaseToken: maxPayoutInBaseToken, + inQuoteToken: maxPayoutInQuoteToken, + }, + }; + }).sort((a, b) => (a.id > b.id ? -1 : 1)) : []; + return { liveBonds, refetch }; +} + +export const useNotes = (chainId, address) => { + const { data: indexesFor, refetch } = useReadContract({ + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "indexesFor", + args: [address], + scopeKey: `indexesFor-${address}-${chainId}`, + chainId: chainId, + }); + + const { data: notesRaw } = useReadContracts({ + contracts: indexesFor?.map((id) => ({ + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "notes", + args: [address, id], + scopeKey: `notes-${id.toString()}-${address}-${chainId}`, + chainId: chainId, + })) + }); + + const { data: markets } = useReadContracts({ + contracts: notesRaw?.map((note) => { + const marketId = note.result?.at(4) ? note.result.at(4) : ""; + return { + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "markets", + args: [marketId], + scopeKey: `markets-${marketId.toString()}-${chainId}`, + chainId: chainId, + } + }), + }); + + const { data: terms } = useReadContracts({ + contracts: notesRaw?.map((note) => { + const marketId = note.result?.at(4) ? note.result.at(4) : ""; + return { + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName: "terms", + args: [marketId], + scopeKey: `terms-${marketId.toString()}-${chainId}`, + chainId: chainId, + } + }), + }); + + const notes = indexesFor ? indexesFor.map((noteIndex, index) => { + const id = Number(noteIndex); + const quoteTokenAddress = markets?.at(index).result?.at(1) ? markets.at(index).result.at(1) : ""; + + return { + id, + quoteToken: { + name: getTokenName(chainId, quoteTokenAddress), + icons: getTokenIcons(chainId, quoteTokenAddress), + }, + vesting: terms?.at(index).result?.at(2) ? terms.at(index).result.at(2) : 0, + created: notesRaw?.at(index).result?.at(1) ? notesRaw.at(index).result.at(1) : 0, + matured: notesRaw?.at(index).result?.at(2) ? notesRaw.at(index).result.at(2) : 0, + payout: new DecimalBigNumber( + notesRaw?.at(index).result?.at(0) ? notesRaw.at(index).result.at(0) : 0n, + 18 + ), + } + }) : []; + + return { notes }; +} + +export const purchaseBond = async (chainId, bondId, amount, maxPrice, user, referral) => { + const args = [ + bondId, + amount, + maxPrice, + user, + referral + ]; + const messages = { + replacedMsg: "Bond transaction was replaced. Wait for inclusion please.", + successMsg: `Bond successfully purchased for ${shorten(user)}! Wait until it'll mature before claim.`, + errorMsg: "Bond transaction failed. Check logs for error detalization.", + }; + await executeOnChainTransaction( + chainId, + "deposit", + args, + user, + messages + ); +} + +export const redeem = async (chainId, user, isGhst, indexes) => { + const args = [ + user, + isGhst, + indexes + ]; + const messages = { + replacedMsg: "Redeem transaction was replaced. Wait for inclusion please.", + successMsg: `Address ${shorten(user)} redeemed ${indexes.length} bonds in ${isGhst ? "GHST" : "STNK"}!`, + errorMsg: `Redeem of ${indexes.length} bonds failed. Check logs for error detalization.`, + }; + await executeOnChainTransaction( + chainId, + "redeem", + args, + user, + messages + ); +} + +const executeOnChainTransaction = async ( + chainId, + functionName, + args, + account, + messages +) => { + try { + const { request } = await simulateContract(config, { + abi: BondAbi, + address: BOND_DEPOSITORY_ADDRESSES[chainId], + functionName, + args, + account, + chainId + }); + + const txHash = await writeContract(config, request); + await waitForTransactionReceipt(config, { + hash: txHash, + onReplaced: () => toast(messages.replacedMsg), + chainId + }); + + toast.success(messages.successMsg); + } catch (err) { + console.error(err); + toast.error(messages.errorMsg) + } +} diff --git a/src/hooks/helpers.js b/src/hooks/helpers.js new file mode 100644 index 0000000..d49c7b6 --- /dev/null +++ b/src/hooks/helpers.js @@ -0,0 +1,143 @@ +import { + DAI_ADDRESSES, + FTSO_ADDRESSES, + STNK_ADDRESSES, + GHST_ADDRESSES, + FTSO_DAI_LP_ADDRESSES, +} from "../constants/addresses"; + +import { abi as DaiAbi } from "../abi/Reserve.json"; +import { abi as FatsoAbi } from "../abi/Fatso.json"; +import { abi as StinkyAbi } from "../abi/Stinky.json"; +import { abi as GhostAbi } from "../abi/Ghost.json"; +import { abi as Erc20Abi } from "../abi/ERC20.json"; + +export const getTokenAbi = (name) => { + let abi = Erc20Abi; + switch (name?.toUpperCase()) { + case "GDAI": + abi = DaiAbi; + break; + case "FTSO": + abi = FatsoAbi; + break; + case "STNK": + abi = StinkyAbi; + break; + case "GHST": + abi = GhostAbi; + break; + } + return abi; +} + +export const getTokenDecimals = (name) => { + let decimals = 18; + switch (name?.toUpperCase()) { + case "GDAI": + decimals = 18; + break; + case "FTSO": + decimals = 9; + break; + case "STNK": + decimals = 9; + break; + case "GHST": + decimals = 18; + break; + } + return decimals; +} + +export const getTokenAddress = (chainId, name) => { + let address = name; + switch (name?.toUpperCase()) { + case "GDAI": + address = DAI_ADDRESSES[chainId]; + break; + case "FTSO": + address = FTSO_ADDRESSES[chainId]; + break; + case "STNK": + address = STNK_ADDRESSES[chainId]; + break; + case "GHST": + address = GHST_ADDRESSES[chainId]; + break; + case "DAI_FTSO": + address = FTSO_DAI_LP_ADDRESSES[chainId]; + break; + } + return address; +} + +export const getTokenIcons = (chainId, address) => { + let icons = [""]; + switch (address) { + case DAI_ADDRESSES[chainId]: + icons = ["GDAI"]; + break; + case FTSO_ADDRESSES[chainId]: + icons = ["FTSO"]; + break; + case STNK_ADDRESSES[chainId]: + icons = "STNK"; + break; + case GHST_ADDRESSES[chainId]: + icons = ["GHST"]; + break; + case FTSO_DAI_LP_ADDRESSES[chainId]: + icons = ["FTSO", "GDAI"]; + break; + } + return icons; +} + +export const getTokenName = (chainId, address) => { + let name = ""; + switch (address) { + case DAI_ADDRESSES[chainId]: + name = "gDAI"; + break; + case FTSO_ADDRESSES[chainId]: + name = "FTSO"; + break; + case STNK_ADDRESSES[chainId]: + name = "STNK"; + break; + case GHST_ADDRESSES[chainId]: + name = "GHST"; + break; + case FTSO_DAI_LP_ADDRESSES[chainId]: + name = "UNI-V2"; + break; + } + return name; +} + +export const getBondNameDisplayName = (chainId, tokenAddress) => { + let bondName = ""; + switch (tokenAddress) { + case DAI_ADDRESSES[chainId]: + bondName = "FTSO/gDAI"; + break; + case FTSO_DAI_LP_ADDRESSES[chainId]: + bondName = "LP FTSO/gDAI" + break; + } + return bondName; +} + +export const getTokenPurchaseLink = (chainId, tokenAddress) => { + let purchaseUrl = "https://app.dao.ghostchain.io/#/dex/uniswap"; + switch (tokenAddress) { + case DAI_ADDRESSES[chainId]: + purchaseUrl = "https://app.dao.ghostchain.io/#/faucet"; + break; + case FTSO_DAI_LP_ADDRESSES[chainId]: + purchaseUrl += `?pool=true&from=${DAI_ADDRESSES[chainId]}&to=${FTSO_ADDRESSES[chainId]}`; + break; + } + return purchaseUrl; +} diff --git a/src/hooks/prices/index.js b/src/hooks/prices/index.js new file mode 100644 index 0000000..3d8d492 --- /dev/null +++ b/src/hooks/prices/index.js @@ -0,0 +1,41 @@ +import { useReadContract } from "wagmi"; + +import { useCurrentIndex } from "../staking"; +import { useUniswapV2PairReserves } from "../uniswapv2"; +import { useLpValuation } from "../treasury"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { FTSO_DAI_LP_ADDRESSES, DAI_ADDRESSES } from "../../constants/addresses"; + +export const useDaiPrice = (chainId) => { + const daiPrice = new DecimalBigNumber(1000000000000000000n, 18); + return daiPrice; +}; + +export const useFtsoPrice = (chainId) => { + const { reserves, refetch } = useUniswapV2PairReserves( + chainId, + FTSO_DAI_LP_ADDRESSES[chainId], + 9, + 18, + "FTSO", + "GDAI", + ); + + let price = 0n + if (reserves.reserve0._value > 0n) + price = reserves.reserve1._value / reserves.reserve0._value; + + return new DecimalBigNumber(price, 9); +}; + +export const useStnkPrice = (chainId) => { + const stnkPrice = useFtsoPrice(chainId); + return stnkPrice; +}; + +export const useGhstPrice = (chainId) => { + const ftsoPrice = useFtsoPrice(chainId); + const { currentIndex } = useCurrentIndex(chainId); + + return ftsoPrice.mul(currentIndex); +}; diff --git a/src/hooks/staking/index.js b/src/hooks/staking/index.js new file mode 100644 index 0000000..00e4753 --- /dev/null +++ b/src/hooks/staking/index.js @@ -0,0 +1,218 @@ +import { useReadContract } from "wagmi"; +import { simulateContract, writeContract, waitForTransactionReceipt } from "@wagmi/core"; +import toast from "react-hot-toast"; + +import { config } from "../../config"; + +import { STAKING_ADDRESSES } from "../../constants/addresses"; +import { abi as StakingAbi } from "../../abi/GhostStaking.json"; + +import { shorten } from "../../helpers"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; + +export const useCurrentIndex = (chainId) => { + const { data: index, refetch } = useReadContract({ + abi: StakingAbi, + address: STAKING_ADDRESSES[chainId], + functionName: "index", + scopeKey: `index-${chainId}`, + chainId: chainId, + }); + + const currentIndexRaw = index ? index : 0n; + const currentIndex = new DecimalBigNumber(currentIndexRaw, 9); + + return { currentIndex, refetch }; +}; + +export const useEpoch = (chainId) => { + const { data: epochRaw, refetch } = useReadContract({ + abi: StakingAbi, + address: STAKING_ADDRESSES[chainId], + functionName: "getEpoch", + scopeKey: `getEpoch-${chainId}`, + chainId: chainId, + }); + + const epoch = { + length: Number(epochRaw && epochRaw.length ? epochRaw.length : 0), + number: Number(epochRaw && epochRaw.number ? epochRaw.number : 0), + end: Number(epochRaw && epochRaw.end ? epochRaw.end : 0), + distribute: epochRaw && epochRaw.distribute ? new DecimalBigNumber(epochRaw.distribute, 9) : new DecimalBigNumber(0n, 9), + }; + + return { epoch, refetch }; +} + +export const useWarmupLength = (chainId) => { + const { data: warmupLengthRaw } = useReadContract({ + abi: StakingAbi, + address: STAKING_ADDRESSES[chainId], + functionName: "warmupPeriod", + scopeKey: `warmupPeriod-${chainId}`, + chainId: chainId, + }); + + let warmupLength = new DecimalBigNumber(0n, 0); + let warmupExists = false; + + if (warmupLengthRaw) { + warmupLength = new DecimalBigNumber(warmupLengthRaw, 0); + warmupExists = warmupLengthRaw > 0n; + } + + return { warmupLength, warmupExists }; +} + +export const useWarmupInfo = (chainId, address) => { + const { data: info, refetch } = useReadContract({ + abi: StakingAbi, + address: STAKING_ADDRESSES[chainId], + functionName: "getWarmupInfo", + args: [address], + scopeKey: `getWarmupInfo-${address}-${chainId}`, + chainId: chainId, + }); + + const warmupInfo = { + deposit: info ? new DecimalBigNumber(info.deposit, 9) : new DecimalBigNumber(0n, 9), + shares: info ? info.shares : 0n, + expiry: info ? Number(info.expiry) : 0, + } + + return { warmupInfo, refetch } +} + +export const stake = async (chainId, account, amount, isRebase, isClaim) => { + const args = [ + amount, + account, + isRebase, + isClaim + ]; + const messages = { + replacedMsg: "Staking transaction was replaced. Wait for inclusion please.", + successMsg: `FTSO tokens staked successfully! Wait for the warmup period to claim your ${isRebase ? "STNK" : "GHST"}.`, + errorMsg: "Staking transaction failed. Check logs for error detalization.", + }; + await executeOnChainTransaction( + chainId, + "stake", + args, + account, + messages + ); +} + +export const unstake = async (chainId, account, amount, isTrigger, isRebase) => { + const args = [ + amount, + account, + isTrigger, + isRebase + ]; + const messages = { + replacedMsg: "Unstake transaction was replaced. Wait for inclusion please.", + successMsg: `${isRebase ? "STNK" : "GHST"} tokens unstaked successfully! Check your FTSO balance on ${shorten(account)}.`, + errorMsg: "Unstake transaction failed. Check logs for error detalization.", + }; + await executeOnChainTransaction( + chainId, + "unstake", + args, + account, + messages + ); +} + +export const forfeit = async (chainId, account) => { + const messages = { + replacedMsg: "Forfeit transaction was replaced. Wait for inclusion please.", + successMsg: `Tokens forfeited successfully! Check your FTSO balance on ${shorten(account)}.`, + errorMsg: "Forfeit transaction failed. Check logs for error detalization.", + }; + await executeOnChainTransaction( + chainId, + "forfeit", + [], + account, + messages + ); +} + +export const claim = async (chainId, account, isStnk) => { + const args = [account, isStnk]; + const messages = { + replacedMsg: "Claim transaction was replaced. Wait for inclusion please.", + successMsg: `${isStnk ? "STNK" : "GHST"} tokens claimed successfully to ${shorten(account)}.`, + errorMsg: "Claim transaction failed. Check logs for error detalization.", + }; + await executeOnChainTransaction( + chainId, + "claim", + args, + account, + messages + ); +} + +export const unwrap = async (chainId, account, amount) => { + const messages = { + replacedMsg: "Unwrap transaction was replaced. Wait for inclusion please.", + successMsg: `Tokens unwrapped successfully! Check your STNK balance on ${shorten(account)}.`, + errorMsg: "Unwrap transaction failed. Check logs for error detalization.", + }; + await executeOnChainTransaction( + chainId, + "unwrap", + [account, amount], + account, + messages + ); +} + +export const wrap = async (chainId, account, amount) => { + const messages = { + replacedMsg: "Wrap transaction was replaced. Wait for inclusion please.", + successMsg: `Tokens wrapped successfully! Check your GHST balance on ${shorten(account)}.`, + errorMsg: "Wrap transaction failed. Check logs for error detalization.", + }; + await executeOnChainTransaction( + chainId, + "wrap", + [account, amount], + account, + messages + ); +} + +const executeOnChainTransaction = async ( + chainId, + functionName, + args, + account, + messages +) => { + try { + const { request } = await simulateContract(config, { + abi: StakingAbi, + address: STAKING_ADDRESSES[chainId], + functionName, + args, + account, + chainId + }); + + const txHash = await writeContract(config, request); + await waitForTransactionReceipt(config, { + hash: txHash, + onReplaced: () => toast(messages.replacedMsg), + chainId + }); + + toast.success(messages.successMsg); + } catch (err) { + console.error(err); + toast.error(messages.errorMsg) + } +} diff --git a/src/hooks/tokens/index.js b/src/hooks/tokens/index.js new file mode 100644 index 0000000..f3e121e --- /dev/null +++ b/src/hooks/tokens/index.js @@ -0,0 +1,173 @@ +import { useReadContract, useToken, useBalance as useInnerBalance } from "wagmi"; +import { simulateContract, writeContract, waitForTransactionReceipt } from "@wagmi/core"; +import toast from "react-hot-toast"; + +import { getTokenAbi, getTokenAddress, getTokenDecimals } from "../helpers"; + +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { shorten } from "../../helpers"; +import { config } from "../../config"; + +export const useTotalSupply = (chainId, name) => { + const contractAddress = getTokenAddress(chainId, name); + const { data, refetch } = useToken({ + address: contractAddress, + scopeKey: `token-${contractAddress}-${chainId}`, + chainId + }); + + const totalSupplyPrepared = data ? data.totalSupply.value : 0n; + const decimals = data ? data.decimals : 0; + const totalSupply = new DecimalBigNumber(totalSupplyPrepared, decimals); + + return { totalSupply, refetch }; +}; + +export const useBalance = (chainId, name, address) => { + const contractAddress = getTokenAddress(chainId, name); + const { data, refetch } = useInnerBalance({ + address, + chainId, + scopeKey: `balance-${contractAddress}-${address}-${chainId}`, + token: contractAddress, + }); + + const balancePrepared = data ? data.value : 0n; + const decimals = data ? data.decimals : getTokenDecimals(name); + + const balance = new DecimalBigNumber(balancePrepared, decimals); + + return { balance, refetch, contractAddress }; +} + +export const useAllowance = (chainId, name, owner, spender, decimals) => { + const contractAddress = getTokenAddress(chainId, name); + const { data, refetch } = useReadContract({ + abi: getTokenAbi(name), + address: contractAddress, + functionName: "allowance", + args: [owner, spender], + scopeKey: `allowance-${contractAddress}-${owner}-${spender}-${chainId}`, + chainId: chainId, + }); + + const allowancePrepared = data ? data : 0n; + decimals = decimals ? decimals : getTokenDecimals(name); + const allowance = new DecimalBigNumber(allowancePrepared, decimals); + + return { allowance, refetch }; +} + +export const useTokenSymbol = (chainId, name) => { + const contractAddress = getTokenAddress(chainId, name); + const { data, refetch } = useReadContract({ + abi: getTokenAbi(name), + address: contractAddress, + functionName: "symbol", + scopeKey: `symbol-${contractAddress}-${chainId}`, + chainId: chainId, + }); + + const symbol = data ? data : ""; + return { symbol, refetch }; +} + +export const useConversionRate = (chainId, name) => { + const contractAddress = getTokenAddress(chainId, name); + const { data: rateRaw } = useReadContract({ + abi: getTokenAbi(name), + address: contractAddress, + functionName: "conversionRate", + scopeKey: `conversionRate-${contractAddress}-${chainId}`, + chainId: chainId, + }); + + const ratePrepared = rateRaw ? rateRaw : 0n; + const rate = new DecimalBigNumber(ratePrepared, 0); + + return rate; +} + +export const useCirculatingSupply = (chainId, name) => { + const contractAddress = getTokenAddress(chainId, name); + const { data: circulatingSupplyRaw } = useReadContract({ + abi: getTokenAbi(name), + address: contractAddress, + functionName: "circulatingSupply", + scopeKey: `circulatingSupply-${contractAddress}-${chainId}`, + chainId: chainId, + }); + + const circulatingSupplyPrepared = circulatingSupplyRaw ? circulatingSupplyRaw : 0n; + const circulatingSupply = new DecimalBigNumber(circulatingSupplyPrepared, 9); + + return circulatingSupply; +}; + +export const useBalanceForShares = (chainId, name, amount) => { + const contractAddress = getTokenAddress(chainId, name); + const { data: balanceForSharesRaw } = useReadContract({ + abi: getTokenAbi(name), + address: contractAddress, + functionName: "balanceForShares", + args: [amount], + scopeKey: `balanceForShares-${chainId}`, + chainId: chainId, + }); + + const balanceForSharesPrepared = balanceForSharesRaw ? balanceForSharesRaw : 0n; + const balanceForShares = new DecimalBigNumber(balanceForSharesPrepared, 9); + + return { balanceForShares }; +}; + +export const approveTokens = async (chainId, name, owner, spender, value) => { + try { + const { request } = await simulateContract(config, { + abi: getTokenAbi(name), + address: getTokenAddress(chainId, name), + functionName: 'approve', + args: [spender, value], + account: owner, + chainId: chainId + }); + + const txHash = await writeContract(config, request); + await waitForTransactionReceipt(config, { + hash: txHash, + onReplaced: () => toast("Approve transaction was replaced. Wait for inclusion please."), + chainId + }); + + toast.success(name + " tokens successfully approved to " + shorten(spender)); + } catch (err) { + console.error(err); + toast.error(name + " tokens approval failed. Check logs for error detalization.") + } +} + +export const mintDai = async (chainId, account, value) => { + try { + const { request } = await simulateContract(config, { + abi: getTokenAbi("GDAI"), + address: getTokenAddress(chainId, "GDAI"), + functionName: 'mint', + args: [account], + account: account, + value: value, + chainId: chainId + }); + + const txHash = await writeContract(config, request); + await waitForTransactionReceipt(config, { + hash: txHash, + onReplaced: () => toast("Mint transaction was replaced. Wait for inclusion please."), + chainId + }); + + toast.success("gDAI successfully minted to your wallet! Funds will be used on Ghost Faucet."); + } catch (err) { + console.error(err); + toast.error("Minting gDAI from the faucet failed. Check logs for error detalization.") + } +} diff --git a/src/hooks/treasury/index.js b/src/hooks/treasury/index.js new file mode 100644 index 0000000..9747358 --- /dev/null +++ b/src/hooks/treasury/index.js @@ -0,0 +1,40 @@ +import { useReadContract } from "wagmi"; + +import { DAO_TREASURY_ADDRESSES } from "../../constants/addresses"; +import { abi as TreasuryAbi } from "../../abi/GhostTreasury.json"; + +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; + +export const useTotalReserves = (chainId) => { + const { data: totalReservesRaw } = useReadContract({ + abi: TreasuryAbi, + address: DAO_TREASURY_ADDRESSES[chainId], + functionName: "totalReserves", + scopeKey: `totalReserves-${chainId}`, + chainId: chainId, + }); + + const totalReservesPrepared = totalReservesRaw ? totalReservesRaw : 0n; + const totalReserves = new DecimalBigNumber(totalReservesPrepared, 9); + + return totalReserves; +}; + +export const useLpValuation = (chainId, pairAddress, pairSupply) => { + const { data: valuationRaw } = useReadContract({ + abi: TreasuryAbi, + address: DAO_TREASURY_ADDRESSES[chainId], + functionName: "tokenValue", + scopeKey: `tokenValue-${pairAddress}-${pairSupply.toString()}-${chainId}`, + args: [ + pairAddress, + pairSupply, + ], + chainId, + }); + + const valuationPrepared = valuationRaw ? valuationRaw : 0n; + const valuation = new DecimalBigNumber(valuationPrepared, 9); + + return valuation; +} diff --git a/src/hooks/uniswapv2/UniswapV2Factory.js b/src/hooks/uniswapv2/UniswapV2Factory.js new file mode 100644 index 0000000..0c73640 --- /dev/null +++ b/src/hooks/uniswapv2/UniswapV2Factory.js @@ -0,0 +1,21 @@ +import { useReadContract } from "wagmi"; + +import { abi as UniswapV2Factory } from "../../abi/UniswapV2Factory.json"; +import { UNISWAP_V2_FACTORY } from "../../constants/addresses"; + +export const useUniswapV2Pair = (chainId, factoryAddress, token0, token1) => { + const t0 = token0 > token1 ? token0 : token1; + const t1 = token0 > token1 ? token1 : token0; + const { data, refetch } = useReadContract({ + abi: UniswapV2Factory, + address: factoryAddress, + functionName: "getPair", + args: [token0, token1], + scopeKey: `getPair-${t0}-${t1}-${chainId}`, + chainId: chainId, + }); + + const pairAddress = data ? data : ""; + + return { pairAddress, refetch }; +} diff --git a/src/hooks/uniswapv2/UniswapV2Pair.js b/src/hooks/uniswapv2/UniswapV2Pair.js new file mode 100644 index 0000000..0025846 --- /dev/null +++ b/src/hooks/uniswapv2/UniswapV2Pair.js @@ -0,0 +1,64 @@ +import { useReadContract, useReadContracts } from "wagmi"; + +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { abi as UniswapV2Pair } from "../../abi/UniswapV2Pair.json"; +import { abi as Erc20Abi } from "../../abi/ERC20.json"; + +import { getTokenAddress } from "../helpers"; + +export const useUniswapV2PairReserves = (chainId, contractAddress) => { + const { data: pairReserves, refetch: pairReservesRefetch } = useReadContract({ + abi: UniswapV2Pair, + address: contractAddress, + functionName: "getReserves", + scopeKey: `getReserves-${contractAddress}-${chainId}`, + chainId: chainId, + }); + + const { data: tokenAddresses } = useReadContracts({ + contracts: [ + { + abi: UniswapV2Pair, + address: contractAddress, + functionName: "token0", + scopeKey: `token0-${contractAddress}-${chainId}`, + chainId: chainId, + }, + { + abi: UniswapV2Pair, + address: contractAddress, + functionName: "token1", + scopeKey: `token1-${contractAddress}-${chainId}`, + chainId: chainId, + } + ] + }); + + const { data: tokenDecimals } = useReadContracts({ + contracts: tokenAddresses?.map((tokenAddress) => ({ + abi: Erc20Abi, + address: tokenAddress?.result ? tokenAddress.result : "", + functionName: "decimals", + scopeKey: `decimals-${tokenAddress}-${chainId}`, + chainId: chainId, + })) + }) + + return { + reserves: { + reserve0: new DecimalBigNumber( + pairReserves ? pairReserves[0] : 0n, + tokenDecimals?.at(0).result ? tokenDecimals.at(0).result : 18 + ), + reserve1: new DecimalBigNumber( + pairReserves ? pairReserves[1] : 0n, + tokenDecimals?.at(1).result ? tokenDecimals.at(1).result : 18 + ), + }, + tokens: { + token0: tokenAddresses?.at(0).result ? tokenAddresses.at(0).result : "", + token1: tokenAddresses?.at(1).result ? tokenAddresses.at(1).result : "", + }, + refetch: pairReservesRefetch, + }; +} diff --git a/src/hooks/uniswapv2/UniswapV2Router.js b/src/hooks/uniswapv2/UniswapV2Router.js new file mode 100644 index 0000000..63aecbe --- /dev/null +++ b/src/hooks/uniswapv2/UniswapV2Router.js @@ -0,0 +1,111 @@ +import { simulateContract, writeContract, waitForTransactionReceipt } from "@wagmi/core"; +import toast from "react-hot-toast"; + +import { UNISWAP_V2_ROUTER } from "../../constants/addresses"; +import { abi as RouterAbi } from "../../abi/UniswapV2Router.json"; +import { getTokenAddress } from "../helpers"; + +import { config } from "../../config"; + +export const swapExactTokensForTokens = async ( + chainId, + amountDesired, + amountMin, + pathRaw, + destination, + deadline +) => { + + const path = pathRaw.map(tokenName => getTokenAddress(chainId, tokenName)); + const args = [ + amountDesired, + amountMin, + path, + destination, + deadline + ]; + + const messages = { + replacedMsg: "Swap transaction was replaced. Wait for inclusion please.", + successMsg: "Swap executed successfully! Wait for balances update.", + errorMsg: "Swap tokens failed. Check logs for error detalization.", + }; + + await executeOnChainTransaction( + chainId, + "swapExactTokensForTokens", + args, + destination, + messages + ); +} + +export const addLiquidity = async ( + chainId, + tokenA, + tokenB, + amountADesired, + amountBDesired, + amountAMin, + amountBMin, + to, + deadline, +) => { + const token1 = getTokenAddress(chainId, tokenA); + const token2 = getTokenAddress(chainId, tokenB); + + const args = [ + token1, + token2, + amountADesired, + amountBDesired, + amountAMin, + amountBMin, + to, + deadline + ]; + const messages = { + replacedMsg: "Add liquidity transaction was replaced. Wait for inclusion please.", + successMsg: "Liquidity added successfully! You should get LP tokens to your wallet.", + errorMsg: "Adding liquidity failed. Check logs for error detalization.", + }; + + await executeOnChainTransaction( + chainId, + "addLiquidity", + args, + to, + messages + ); +} + +const executeOnChainTransaction = async ( + chainId, + functionName, + args, + account, + messages +) => { + try { + const { request } = await simulateContract(config, { + abi: RouterAbi, + address: UNISWAP_V2_ROUTER[chainId], + functionName, + args, + account, + chainId + }); + + const txHash = await writeContract(config, request); + await waitForTransactionReceipt(config, { + hash: txHash, + onReplaced: () => toast(messages.replacedMsg), + chainId + }); + + toast.success(messages.successMsg); + } catch (err) { + console.error(err); + toast.error(messages.errorMsg) + } +} diff --git a/src/hooks/uniswapv2/index.js b/src/hooks/uniswapv2/index.js new file mode 100644 index 0000000..6612703 --- /dev/null +++ b/src/hooks/uniswapv2/index.js @@ -0,0 +1,3 @@ +export * from "./UniswapV2Factory"; +export * from "./UniswapV2Pair"; +export * from "./UniswapV2Router"; diff --git a/src/hooks/useScreenSize.js b/src/hooks/useScreenSize.js new file mode 100644 index 0000000..1ee01fe --- /dev/null +++ b/src/hooks/useScreenSize.js @@ -0,0 +1,18 @@ +import { useMediaQuery } from "@mui/material"; + +export const useScreenSize = (size) => { + const breakpoint = + size === "xs" + ? "(max-width: 0px)" + : size === "sm" + ? "(max-width: 600px)" + : size === "md" + ? "(max-width: 900px)" + : size === "lg" + ? "(max-width: 1200px)" + : size === "xl" + ? "(max-width: 153600px)" + : ""; + + return useMediaQuery(breakpoint); +}; diff --git a/src/hooks/useTheme.js b/src/hooks/useTheme.js new file mode 100644 index 0000000..eef65ba --- /dev/null +++ b/src/hooks/useTheme.js @@ -0,0 +1,37 @@ +import { useEffect, useState } from "react"; + +const useTheme = () => { + const [theme, setTheme] = useState("dark"); + const [mounted, setMounted] = useState(false); + + const setMode = (mode) => { + window.localStorage.setItem("theme", mode); + setTheme(mode); + }; + + const toggleTheme = (e) => { + if (e.metaKey) { + setMode("girth"); + } else { + if (theme === "light") { + setMode("dark"); + } else { + setMode("light"); + } + } + }; + + useEffect(() => { + const localTheme = window.localStorage.getItem("theme"); + window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches && !localTheme + ? setMode("dark") + : localTheme + ? setTheme(localTheme) + : setMode("dark"); + setMounted(true); + }, []); + + return [theme, toggleTheme, mounted]; +}; + +export default useTheme; diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..4624117 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,31 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import BackgroundCanvas from './components/BackgroundCanvas/BackgroundCanvas'; + +import { StyledEngineProvider } from "@mui/material/styles"; +import { HashRouter } from "react-router-dom"; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { WagmiProvider } from "wagmi"; +import { config } from "./config"; +import ReactGA from "react-ga4"; + +const queryClient = new QueryClient(); +const TRACKING_ID = import.meta.env.VITE_APP_TRACKING_ID; +ReactGA.initialize(TRACKING_ID); + + +ReactDOM.createRoot(document.getElementById('root')).render( + <> + + + + + + + + + + + +) diff --git a/src/style.scss b/src/style.scss new file mode 100644 index 0000000..637b18b --- /dev/null +++ b/src/style.scss @@ -0,0 +1,130 @@ +* { + outline: none; + -ms-overflow-style: none !important; /* IE and Edge */ + scrollbar-width: none !important; /* Firefox */ + &::-webkit-scrollbar { + display: none !important; + } +} + +html, +body, +#root { + font-family: "Ubuntu"; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + --ghst-gold: #f8cc82; + --ghst-card-border-radius: 10px; + --light-paper-bg: linear-gradient(65.7deg, #f5f5f5 8.35%, #ffffff 100%); + --dark-paper-bg: linear-gradient(237.43deg, #2b313d -12.81%, #171a20 132.72%); +} + +body { + margin: 0; + box-sizing: border-box; +} + +.app { + height: 100%; + width: 100vw; + display: flex; + flex-flow: column; + flex-direction: column; + z-index: 1; + background-size: cover; + font-family: "Ubuntu"; + transition: all ease 0.33ms; +} + +.MuiDrawer-paperAnchorDockedLeft { + border-right: 0 !important; +} + +.recharts-wrapper { + position: absolute; +} + +#choose-bond-view { + .bond-data-card { + .data-row { + display: flex; + justify-content: space-between; + flex-direction: row; + margin: 12px 0px; + } + + .data-row-centered { + display: flex; + justify-content: center; + flex-flow: row wrap; + margin: 12px 0px; + .marginedBtn { + margin: 0.3rem; + } + } + } +} + +.ghst-card { + max-width: 900px; + .card-header { + width: 100%; + min-height: 33px; + margin-bottom: 10px; + h5 { + font-weight: 600 !important; + } + } + + .help-text { + margin: 10px 0px; + } + + .data-row { + display: flex; + justify-content: space-between; + flex-direction: row; + margin: 12px 0px; + } + + .data-row-centered { + display: flex; + justify-content: center; + flex-flow: row wrap; + margin: 12px 0px; + .marginedBtn { + margin: 0.3rem; + } + } +} + +.ghst-pairs { + display: flex; + align-items: center; +} + +.ghost-canvas { + position: absolute; + width: 100vw; + height: 100vh; + top: 0; + opacity: 0.1; + z-index: -10; +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none !important; +} + +input[type="number"] { + -moz-appearance: textfield !important; +} + +a:hover svg { + color: inherit; +} + +.tooltip { + z-index: 9999999; +} diff --git a/src/themes/dark.js b/src/themes/dark.js new file mode 100644 index 0000000..b60de34 --- /dev/null +++ b/src/themes/dark.js @@ -0,0 +1,394 @@ +import { switchClasses } from "@mui/material"; +import { createTheme } from "@mui/material/styles"; +import { deepmerge } from "@mui/utils"; +import { darkPalette as colors } from "./darkPalette"; +import fonts from "./fonts"; +import commonSettings from "./global.js"; + +export const dark = createTheme( + deepmerge( + { + colors, + palette: { + mode: "dark", + contrastText: colors.gray[10], + primary: { + main: colors.gray[10], + }, + neutral: { + main: colors.gray[10], + secondary: colors.gray[40], + }, + text: { + primary: colors.gray[10], + secondary: colors.gray[40], + }, + graphStrokeColor: "rgba(255, 255, 255, .1)", + error: { + main: colors.feedback.error, + dark: colors.feedback.error, + }, + info: { + main: colors.feedback.userFeedback, + dark: colors.feedback.userFeedback, + }, + success: { + main: colors.feedback.success, + dark: colors.feedback.success, + }, + warning: { + main: colors.feedback.warning, + dark: colors.feedback.warning, + }, + }, + components: { + MuiCssBaseline: { + styleOverrides: ` + ${fonts} + body { + background: linear-gradient(45deg, #1C3664, #2D5784); + background-color:${colors.gray[600]}; + } + `, + }, + MuiSwitch: { + styleOverrides: { + switchBase: { + "&:hover": { + backgroundColor: "transparent", + }, + }, + colorPrimary: { + color: colors.gray[10], + [`&.${switchClasses["checked"]}`]: { + color: colors.gray[600], + [`& + .${switchClasses["track"]}`]: { + backgroundColor: colors.primary[300], + opacity: 1, + }, + "&:hover": { + backgroundColor: "transparent", + }, + }, + }, + track: { + border: `1px solid ${colors.gray[10]}`, + background: "none", + }, + }, + }, + MuiAlert: { + styleOverrides: { + root: { + backgroundImage: "none", + }, + }, + }, + MuiTabs: { + styleOverrides: { + root: { + "& .MuiLink-root": { + color: colors.gray[40], + "&.active": { + color: colors.gray[10], + }, + }, + }, + }, + }, + MuiSelect: { + styleOverrides: { + select: { + color: "#FFF", + }, + }, + }, + MuiLinearProgress: { + styleOverrides: { + root: { + height: 9, + borderRadius: 4, + }, + colorPrimary: { + backgroundColor: colors.gray[500], + }, + barColorPrimary: { + backgroundColor: colors.primary[300], + }, + colorError: { + backgroundColor: colors.gray[500], + }, + colorSuccess: { + backgroundColor: colors.gray[500], + }, + }, + }, + MuiPaper: { + styleOverrides: { + root: { + "&.MuiAccordion-root": { + background: "transparent", + }, + background: "transparent", + "&.ohm-card": { + background: "transparent", + }, + "&.MuiPaper-root&.info-tooltip, &.MuiPaper-root&.tooltip-container": { + background: colors.gray[500], + }, + }, + }, + }, + MuiModal: { + styleOverrides: { + root: { + ".Paper-root": { + background: colors.gray[600], + }, + }, + }, + }, + MuiPopover: { + styleOverrides: { + root: { + "& .MuiList-root": { + background: colors.gray[700], + }, + "& .MuiSelect-select.MuiSelect-select": { + color: "#fff", + }, + }, + }, + }, + MuiDialog: { + styleOverrides: { + root: { + "& .MuiPaper-root": { + background: colors.gray[600], + }, + }, + }, + }, + MuiDrawer: { + styleOverrides: { + paper: { + backgroundColor: colors.gray[700], + zIndex: 7, + }, + }, + }, + MuiLink: { + styleOverrides: { + root: { + color: colors.gray[10], + "&:hover": { + color: colors.primary[300], + textDecoration: "none", + "&.active": { + color: colors.gray[10], + }, + }, + "&.active": { + color: colors.gray[10], + textDecoration: "underline", + "&:hover": { + color: colors.primary[300], + textDecoration: "none", + }, + }, + }, + }, + }, + MuiTableCell: { + styleOverrides: { + root: { + color: colors.gray[10], + }, + }, + }, + MuiOutlinedInput: { + styleOverrides: { + notchedOutline: { + borderColor: colors.gray[40], + }, + }, + }, + MuiTab: { + styleOverrides: { + textColorPrimary: { + color: colors.gray[40], + }, + + root: { + "&.Mui-selected": { + color: colors.gray[10], + textDecoration: "underline", + textUnderlineOffset: "10px", + textDecorationThickness: "3px", + "&:hover": { + color: colors.gray[300], + }, + }, + "&:hover": { + color: colors.primary[300], + textDecoration: "underline", + textDecorationThickness: "3px", + textUnderlineOffset: "10px", + }, + }, + }, + }, + PrivateTabIndicator: { + styleOverrides: { + colorPrimary: { + backgroundColor: colors.primary[300], + }, + }, + }, + MuiToggleButton: { + styleOverrides: { + root: { + background: colors.gray[600], + "&:hover": { + color: colors.gray[10], + background: `${colors.gray[500]} !important`, + }, + selected: { + background: colors.gray[500], + }, + "@media (hover:none)": { + "&:hover": { + color: colors.gray[10], + background: colors.gray[500], + }, + "&:focus": { + color: colors.gray[10], + background: colors.gray[600], + borderColor: "transparent", + outline: "#00000000", + }, + }, + }, + }, + }, + MuiButton: { + styleOverrides: { + containedPrimary: { + color: colors.gray[600], + backgroundColor: colors.primary[300], + "&.Mui-disabled": { + backgroundColor: colors.primary[300], + }, + "&:hover": { + backgroundColor: colors.primary[100], + color: colors.gray[600], + }, + "&:active": { + backgroundColor: colors.primary[100], + color: colors.gray[600], + }, + "@media (hover:none)": { + color: colors.gray[600], + backgroundColor: colors.primary[300], + "&:hover": { + backgroundColor: colors.primary[100], + }, + }, + }, + containedSecondary: { + height: "39px", + background: colors.gray[600], + color: colors.gray[10], + fontWeight: 500, + "&:hover": { + background: `${colors.gray[500]} !important`, + }, + "&:active": { + background: colors.gray[500], + }, + "&:focus": { + background: colors.gray[600], + }, + "@media (hover:none)": { + color: colors.gray[10], + background: colors.gray[600], + "&:hover": { + background: `${colors.gray[500]} !important`, + }, + }, + }, + outlinedPrimary: { + color: colors.gray[10], + borderColor: colors.gray[10], + "&.Mui-disabled": { + borderColor: colors.gray[10], + color: colors.gray[10], + }, + "&:hover": { + color: colors.gray[600], + backgroundColor: colors.primary[100], + borderColor: colors.primary[100], + }, + }, + outlinedSecondary: { + color: colors.primary[300], + borderColor: colors.primary[300], + "&.Mui-disabled": { + color: colors.primary[300], + borderColor: colors.primary[300], + }, + "&:hover": { + color: colors.gray[600], + backgroundColor: colors.primary[100], + borderColor: colors.primary[100], + }, + "@media (hover:none)": { + color: colors.primary[300], + borderColor: colors.primary[300], + "&:hover": { + color: colors.gray[600], + backgroundColor: `${colors.primary[100]} !important`, + borderColor: colors.primary[100], + textDecoration: "none !important", + }, + }, + }, + textPrimary: { + color: "#FFF49C", + "&:hover": { + color: colors.primary[300], + backgroundColor: "#00000000", + }, + "&:active": { + color: colors.primary[300], + borderBottom: "#F8CC82", + }, + }, + textSecondary: { + color: colors.gray[10], + "&:hover": { + color: colors.primary[300], + }, + }, + }, + }, + MuiTypography: { + styleOverrides: { + root: { + "&.grid-message-typography": { + color: "#A3A3A3", + }, + "&.chain-highlight": { + color: "#DADADA", + }, + "&.current": { + color: colors.primary[300], + }, + }, + }, + }, + }, + }, + commonSettings, + ), +); diff --git a/src/themes/darkPalette.js b/src/themes/darkPalette.js new file mode 100644 index 0000000..1dcdabb --- /dev/null +++ b/src/themes/darkPalette.js @@ -0,0 +1,41 @@ +export const darkPalette = { + paper: { + background: "linear-gradient(45deg, #1C3664, #2D5784)", // idk where this is - done + card: "#50759E", // individual panels + cardHover: "#1F4671", // idk where this is + }, + background: ` + linear-gradient(180deg, rgba(8, 15, 53, 0), rgba(0, 0, 10, 0.9)), + linear-gradient(333deg, rgba(153, 207, 255, 0.2), rgba(180, 255, 217, 0.08)), + radial-gradient(circle at 77% 89%, rgba(125, 163, 169, 0.8), rgba(125, 163, 169, 0) 50%), + radial-gradient(circle at 15% 95%, rgba(125, 163, 169, 0.8), rgba(125, 163, 169, 0) 43%), + radial-gradient(circle at 65% 23%, rgba(137, 151, 119, 0.4), rgba(137, 151, 119, 0) 70%), + radial-gradient(circle at 10% 0%, rgba(187, 211, 204, 0.33), rgba(187,211,204,0) 35%), + radial-gradient(circle at 11% 100%, rgba(131, 165, 203, 0.3), rgba(131, 165, 203, 0) 30%) + `, // idk where this is + backgroundColor: "#50759E", // idk where this is + feedback: { + success: "#60C45B", // idk where this is - done + userFeedback: "#49A1F2", // idk where this is + error: "#F06F73", // red negative % - done + warning: "#F06F73", // idk where this is - done + pnlGain: "#60C45B", // green positive % - done + }, + gray: { + 800: "#1F4671", // active menu - done + 700: "#50759E", // menu background color - done + 750: "#345B87", // Input field - done + 600: "#1F4671", // background color - done + 500: "rgba(122, 153, 189, 0.95)", // tooltip - done + 90: "", // Social color - done + 40: "#ffffff", // heading color - done + 10: "#ffffff", // text color - done + }, + primary: { + 300: "#F2E370", // menu color hover - done + 100: "#FFF49C", // secondary button color hover - done + }, + special: { + olyZaps: "#000000", // idk where this is + }, +}; diff --git a/src/themes/fonts.js b/src/themes/fonts.js new file mode 100644 index 0000000..bfad765 --- /dev/null +++ b/src/themes/fonts.js @@ -0,0 +1,81 @@ +const square = { + fontFamily: "Ubuntu", + fontStyle: "normal", + fontDisplay: "swap", + fontWeight: 400, + src: ` + local('Ubuntu'), + local('Ubuntu-Regular') + `, + unicodeRange: + "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF", +}; + +const squareLight = { + fontFamily: "Ubuntu", + fontStyle: "normal", + fontDisplay: "swap", + fontWeight: 300, + src: ` + local('Ubuntu'), + local('Ubuntu-Light') + `, + unicodeRange: + "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF", +}; + +const squareMedium = { + fontFamily: "Ubuntu", + fontStyle: "medium", + fontDisplay: "swap", + fontWeight: 500, + src: ` + local('Ubuntu'), + local('Ubuntu-Medium') + `, + unicodeRange: + "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF", +}; + +const squareSemiBold = { + fontFamily: "Ubuntu", + fontStyle: "normal", + fontDisplay: "swap", + fontWeight: 600, + src: ` + local('Ubuntu'), + local('Ubuntu-Bold') + `, + unicodeRange: + "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF", +}; + +const squareBold = { + fontFamily: "Ubuntu", + fontStyle: "bold", + fontDisplay: "swap", + fontWeight: 700, + src: ` + local('Ubuntu'), + local('Ubuntu-Bold') + `, + unicodeRange: + "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF", +}; + +const squareItalic = { + fontFamily: "Ubuntu", + fontStyle: "italic", + fontDisplay: "swap", + fontWeight: 400, + src: ` + local('Ubuntu-Italic'), + local('Ubuntu-Italic') + `, + unicodeRange: + "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF", +}; + +const fonts = []; + +export default fonts; diff --git a/src/themes/girth.js b/src/themes/girth.js new file mode 100644 index 0000000..b0a5f35 --- /dev/null +++ b/src/themes/girth.js @@ -0,0 +1,213 @@ +import { createTheme } from "@mui/material/styles"; +import { deepmerge } from "@mui/utils"; +import fonts from "./fonts"; +import commonSettings, { handleBackdropFilter } from "./global.js"; + +export const girthTheme = { + color: "#EFEFEF", + gold: "#F8CC82", + textHighlightColor: "#F4D092", + backgroundColor: "#4158D0", + background: "linear-gradient(43deg, #4158D0 0%, #C850C0 46%, #FFCC70 100%)", + paperBg: "#4242426A", + menuBg: handleBackdropFilter("rgba(66, 66, 66, 0.41)"), + modalBg: "#F9F9F9AA", + primaryButtonBG: "#F8CC82", + primaryButtonHoverBG: "#759AAE", + largeTextColor: "#759AAE", + activeLinkColor: "#222222", + secondaryButtonBG: "linear-gradient(43deg, #4158D0 0%, #C850C0 46%, #FFCC70 100%)", + secondaryButtonHoverBG: "rgba(54, 56, 64, 1)", + outlinedPrimaryButtonHoverBG: "#F8CC82", + outlinedPrimaryButtonHoverColor: "#333333", + outlinedSecondaryButtonHoverBG: "#FCFCFC", + outlinedSecondaryButtonHoverColor: "#333333", + containedSecondaryButtonHoverBG: "#363840", +}; + +export const girth = createTheme( + deepmerge( + { + colors: { + paper: { + background: girthTheme.paperBg, + card: "#1D2026", + cardHover: "#343C49", + }, + feedback: { + success: "#94B9A1", + userFeedback: "#49A1F2", + error: "#FF6767", + warning: "#FC8E5F", + pnlGain: "#3D9C70", + }, + gray: { + 700: "#181A1D", + 600: "#292C32", + 500: "#3F4552", + 90: "#676B74", + 40: "#A3A3A3", + 10: girthTheme.color, + }, + primary: { + 300: "#F8CC82", + 100: "#EAD8B8", + "300/A75": " rgba(248, 204, 130,0.75)", + "300/A50": " rgba(248, 204, 130,0.5)", + }, + }, + palette: { + mode: "dark", + background: { + default: girthTheme.backgroundColor, + paper: girthTheme.paperBg, + }, + contrastText: girthTheme.color, + primary: { + main: girthTheme.color, + }, + neutral: { + main: girthTheme.color, + secondary: girthTheme.gray, + }, + text: { + primary: girthTheme.color, + secondary: girthTheme.gray, + }, + highlight: girthTheme.textHighlightColor, + }, + components: { + MuiCssBaseline: { + styleOverrides: ` + ${fonts} + body { + background:${girthTheme.background}; + background-repeat:no-repeat; + background-attachment:fixed; + font-size:0.75rem; + font-weight:400; + } + `, + }, + MuiBackdrop: { + styleOverrides: { + root: { + backgroundColor: "rgba(100, 100, 100, 0.41)", + }, + }, + }, + MuiLink: { + styleOverrides: { + root: { + color: girthTheme.color, + "&:hover": { + color: girthTheme.textHighlightColor, + textDecoration: "none", + "&.active": { + color: girthTheme.color, + }, + }, + "&.active": { + color: girthTheme.color, + textDecoration: "underline", + }, + }, + }, + }, + MuiTableCell: { + styleOverrides: { + root: { + color: girthTheme.color, + }, + }, + }, + MuiToggleButton: { + styleOverrides: { + root: { + backgroundColor: girthTheme.paperBg, + "&:hover": { + backgroundColor: girthTheme.secondaryButtonHoverBG, + }, + selected: { + backgroundColor: girthTheme.secondaryButtonHoverBG, + }, + }, + }, + }, + MuiSvgIcon: { + defaultProps: { + htmlColor: girthTheme.color, + }, + }, + MuiButton: { + styleOverrides: { + containedPrimary: { + color: "#333333", + backgroundColor: girthTheme.primaryButtonBG, + "&:hover": { + backgroundColor: girthTheme.primaryButtonHoverBG, + color: girthTheme.primaryButtonHoverColor, + }, + "@media (hover:none)": { + color: girthTheme.color, + backgroundColor: girthTheme.primaryButtonBG, + "&:hover": { + backgroundColor: girthTheme.primaryButtonHoverBG, + }, + }, + }, + containedSecondary: { + backgroundColor: girthTheme.paperBg, + color: girthTheme.color, + "&:hover": { + backgroundColor: girthTheme.secondaryButtonHoverBG, + }, + "@media (hover:none)": { + color: girthTheme.color, + backgroundColor: girthTheme.paperBg, + "&:hover": { + backgroundColor: girthTheme.secondaryButtonHoverBG, + }, + }, + }, + outlinedPrimary: { + color: girthTheme.gold, + borderColor: girthTheme.gold, + "&:hover": { + color: girthTheme.outlinedPrimaryButtonHoverColor, + backgroundColor: girthTheme.outlinedPrimaryButtonHoverBG, + }, + }, + outlinedSecondary: { + color: girthTheme.color, + borderColor: girthTheme.color, + "&:hover": { + color: girthTheme.outlinedSecondaryButtonHoverColor, + backgroundColor: girthTheme.outlinedSecondaryButtonHoverBG, + borderColor: "#333333", + }, + }, + textPrimary: { + color: "#A3A3A3", + "&:hover": { + color: girthTheme.gold, + backgroundColor: "#00000000", + }, + "&:active": { + color: girthTheme.gold, + borderBottom: "#F8CC82", + }, + }, + textSecondary: { + color: girthTheme.color, + "&:hover": { + color: girthTheme.textHighlightColor, + }, + }, + }, + }, + }, + }, + commonSettings, + ), +); diff --git a/src/themes/global.js b/src/themes/global.js new file mode 100644 index 0000000..d42a413 --- /dev/null +++ b/src/themes/global.js @@ -0,0 +1,267 @@ +const breakpointValues = { + xs: 0, + sm: 600, + md: 960, + lg: 1280, + xl: 1920, +}; + +/** +* will remove opacity from rgbaString when backdrop-filter is not supported +* @param {String} rgbaString should be the rgba string +* @returns modified rgbaString +*/ +export const handleBackdropFilter = rgbaString => { + const supported = CSS.supports("(-webkit-backdrop-filter: none)") || CSS.supports("(backdrop-filter: none)"); + if (!supported) { + // make the opacity == 0.9; + rgbaString = rgbaString.replace(/[\d\.]+\)$/g, "0.9)"); + } + return rgbaString; +}; + +const commonSettings = { + direction: "ltr", + typography: { + fontSize: 15, + fontFamily: "Ubuntu", + h1: { + fontSize: "32px", + fontWeight: 500, + lineHeight: "36px", + }, + h2: { + fontSize: "27px", + lineHeight: "32px", + }, + h3: { + fontSize: "24px", + lineHeight: "32px", + }, + h4: { + fontSize: "24px", + lineHeight: "32px", + }, + h5: { + fontSize: "24px", + lineHeight: "32px", + }, + h6: { + fontSize: "24px", + lineHeight: "32px", + }, + body1: { + fontSize: "15px", + lineHeight: "24px", + }, + body2: { + fontSize: "12px", + lineHeight: "15px", + }, + button: { + textTransform: "none", + fontSize: "1.25rem", + }, + }, + breakpoints: { values: breakpointValues }, + components: { + MuiButtonBase: { + defaultProps: { + disableRipple: true, + }, + }, + MuiButton: { + styleOverrides: { + root: { + "&.Mui-disabled": { + opacity: 0.3, + color: "initial", + }, + }, + }, + defaultProps: { + disableElevation: true, + disableFocusRipple: true, + disableRipple: true, + }, + }, + MuiPaper: { + styleOverrides: { + root: { + "&.ohm-card": { + padding: "20px 30px 30px 30px", + borderRadius: "var(--ohm-card-border-radius)", + maxWidth: "900px", + width: "97%", + marginBottom: "1.8rem", + overflow: "hidden", + }, + "&.Paper-root&.ohm-chart-card": { + padding: "20px 0px", + whiteSpace: "nowrap", + maxWidth: "700px", + width: "97%", + marginBottom: "1.8rem", + }, + }, + }, + defaultProps: { + elevation: 0, + }, + }, + MuiContainer: { + styleOverrides: { + root: { + backgroundColor: "transparent", + flexGrow: 1, + }, + }, + }, + MuiCheckbox: { + defaultProps: { + disableRipple: true, + }, + }, + MuiLink: { + styleOverrides: { + root: { + textUnderlineOffset: ".23rem", + cursor: "pointer", + "&:hover": { + textDecoration: "none", + underline: "none", + }, + }, + }, + defaultProps: { + underline: "none", + }, + }, + MuiTable: { + styleOverrides: { + root: { + margin: "10px 0px", + }, + }, + }, + MuiTableCell: { + styleOverrides: { + root: { + borderBottom: 0, + fontSize: "1rem", + }, + head: { + color: "#ffffff", + }, + }, + }, + MuiDrawer: { + styleOverrides: { + root: { + width: "264px", + flexShrink: 0, + }, + paper: { + width: "inherit", + padding: 0, + zIndex: 100, + }, + }, + }, + MuiBackdrop: { + styleOverrides: { + root: { + backdropFilter: "blur(15px)", + zIndex: 0, + }, + }, + defaultProps: { + transitionDuration: 300, + }, + }, + MuiToggleButton: { + styleOverrides: { + root: { + border: 0, + borderRadius: "5px", + margin: "8px", + padding: "10px", + }, + }, + }, + MuiIconButton: { + styleOverrides: { + root: { + "&:hover": { + backgroundColor: "#00000000", + }, + }, + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + height: "39px", + padding: "5px", + }, + }, + }, + MuiInputLabel: { + styleOverrides: { + outlined: { + transform: "translate(16px, 14px) scale(1)", + }, + }, + }, + MuiTabs: { + styleOverrides: { + root: { + "& .MuiLink-root": { + textUnderlineOffset: "10px", + textDecorationThickness: "3px", + }, + height: "40px", + }, + }, + }, + MuiTab: { + styleOverrides: { + root: { + minWidth: "min-content !important", + padding: "0px", + margin: "0px 10px", + fontWeight: 500, + fontStyle: "normal", + lineHeight: "30px", + opacity: 1, + }, + }, + }, + MuiTextButton: { + defaultProps: { + disableFocusRipple: true, + disableRipple: true, + }, + }, + MuiSvgIcon: { + defaultProps: { + viewBox: "0 0 20 20", + fontSize: "small", + }, + }, + MuiPopover: { + styleOverrides: { + root: { + "& .MuiBackdrop-root": { + backdropFilter: "none", + }, + }, + }, + defaultProps: { + transitionDuration: 300, + }, + }, + }, +}; + +export default commonSettings; diff --git a/src/themes/light.js b/src/themes/light.js new file mode 100644 index 0000000..d3d0caf --- /dev/null +++ b/src/themes/light.js @@ -0,0 +1,396 @@ +import { switchClasses, tabClasses } from "@mui/material"; +import { createTheme } from "@mui/material/styles"; +import { deepmerge } from "@mui/utils"; +import { darkPalette } from "./darkPalette"; +import fonts from "./fonts"; +import commonSettings from "./global.js"; +import { lightPalette as colors } from "./lightPalette"; + +const lightTheme = { + gridButtonHoverBackground: "rgba(118, 130, 153, 0.2)", + gridButtonActiveBackground: "rgba(118, 130, 153, 0.7)", + switchBg: "#FCFCFC", +}; + +export const light = createTheme( + deepmerge( + { + colors, + palette: { + mode: "light", + contrastText: colors.gray[10], + primary: { + main: colors.gray[10], + }, + neutral: { + main: colors.gray[10], + secondary: colors.gray[600], + }, + text: { + primary: colors.gray[10], + secondary: colors.gray[40], + }, + graphStrokeColor: "rgba(37, 52, 73, 0.2)", + error: { + main: colors.feedback.error, + }, + info: { + main: colors.feedback.userFeedback, + }, + success: { + main: colors.feedback.success, + }, + warning: { + main: colors.feedback.warning, + }, + }, + components: { + MuiCssBaseline: { + styleOverrides: ` + ${fonts} + body { + background-color:"#FCF7EF"; + } + `, + }, + MuiSwitch: { + styleOverrides: { + switchBase: { + "&:hover": { + backgroundColor: "transparent", + }, + }, + colorPrimary: { + color: colors.gray[10], + [`&.${switchClasses["checked"]}`]: { + color: lightTheme.switchBg, + [`& + ${switchClasses["track"]}`]: { + backgroundColor: colors.gray[10], + borderColor: colors.gray[10], + }, + "&:hover": { + backgroundColor: "transparent", + }, + }, + }, + track: { + border: `1px solid ${colors.gray[10]}`, + backgroundColor: lightTheme.switchBg, + }, + }, + }, + MuiLinearProgress: { + styleOverrides: { + root: { + height: 9, + borderRadius: 4, + }, + colorPrimary: { + backgroundColor: colors.gray[500], + }, + barColorPrimary: { + backgroundColor: colors.primary[300], + }, + colorError: { + backgroundColor: colors.gray[500], + }, + colorSuccess: { + backgroundColor: colors.gray[500], + }, + }, + }, + MuiPaper: { + styleOverrides: { + root: { + background: "transparent", + "&.ohm-card": { + background: "transparent", + }, + "&.MuiPaper-root&.info-tooltip, &.MuiPaper-root&.tooltip-container": { + background: colors.gray[700], + }, + }, + }, + }, + MuiModal: { + styleOverrides: { + root: { + ".Paper-root": { + background: colors.gray[700], + }, + }, + }, + }, + MuiDialog: { + styleOverrides: { + root: { + "& .MuiPaper-root": { + background: colors.gray[700], + }, + }, + }, + }, + MuiDrawer: { + styleOverrides: { + paper: { + backgroundColor: colors.gray[700], + zIndex: 7, + }, + }, + }, + MuiAlert: { + styleOverrides: { + root: { + backgroundImage: "none", + }, + }, + }, + MuiTabs: { + styleOverrides: { + root: { + "& .MuiLink-root": { + color: colors.gray[40], + "&.active": { + color: colors.gray[10], + }, + }, + }, + }, + }, + MuiBackdrop: { + styleOverrides: { + root: { + backgroundColor: "rgba(255,255,255, 0)", + }, + }, + }, + MuiLink: { + styleOverrides: { + root: { + color: colors.gray[10], + "&:hover": { + color: colors.gray[500], + textDecoration: "none", + "&.active": { + color: colors.gray[10], + }, + }, + "&.active": { + color: colors.gray[10], + textDecoration: "underline", + }, + "@media (hover:none)": { + "&:hover": { + color: colors.gray[500], + textDecoration: "none", + backgroundColor: "#00000000 !important", + }, + "&:focus": { + color: colors.gray[500], + backgroundColor: "#00000000 !important", + }, + }, + }, + }, + }, + MuiTableCell: { + styleOverrides: { + root: { + color: colors.gray[10], + }, + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + color: colors.gray[10], + }, + }, + }, + MuiOutlinedInput: { + styleOverrides: { + notchedOutline: { + borderColor: `${colors.gray[10]} !important`, + "&:hover": { + borderColor: `${colors.gray[10]} !important`, + }, + }, + }, + }, + MuiTab: { + styleOverrides: { + textColorPrimary: { + color: colors.gray[40], + [`&.${tabClasses["selected"]}`]: { + color: colors.gray[10], + }, + }, + root: { + "&.Mui-selected": { + textDecoration: "underline", + textUnderlineOffset: "10px", + textDecorationThickness: "3px", + }, + "&:hover": { + color: colors.gray[500], + textDecoration: "underline", + textUnderlineOffset: "10px", + textDecorationThickness: "3px", + }, + }, + }, + }, + PrivateTabIndicator: { + styleOverrides: { + colorPrimary: { + backgroundColor: colors.gray[10], + }, + }, + }, + MuiToggleButton: { + styleOverrides: { + root: { + background: colors.paper.card, + "&:hover": { + background: colors.paper.cardHover, + }, + "@media (hover:none)": { + "&:hover": { + background: colors.paper.cardHover, + }, + "&:focus": { + background: colors.paper.cardHover, + }, + }, + }, + }, + }, + MuiIconButton: { + styleOverrides: { + root: { + "&:hover": { + backgroundColor: colors.gray[500], + }, + "@media (hover:none)": { + "&:hover": { + color: colors.gray[10], + backgroundColor: colors.gray[500], + }, + "&:focus": { + color: colors.gray[10], + backgroundColor: colors.gray[500], + }, + }, + }, + }, + }, + MuiSelect: { + styleOverrides: { + select: { + color: "#93AEBC", + }, + }, + }, + MuiButton: { + styleOverrides: { + containedPrimary: { + color: colors.gray[40], + backgroundColor: colors.primary[300], + "&.Mui-disabled": { + backgroundColor: colors.primary[300], + }, + "&:hover": { + backgroundColor: colors.primary[100], + }, + }, + containedSecondary: { + height: "39px", + background: colors.paper.card, + color: colors.gray[10], + fontWeight: 500, + "&:hover": { + background: `${colors.paper.cardHover} !important`, + }, + "&:active": { + background: colors.paper.cardHover, + }, + "&:focus": { + background: colors.paper.cardHover, + }, + "@media (hover:none)": { + color: colors.gray[10], + background: colors.paper.card, + "&:hover": { + background: `${colors.paper.cardHover} !important`, + }, + }, + }, + outlinedPrimary: { + color: colors.gray[90], + borderColor: colors.gray[90], + "&.Mui-disabled": { + color: colors.gray[90], + borderColor: colors.gray[90], + }, + "&:hover": { + color: colors.gray[700], + backgroundColor: colors.gray[90], + borderColor: colors.gray[90], + }, + "@media (hover:none)": { + color: darkPalette.gray[700], + borderColor: darkPalette.gray[700], + "&:hover": { + color: `${colors.gray[600]} !important`, + backgroundColor: `${darkPalette.gray[10]} !important`, + }, + }, + }, + outlinedSecondary: { + color: colors.gray[40], + borderColor: colors.gray[40], + "&.Mui-disabled": { + color: colors.gray[40], + borderColor: colors.gray[40], + }, + "&:hover": { + backgroundColor: darkPalette.gray[10], + borderColor: darkPalette.gray[10], + }, + }, + textPrimary: { + color: colors.gray[600], + "&:hover": { + color: colors.gray[500], + backgroundColor: "#00000000", + }, + "&:active": { + color: colors.primary[300], + borderBottom: "#F8CC82", + }, + }, + textSecondary: { + color: colors.gray[10], + "&:hover": { + color: colors.gray[500], + }, + }, + }, + }, + MuiTypography: { + styleOverrides: { + root: { + "&.grid-message-typography": { + color: colors.gray[40], + }, + "&.chain-highlight": { + color: colors.gray[10], + }, + }, + }, + }, + }, + }, + commonSettings, + ), +); diff --git a/src/themes/lightPalette.js b/src/themes/lightPalette.js new file mode 100644 index 0000000..180fc41 --- /dev/null +++ b/src/themes/lightPalette.js @@ -0,0 +1,30 @@ +export const lightPalette = { + paper: { + background: "linear-gradient(65.7deg, #F5F5F5 8.35%, #FFFFFF 100%)", + card: "#EFEAE0", + cardHover: "#FFFBF5", + }, + background: "linear-gradient(180.37deg, #B3BFC5 0.49%, #D1D5D4 26.3%, #EEEAE3 99.85%)", + feedback: { + success: "#94B9A1", + userFeedback: "#49A1F2", + error: "#FF6767", + warning: "#FC8E5F", + pnlGain: "#3D9C70", + }, + gray: { + 700: "#FAFAFB", + 600: "#A3A3A3", + 500: "#676B74", + 90: "#3F4552", + 40: "#20222A", + 10: "#181A1D", + }, + primary: { + 300: "#F8CC82", + 100: "#EAD8B8", + }, + special: { + olyZaps: "#8977F5", + }, +}; diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..9ea7e27 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import svgr from 'vite-plugin-svgr' + +export default defineConfig({ + plugins: [react(), svgr()], +})