From 1a0ffaab95210e6c42a1864f1dd1e5e2734fc25c Mon Sep 17 00:00:00 2001 From: Marcel Ebert Date: Thu, 25 Jun 2026 10:01:27 +0200 Subject: [PATCH 1/6] Add CCTP settlement contract workspace --- .gitignore | 3 +- bun.lock | 74 ++++++++++++++++--- contracts/README.md | 1 + contracts/cctp-settlement/.env.example | 11 +++ contracts/cctp-settlement/hardhat.config.ts | 39 ++++++++++ .../ignition/modules/CctpSettlement.ts | 28 +++++++ contracts/cctp-settlement/package.json | 28 +++++++ contracts/cctp-settlement/tsconfig.json | 16 ++++ package.json | 3 + 9 files changed, 192 insertions(+), 11 deletions(-) create mode 100644 contracts/cctp-settlement/.env.example create mode 100644 contracts/cctp-settlement/hardhat.config.ts create mode 100644 contracts/cctp-settlement/ignition/modules/CctpSettlement.ts create mode 100644 contracts/cctp-settlement/package.json create mode 100644 contracts/cctp-settlement/tsconfig.json diff --git a/.gitignore b/.gitignore index a97f19a870..2ea72fe0fd 100644 --- a/.gitignore +++ b/.gitignore @@ -57,5 +57,6 @@ CLAUDE.local.md # hardhat generated files in workspace contract projects contracts/*/artifacts contracts/*/cache +contracts/*/typechain-types -.mcp.json \ No newline at end of file +.mcp.json diff --git a/bun.lock b/bun.lock index 6eaa48629f..3fa28d856a 100644 --- a/bun.lock +++ b/bun.lock @@ -239,6 +239,24 @@ "typescript": "catalog:", }, }, + "contracts/cctp-settlement": { + "name": "@vortexfi/contracts-cctp-settlement", + "version": "0.1.0", + "dependencies": { + "dotenv": "^16.4.7", + }, + "devDependencies": { + "@nomicfoundation/hardhat-ignition": "^0.15.9", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@openzeppelin/contracts": "^5.2.0", + "@types/chai": "^4.3.20", + "@types/node": "catalog:", + "chai": "^4.5.0", + "hardhat": "^2.22.17", + "ts-node": "^10.9.2", + "typescript": "catalog:", + }, + }, "contracts/relayer": { "name": "@vortexfi/contracts-relayer", "version": "1.0.0", @@ -1908,7 +1926,7 @@ "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], - "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + "@types/chai": ["@types/chai@4.3.20", "", {}, "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ=="], "@types/chai-as-promised": ["@types/chai-as-promised@7.1.8", "", { "dependencies": { "@types/chai": "*" } }, "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw=="], @@ -2050,6 +2068,8 @@ "@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], + "@vortexfi/contracts-cctp-settlement": ["@vortexfi/contracts-cctp-settlement@workspace:contracts/cctp-settlement"], + "@vortexfi/contracts-relayer": ["@vortexfi/contracts-relayer@workspace:contracts/relayer"], "@vortexfi/sdk": ["@vortexfi/sdk@workspace:packages/sdk"], @@ -2232,7 +2252,7 @@ "assert": ["assert@2.1.0", "", { "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", "object-is": "^1.1.5", "object.assign": "^4.1.4", "util": "^0.12.5" } }, "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw=="], - "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + "assertion-error": ["assertion-error@1.1.0", "", {}, "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="], "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], @@ -2416,7 +2436,7 @@ "cbw-sdk": ["@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.0", "eventemitter3": "^5.0.1", "keccak": "^3.0.3", "preact": "^10.16.0", "sha.js": "^2.4.11" } }, "sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw=="], - "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], + "chai": ["chai@4.5.0", "", { "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.1.0" } }, "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw=="], "chai-as-promised": ["chai-as-promised@7.1.2", "", { "dependencies": { "check-error": "^1.0.2" }, "peerDependencies": { "chai": ">= 2.1.2 < 6" } }, "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw=="], @@ -2430,7 +2450,7 @@ "charenc": ["charenc@0.0.2", "", {}, "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="], - "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], + "check-error": ["check-error@1.0.3", "", { "dependencies": { "get-func-name": "^2.0.2" } }, "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg=="], "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], @@ -3376,7 +3396,7 @@ "lottie-web": ["lottie-web@5.13.0", "", {}, "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ=="], - "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], + "loupe": ["loupe@2.3.7", "", { "dependencies": { "get-func-name": "^2.0.1" } }, "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA=="], "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], @@ -3684,7 +3704,7 @@ "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], + "pathval": ["pathval@1.1.1", "", {}, "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="], "pbkdf2": ["pbkdf2@3.1.6", "", { "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", "sha.js": "^2.4.12", "to-buffer": "^1.2.2" } }, "sha512-BT6eelPB1EyGHo8pC0o9Bl6k6SYVhKO1jEbd3lcTrtr7XHdjP8BW1YpfCV3G9Kwkxgattk+S5q2/RvuttCsS1g=="], @@ -4844,6 +4864,8 @@ "@typechain/hardhat/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + "@types/chai-as-promised/@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + "@types/minimatch/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "@typescript-eslint/eslint-plugin/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], @@ -4858,8 +4880,14 @@ "@typescript-eslint/utils/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@vitest/expect/@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + + "@vitest/expect/chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], + "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "@vitest/utils/loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], + "@wagmi/core/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], "@wagmi/core/zustand": ["zustand@5.0.0", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ=="], @@ -4938,10 +4966,6 @@ "cbw-sdk/clsx": ["clsx@1.2.1", "", {}, "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="], - "chai/deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], - - "chai-as-promised/check-error": ["check-error@1.0.3", "", { "dependencies": { "get-func-name": "^2.0.2" } }, "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg=="], - "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "cli-table3/string-width": ["string-width@2.1.1", "", { "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="], @@ -5300,6 +5324,10 @@ "viem/ws": ["ws@8.20.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w=="], + "vitest/@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + + "vitest/chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], + "vitest/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], "wagmi/use-sync-external-store": ["use-sync-external-store@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw=="], @@ -5490,10 +5518,24 @@ "@tanstack/router-plugin/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + "@types/chai-as-promised/@types/chai/assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + "@types/minimatch/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "@typescript-eslint/utils/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], + "@vitest/expect/@types/chai/assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "@vitest/expect/chai/assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "@vitest/expect/chai/check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], + + "@vitest/expect/chai/deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], + + "@vitest/expect/chai/loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], + + "@vitest/expect/chai/pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], + "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-common": ["@reown/appkit-common@1.7.8", "", { "dependencies": { "big.js": "6.2.2", "dayjs": "1.11.13", "viem": ">=2.29.0" } }, "sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ=="], "@walletconnect/ethereum-provider/@reown/appkit/@reown/appkit-controllers": ["@reown/appkit-controllers@1.7.8", "", { "dependencies": { "@reown/appkit-common": "1.7.8", "@reown/appkit-wallet": "1.7.8", "@walletconnect/universal-provider": "2.21.0", "valtio": "1.13.2", "viem": ">=2.29.0" } }, "sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA=="], @@ -5798,6 +5840,18 @@ "unstorage/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + "vitest/@types/chai/assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "vitest/chai/assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "vitest/chai/check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], + + "vitest/chai/deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], + + "vitest/chai/loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], + + "vitest/chai/pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], + "wcwidth/defaults/clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], "web3-eth-accounts/ethereum-cryptography/@noble/curves": ["@noble/curves@1.4.2", "", { "dependencies": { "@noble/hashes": "1.4.0" } }, "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw=="], diff --git a/contracts/README.md b/contracts/README.md index 23423fb7c2..9854ec0b95 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -14,4 +14,5 @@ This directory contains smart-contract projects managed as Bun workspaces. ## Current projects +- `cctp-settlement/` - Hardhat proof of concept for per-user USDC CCTP settlement contracts - `relayer/` - Relayer contract project (Hardhat) diff --git a/contracts/cctp-settlement/.env.example b/contracts/cctp-settlement/.env.example new file mode 100644 index 0000000000..c024a58606 --- /dev/null +++ b/contracts/cctp-settlement/.env.example @@ -0,0 +1,11 @@ +PRIVATE_KEY= +ALCHEMY_API_KEY= +BASE_RPC_URL= +BASE_SEPOLIA_RPC_URL= + +# Optional Ignition constructor parameters except ETHEREUM_MINT_RECIPIENT, which is required. +# Defaults point to Base mainnet CCTP V2 / USDC and a zero destination caller. +USDC_ADDRESS=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 +TOKEN_MESSENGER_V2_ADDRESS=0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d +ETHEREUM_MINT_RECIPIENT= +DESTINATION_CALLER=0x0000000000000000000000000000000000000000 diff --git a/contracts/cctp-settlement/hardhat.config.ts b/contracts/cctp-settlement/hardhat.config.ts new file mode 100644 index 0000000000..2b6c21138d --- /dev/null +++ b/contracts/cctp-settlement/hardhat.config.ts @@ -0,0 +1,39 @@ +import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; +import dotenv from "dotenv"; +import path from "path"; + +dotenv.config({ path: path.resolve(__dirname, ".env") }); + +const RAW_PRIVATE_KEY = process.env.PRIVATE_KEY; +const PRIVATE_KEY = RAW_PRIVATE_KEY ? (RAW_PRIVATE_KEY.startsWith("0x") ? RAW_PRIVATE_KEY : `0x${RAW_PRIVATE_KEY}`) : undefined; + +const config: HardhatUserConfig = { + networks: { + base: { + accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [], + chainId: 8453, + url: process.env.BASE_RPC_URL || `https://base-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY || "demo"}` + }, + baseSepolia: { + accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [], + chainId: 84532, + url: process.env.BASE_SEPOLIA_RPC_URL || `https://base-sepolia.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY || "demo"}` + }, + hardhat: { + chainId: 84532 + } + }, + solidity: { + settings: { + evmVersion: "cancun", + optimizer: { + enabled: true, + runs: 200 + } + }, + version: "0.8.28" + } +}; + +export default config; diff --git a/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts b/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts new file mode 100644 index 0000000000..e90c237432 --- /dev/null +++ b/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts @@ -0,0 +1,28 @@ +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +const CCTP_SETTLEMENT_MODULE_NAME = "CctpSettlement"; + +const BASE_USDC = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"; +const BASE_TOKEN_MESSENGER_V2 = "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"; +const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; + +function addressToBytes32Parameter(address: string) { + return `0x${address.replace(/^0x/, "").padStart(64, "0")}`; +} + +export default buildModule(CCTP_SETTLEMENT_MODULE_NAME, m => { + const usdc = m.getParameter("usdc", process.env.USDC_ADDRESS || BASE_USDC); + const tokenMessenger = m.getParameter("tokenMessenger", process.env.TOKEN_MESSENGER_V2_ADDRESS || BASE_TOKEN_MESSENGER_V2); + if (!process.env.ETHEREUM_MINT_RECIPIENT) { + throw new Error("ETHEREUM_MINT_RECIPIENT must be set before deploying CctpSettlement"); + } + + const ethereumMintRecipient = m.getParameter("ethereumMintRecipient", process.env.ETHEREUM_MINT_RECIPIENT); + const destinationCallerAddress = process.env.DESTINATION_CALLER || ZERO_ADDRESS; + const destinationCaller = m.getParameter("destinationCaller", addressToBytes32Parameter(destinationCallerAddress)); + + const factory = m.contract("PerUserCctpSettlementFactory", [usdc, tokenMessenger]); + const settlement = m.contract("PerUserCctpSettlement", [usdc, tokenMessenger, ethereumMintRecipient, destinationCaller]); + + return { factory, settlement }; +}); diff --git a/contracts/cctp-settlement/package.json b/contracts/cctp-settlement/package.json new file mode 100644 index 0000000000..42928f9fa4 --- /dev/null +++ b/contracts/cctp-settlement/package.json @@ -0,0 +1,28 @@ +{ + "dependencies": { + "dotenv": "^16.4.7" + }, + "description": "Per-user USDC CCTP settlement proof of concept", + "devDependencies": { + "@nomicfoundation/hardhat-ignition": "^0.15.9", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@openzeppelin/contracts": "^5.2.0", + "@types/chai": "^4.3.20", + "@types/node": "catalog:", + "chai": "^4.5.0", + "hardhat": "^2.22.17", + "ts-node": "^10.9.2", + "typescript": "catalog:" + }, + "main": "index.js", + "name": "@vortexfi/contracts-cctp-settlement", + "private": true, + "scripts": { + "compile": "hardhat compile", + "deploy:base": "hardhat ignition deploy ignition/modules/CctpSettlement.ts --network base", + "deploy:base-sepolia": "hardhat ignition deploy ignition/modules/CctpSettlement.ts --network baseSepolia", + "node": "hardhat node", + "test": "hardhat test" + }, + "version": "0.1.0" +} diff --git a/contracts/cctp-settlement/tsconfig.json b/contracts/cctp-settlement/tsconfig.json new file mode 100644 index 0000000000..7a7b93de20 --- /dev/null +++ b/contracts/cctp-settlement/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ES2020", + "types": ["node", "hardhat"] + }, + "exclude": ["./artifacts", "./cache", "./node_modules", "./typechain-types"], + "files": ["./hardhat.config.ts"], + "include": ["./hardhat.config.ts", "./test", "./ignition"] +} diff --git a/package.json b/package.json index 31e58c5a77..4f38982164 100644 --- a/package.json +++ b/package.json @@ -106,9 +106,11 @@ "build:frontend": "bun run --cwd apps/frontend build", "build:sdk": "bun run --cwd packages/sdk build", "build:shared": "bun run --cwd packages/shared build", + "compile:contracts:cctp-settlement": "bun run --cwd contracts/cctp-settlement compile", "compile:contracts:relayer": "bun run --cwd contracts/relayer compile", "dev": "bun run --cwd packages/shared dev & bun run --cwd apps/api dev & bun run --cwd apps/frontend dev & wait", "dev:backend": "bun run --cwd apps/api dev", + "dev:contracts:cctp-settlement": "bun run --cwd contracts/cctp-settlement node", "dev:contracts:relayer": "bun run --cwd contracts/relayer node", "dev:frontend": "bun run --cwd apps/frontend dev", "dev:rebalancer": "bun run --cwd apps/rebalancer dev", @@ -121,6 +123,7 @@ "prepare": "husky", "serve:backend": "bun run --cwd apps/api serve", "serve:frontend": "bun run --cwd apps/frontend preview", + "test:contracts:cctp-settlement": "bun run --cwd contracts/cctp-settlement test", "test:contracts:relayer": "bun run --cwd contracts/relayer test", "typecheck": "bunx tsc", "verify": "biome check --no-errors-on-unmatched" From 0945114abd5e48b070d6caf79aea3f0429eaa338 Mon Sep 17 00:00:00 2001 From: Marcel Ebert Date: Thu, 25 Jun 2026 10:02:03 +0200 Subject: [PATCH 2/6] Add per-user CCTP settlement PoC --- .../contracts/PerUserCctpSettlement.sol | 75 ++++++++ .../PerUserCctpSettlementFactory.sol | 29 +++ .../interfaces/ITokenMessengerV2.sol | 14 ++ .../contracts/mocks/MockERC20.sol | 20 ++ .../contracts/mocks/MockTokenMessengerV2.sol | 87 +++++++++ .../test/per-user-cctp-settlement.ts | 175 ++++++++++++++++++ 6 files changed, 400 insertions(+) create mode 100644 contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol create mode 100644 contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol create mode 100644 contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol create mode 100644 contracts/cctp-settlement/contracts/mocks/MockERC20.sol create mode 100644 contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol create mode 100644 contracts/cctp-settlement/test/per-user-cctp-settlement.ts diff --git a/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol b/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol new file mode 100644 index 0000000000..5a1fb46eb9 --- /dev/null +++ b/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; + +import {ITokenMessengerV2} from "./interfaces/ITokenMessengerV2.sol"; + +contract PerUserCctpSettlement is ReentrancyGuard { + using SafeERC20 for IERC20; + + uint32 public constant ETHEREUM_DESTINATION_DOMAIN = 0; + + IERC20 public immutable usdc; + ITokenMessengerV2 public immutable tokenMessenger; + address public immutable ethereumMintRecipient; + bytes32 public immutable mintRecipientBytes32; + bytes32 public immutable destinationCaller; + + event UsdcSweptAndBurned( + address indexed caller, + uint256 usdcAmount, + uint32 destinationDomain, + bytes32 mintRecipient, + bytes32 destinationCaller, + uint256 maxFee, + uint32 minFinalityThreshold + ); + + constructor(address _usdc, address _tokenMessenger, address _ethereumMintRecipient, bytes32 _destinationCaller) { + require(_usdc != address(0), "Invalid USDC"); + require(_tokenMessenger != address(0), "Invalid messenger"); + require(_ethereumMintRecipient != address(0), "Invalid recipient"); + + usdc = IERC20(_usdc); + tokenMessenger = ITokenMessengerV2(_tokenMessenger); + ethereumMintRecipient = _ethereumMintRecipient; + mintRecipientBytes32 = _addressToBytes32(_ethereumMintRecipient); + destinationCaller = _destinationCaller; + } + + function sweepUsdc(uint256 maxFee, uint32 minFinalityThreshold) external nonReentrant { + uint256 usdcAmount = usdc.balanceOf(address(this)); + require(usdcAmount > 0, "No USDC balance"); + + usdc.forceApprove(address(tokenMessenger), usdcAmount); + + tokenMessenger.depositForBurn( + usdcAmount, + ETHEREUM_DESTINATION_DOMAIN, + mintRecipientBytes32, + address(usdc), + destinationCaller, + maxFee, + minFinalityThreshold + ); + + usdc.forceApprove(address(tokenMessenger), 0); + + emit UsdcSweptAndBurned( + msg.sender, + usdcAmount, + ETHEREUM_DESTINATION_DOMAIN, + mintRecipientBytes32, + destinationCaller, + maxFee, + minFinalityThreshold + ); + } + + function _addressToBytes32(address value) private pure returns (bytes32) { + return bytes32(uint256(uint160(value))); + } +} diff --git a/contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol b/contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol new file mode 100644 index 0000000000..5bae005f45 --- /dev/null +++ b/contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {PerUserCctpSettlement} from "./PerUserCctpSettlement.sol"; + +contract PerUserCctpSettlementFactory { + address public immutable usdc; + address public immutable tokenMessenger; + + event SettlementDeployed( + address indexed settlement, + address indexed ethereumMintRecipient, + bytes32 destinationCaller + ); + + constructor(address _usdc, address _tokenMessenger) { + require(_usdc != address(0), "Invalid USDC"); + require(_tokenMessenger != address(0), "Invalid messenger"); + + usdc = _usdc; + tokenMessenger = _tokenMessenger; + } + + function deploySettlement(address ethereumMintRecipient, bytes32 destinationCaller) external returns (address settlement) { + settlement = address(new PerUserCctpSettlement(usdc, tokenMessenger, ethereumMintRecipient, destinationCaller)); + + emit SettlementDeployed(settlement, ethereumMintRecipient, destinationCaller); + } +} diff --git a/contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol b/contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol new file mode 100644 index 0000000000..d1bece9605 --- /dev/null +++ b/contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +interface ITokenMessengerV2 { + function depositForBurn( + uint256 amount, + uint32 destinationDomain, + bytes32 mintRecipient, + address burnToken, + bytes32 destinationCaller, + uint256 maxFee, + uint32 minFinalityThreshold + ) external; +} diff --git a/contracts/cctp-settlement/contracts/mocks/MockERC20.sol b/contracts/cctp-settlement/contracts/mocks/MockERC20.sol new file mode 100644 index 0000000000..8f2abcf202 --- /dev/null +++ b/contracts/cctp-settlement/contracts/mocks/MockERC20.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract MockERC20 is ERC20 { + uint8 private immutable tokenDecimals; + + constructor(string memory name_, string memory symbol_, uint8 decimals_) ERC20(name_, symbol_) { + tokenDecimals = decimals_; + } + + function decimals() public view override returns (uint8) { + return tokenDecimals; + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } +} diff --git a/contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol b/contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol new file mode 100644 index 0000000000..7ba2305bb9 --- /dev/null +++ b/contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +contract MockTokenMessengerV2 { + using SafeERC20 for IERC20; + + struct BurnCall { + uint256 amount; + uint32 destinationDomain; + bytes32 mintRecipient; + address burnToken; + bytes32 destinationCaller; + uint256 maxFee; + uint32 minFinalityThreshold; + address depositor; + } + + BurnCall public lastBurnCall; + bool public reenter; + address public reenterTarget; + bytes public reenterData; + + event DepositForBurn( + address indexed burnToken, + uint256 amount, + address indexed depositor, + bytes32 mintRecipient, + uint32 destinationDomain, + bytes32 destinationCaller, + uint256 maxFee, + uint32 indexed minFinalityThreshold, + bytes hookData + ); + + function depositForBurn( + uint256 amount, + uint32 destinationDomain, + bytes32 mintRecipient, + address burnToken, + bytes32 destinationCaller, + uint256 maxFee, + uint32 minFinalityThreshold + ) external { + if (reenter) { + (bool success, bytes memory returndata) = reenterTarget.call(reenterData); + if (!success) { + assembly { + revert(add(returndata, 32), mload(returndata)) + } + } + } + + IERC20(burnToken).safeTransferFrom(msg.sender, address(this), amount); + + lastBurnCall = BurnCall({ + amount: amount, + destinationDomain: destinationDomain, + mintRecipient: mintRecipient, + burnToken: burnToken, + destinationCaller: destinationCaller, + maxFee: maxFee, + minFinalityThreshold: minFinalityThreshold, + depositor: msg.sender + }); + + emit DepositForBurn( + burnToken, + amount, + msg.sender, + mintRecipient, + destinationDomain, + destinationCaller, + maxFee, + minFinalityThreshold, + "" + ); + } + + function setReenter(address target, bytes calldata data) external { + reenter = true; + reenterTarget = target; + reenterData = data; + } +} diff --git a/contracts/cctp-settlement/test/per-user-cctp-settlement.ts b/contracts/cctp-settlement/test/per-user-cctp-settlement.ts new file mode 100644 index 0000000000..c5e738f303 --- /dev/null +++ b/contracts/cctp-settlement/test/per-user-cctp-settlement.ts @@ -0,0 +1,175 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; + +const ETHEREUM_DOMAIN = 0; +const STANDARD_FINALITY_THRESHOLD = 2000; +const ZERO_BYTES32 = ethers.ZeroHash; + +function addressToBytes32(address: string) { + return ethers.zeroPadValue(address, 32); +} + +describe("PerUserCctpSettlement", () => { + async function deployFixture() { + const [deployer, recipient, caller, otherRecipient] = await ethers.getSigners(); + + const usdc = await ethers.deployContract("MockERC20", ["USD Coin", "USDC", 6]); + const tokenMessenger = await ethers.deployContract("MockTokenMessengerV2"); + const settlement = await ethers.deployContract("PerUserCctpSettlement", [ + await usdc.getAddress(), + await tokenMessenger.getAddress(), + recipient.address, + ZERO_BYTES32 + ]); + + return { caller, deployer, otherRecipient, recipient, settlement, tokenMessenger, usdc }; + } + + it("stores immutable CCTP configuration", async () => { + const { recipient, settlement, tokenMessenger, usdc } = await deployFixture(); + + expect(await settlement.usdc()).to.equal(await usdc.getAddress()); + expect(await settlement.tokenMessenger()).to.equal(await tokenMessenger.getAddress()); + expect(await settlement.ethereumMintRecipient()).to.equal(recipient.address); + expect(await settlement.mintRecipientBytes32()).to.equal(addressToBytes32(recipient.address)); + expect(await settlement.destinationCaller()).to.equal(ZERO_BYTES32); + expect(await settlement.ETHEREUM_DESTINATION_DOMAIN()).to.equal(ETHEREUM_DOMAIN); + }); + + it("reverts when there is no USDC balance", async () => { + const { settlement } = await deployFixture(); + + await expect(settlement.sweepUsdc(0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWith("No USDC balance"); + }); + + it("sweeps the full USDC balance into CCTP with the immutable Ethereum recipient", async () => { + const { caller, recipient, settlement, tokenMessenger, usdc } = await deployFixture(); + const amount = 1_000_000n; + const maxFee = 1_000n; + + await usdc.mint(await settlement.getAddress(), amount); + + await expect(settlement.connect(caller).sweepUsdc(maxFee, STANDARD_FINALITY_THRESHOLD)) + .to.emit(settlement, "UsdcSweptAndBurned") + .withArgs( + caller.address, + amount, + ETHEREUM_DOMAIN, + addressToBytes32(recipient.address), + ZERO_BYTES32, + maxFee, + STANDARD_FINALITY_THRESHOLD + ) + .and.to.emit(tokenMessenger, "DepositForBurn") + .withArgs( + await usdc.getAddress(), + amount, + await settlement.getAddress(), + addressToBytes32(recipient.address), + ETHEREUM_DOMAIN, + ZERO_BYTES32, + maxFee, + STANDARD_FINALITY_THRESHOLD, + "0x" + ); + + expect(await usdc.balanceOf(await settlement.getAddress())).to.equal(0n); + expect(await usdc.balanceOf(await tokenMessenger.getAddress())).to.equal(amount); + + const burnCall = await tokenMessenger.lastBurnCall(); + expect(burnCall.amount).to.equal(amount); + expect(burnCall.destinationDomain).to.equal(ETHEREUM_DOMAIN); + expect(burnCall.mintRecipient).to.equal(addressToBytes32(recipient.address)); + expect(burnCall.burnToken).to.equal(await usdc.getAddress()); + expect(burnCall.destinationCaller).to.equal(ZERO_BYTES32); + expect(burnCall.maxFee).to.equal(maxFee); + expect(burnCall.minFinalityThreshold).to.equal(STANDARD_FINALITY_THRESHOLD); + expect(burnCall.depositor).to.equal(await settlement.getAddress()); + }); + + it("revokes the TokenMessenger allowance after a successful burn", async () => { + const { settlement, tokenMessenger, usdc } = await deployFixture(); + + await usdc.mint(await settlement.getAddress(), 1_000_000n); + await settlement.sweepUsdc(0, STANDARD_FINALITY_THRESHOLD); + + expect(await usdc.allowance(await settlement.getAddress(), await tokenMessenger.getAddress())).to.equal(0n); + }); + + it("prevents reentrant sweeps through the TokenMessenger call", async () => { + const { settlement, tokenMessenger, usdc } = await deployFixture(); + + await usdc.mint(await settlement.getAddress(), 1_000_000n); + await tokenMessenger.setReenter( + await settlement.getAddress(), + settlement.interface.encodeFunctionData("sweepUsdc", [0, STANDARD_FINALITY_THRESHOLD]) + ); + + await expect(settlement.sweepUsdc(0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWithCustomError( + settlement, + "ReentrancyGuardReentrantCall" + ); + }); + + it("has no owner withdrawal surface", async () => { + const { settlement } = await deployFixture(); + const functionNames = settlement.interface.fragments + .filter(fragment => fragment.type === "function") + .map(fragment => fragment.name); + + expect(functionNames).to.not.include("withdrawToken"); + expect(functionNames).to.not.include("withdrawETH"); + expect(functionNames).to.not.include("execute"); + }); + + it("requires non-zero custody-critical constructor addresses", async () => { + const { recipient, tokenMessenger, usdc } = await deployFixture(); + + await expect( + ethers.deployContract("PerUserCctpSettlement", [ + ethers.ZeroAddress, + await tokenMessenger.getAddress(), + recipient.address, + ZERO_BYTES32 + ]) + ).to.be.revertedWith("Invalid USDC"); + + await expect( + ethers.deployContract("PerUserCctpSettlement", [ + await usdc.getAddress(), + ethers.ZeroAddress, + recipient.address, + ZERO_BYTES32 + ]) + ).to.be.revertedWith("Invalid messenger"); + + await expect( + ethers.deployContract("PerUserCctpSettlement", [ + await usdc.getAddress(), + await tokenMessenger.getAddress(), + ethers.ZeroAddress, + ZERO_BYTES32 + ]) + ).to.be.revertedWith("Invalid recipient"); + }); + + it("deploys per-user settlement contracts through the factory", async () => { + const { recipient, tokenMessenger, usdc } = await deployFixture(); + const destinationCaller = addressToBytes32(recipient.address); + const factory = await ethers.deployContract("PerUserCctpSettlementFactory", [ + await usdc.getAddress(), + await tokenMessenger.getAddress() + ]); + const settlementAddress = await factory.deploySettlement.staticCall(recipient.address, destinationCaller); + + await expect(factory.deploySettlement(recipient.address, destinationCaller)) + .to.emit(factory, "SettlementDeployed") + .withArgs(settlementAddress, recipient.address, destinationCaller); + + const settlement = await ethers.getContractAt("PerUserCctpSettlement", settlementAddress); + expect(await settlement.usdc()).to.equal(await usdc.getAddress()); + expect(await settlement.tokenMessenger()).to.equal(await tokenMessenger.getAddress()); + expect(await settlement.ethereumMintRecipient()).to.equal(recipient.address); + expect(await settlement.destinationCaller()).to.equal(destinationCaller); + }); +}); From e13b976ca8635f8c57d5bd0a574726a07c4a4bf7 Mon Sep 17 00:00:00 2001 From: Marcel Ebert Date: Thu, 25 Jun 2026 10:02:38 +0200 Subject: [PATCH 3/6] Document CCTP settlement invariants --- .../per-user-cctp-settlement.md | 38 +++++++++++++++++++ docs/security-spec/README.md | 1 + 2 files changed, 39 insertions(+) create mode 100644 docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md diff --git a/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md b/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md new file mode 100644 index 0000000000..c13b64cb22 --- /dev/null +++ b/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md @@ -0,0 +1,38 @@ +# Per-User CCTP Settlement Contract + +## What This Does + +`PerUserCctpSettlement.sol` is a first-iteration proof of concept for customer-specific settlement contracts on Base. It deliberately skips the future EURC→USDC swap step and assumes the contract already holds Base USDC. Anyone may call `sweepUsdc()`, which burns the contract's full USDC balance through Circle CCTP V2 for minting to the immutable Ethereum recipient configured at deployment. + +The PoC also includes `PerUserCctpSettlementFactory.sol`, which deploys per-user settlement contracts with shared immutable USDC and TokenMessenger addresses. + +## Security Invariants + +1. **The Ethereum mint recipient MUST be immutable** — The recipient is constructor-set and exposed only through read-only getters. There is no setter or upgrade path. +2. **The contract MUST NOT expose admin withdrawal of USDC** — USDC can only leave through `TokenMessengerV2.depositForBurn()` with the immutable mint recipient. +3. **The contract MUST NOT expose arbitrary external calls** — The only external protocol call is the configured CCTP TokenMessenger's `depositForBurn()` function. +4. **Sweeps MUST burn the full current USDC balance** — The PoC does not support partial withdrawals or operator-selected recipients. +5. **CCTP approvals MUST be exact and temporary** — The contract approves exactly the current USDC balance to the TokenMessenger and resets the allowance to zero after a successful burn. +6. **Sweep execution MUST be non-reentrant** — `sweepUsdc()` uses `ReentrancyGuard` because both the ERC-20 and TokenMessenger calls are external. +7. **Destination domain MUST be Ethereum** — The destination domain is hardcoded to Circle domain `0`; Base is the source deployment chain for the intended PoC. + +## Threat Vectors & Mitigations + +| Threat | Mitigation | +|---|---| +| **Recipient redirection** — An operator tries to change the Ethereum payout wallet after funds arrive. | The recipient is immutable and there is no setter, owner, proxy, or arbitrary execution path. | +| **Admin drain** — A deployer or owner withdraws USDC instead of burning it to the user. | The contract has no owner and no token/native withdrawal functions. | +| **Approval drain** — TokenMessenger or a compromised spender uses leftover allowance later. | The approval is for the exact sweep amount and is revoked after `depositForBurn()` succeeds. | +| **Reentrant burn attempt** — A malicious mock/token/protocol reenters `sweepUsdc()` during the burn path. | `sweepUsdc()` is guarded by OpenZeppelin `ReentrancyGuard`. | +| **Wrong CCTP parameters** — Funds are burned with an incorrect destination domain, token, recipient, or destination caller. | Domain, USDC, TokenMessenger, recipient, and destination caller are constructor-set/constant and emitted in `UsdcSweptAndBurned`. Tests assert the exact parameters passed to the TokenMessenger mock. | +| **CCTP attestation/mint delay** — Base burn succeeds but Ethereum minting is delayed or not submitted. | This is expected CCTP behavior. Backend operations must index Circle `DepositForBurn` / `MessageSent` data, poll Circle attestation, and submit or monitor destination minting. | + +## Audit Checklist + +- [x] Verify `ethereumMintRecipient` and `mintRecipientBytes32` are immutable and cannot be changed after deployment. +- [x] Verify there is no `withdrawToken`, `withdrawETH`, `execute`, `delegatecall`, or generic call surface. +- [x] Verify `sweepUsdc()` reads `usdc.balanceOf(address(this))` and reverts when the balance is zero. +- [x] Verify `depositForBurn()` receives destination domain `0`, the immutable recipient bytes32, the immutable destination caller, and the immutable USDC address. +- [x] Verify approval to the TokenMessenger is exact and reset to zero after success. +- [x] Verify reentrant calls to `sweepUsdc()` fail. +- [x] Verify deployment rejects zero USDC, TokenMessenger, and recipient addresses. diff --git a/docs/security-spec/README.md b/docs/security-spec/README.md index 6fdc3d07dd..0b39138ee5 100644 --- a/docs/security-spec/README.md +++ b/docs/security-spec/README.md @@ -34,6 +34,7 @@ This directory contains the security specification for the Vortex cross-border p | Ephemeral Account Lifecycle | `03-ramp-engine/ephemeral-accounts.md` | Funding, cleanup, stuck fund prevention | | Ramp Phase Flows | `03-ramp-engine/ramp-phase-flows.md` | Per-corridor token flow, phase handler map, subsidy bounds | | Token Relayer | `04-smart-contracts/token-relayer.md` | EIP-712, permit, known findings | +| Per-User CCTP Settlement | `04-smart-contracts/per-user-cctp-settlement.md` | Per-user USDC CCTP settlement PoC contract invariants | | Integration Template | `05-integrations/_template.md` | Template for new provider specs | | BRLA | `05-integrations/brla.md` | BRLA anchor for BRL on/off-ramp | | Mykobo | `05-integrations/mykobo.md` | Mykobo EUR on/off-ramp on Base (active EUR rail) | From 6a22c0cfe5936a67c794251c161d3b752955dabf Mon Sep 17 00:00:00 2001 From: Marcel Ebert Date: Thu, 25 Jun 2026 10:08:29 +0200 Subject: [PATCH 4/6] Use CCTP forwarding service for settlement --- contracts/cctp-settlement/.env.example | 3 +- .../contracts/PerUserCctpSettlement.sol | 25 ++++++----- .../PerUserCctpSettlementFactory.sol | 9 ++-- .../interfaces/ITokenMessengerV2.sol | 5 ++- .../contracts/mocks/MockTokenMessengerV2.sol | 9 ++-- .../ignition/modules/CctpSettlement.ts | 9 +--- .../test/per-user-cctp-settlement.ts | 43 ++++++++----------- .../per-user-cctp-settlement.md | 14 +++--- 8 files changed, 54 insertions(+), 63 deletions(-) diff --git a/contracts/cctp-settlement/.env.example b/contracts/cctp-settlement/.env.example index c024a58606..267d3bead1 100644 --- a/contracts/cctp-settlement/.env.example +++ b/contracts/cctp-settlement/.env.example @@ -4,8 +4,7 @@ BASE_RPC_URL= BASE_SEPOLIA_RPC_URL= # Optional Ignition constructor parameters except ETHEREUM_MINT_RECIPIENT, which is required. -# Defaults point to Base mainnet CCTP V2 / USDC and a zero destination caller. +# Defaults point to Base mainnet CCTP V2 / USDC. USDC_ADDRESS=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 TOKEN_MESSENGER_V2_ADDRESS=0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d ETHEREUM_MINT_RECIPIENT= -DESTINATION_CALLER=0x0000000000000000000000000000000000000000 diff --git a/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol b/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol index 5a1fb46eb9..e3b2a3dc2c 100644 --- a/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol +++ b/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol @@ -11,24 +11,26 @@ contract PerUserCctpSettlement is ReentrancyGuard { using SafeERC20 for IERC20; uint32 public constant ETHEREUM_DESTINATION_DOMAIN = 0; + bytes32 public constant DESTINATION_CALLER = bytes32(0); + bytes32 public constant FORWARD_HOOK_DATA = 0x636374702d666f72776172640000000000000000000000000000000000000000; IERC20 public immutable usdc; ITokenMessengerV2 public immutable tokenMessenger; address public immutable ethereumMintRecipient; bytes32 public immutable mintRecipientBytes32; - bytes32 public immutable destinationCaller; - event UsdcSweptAndBurned( + event UsdcSweptAndForwarded( address indexed caller, uint256 usdcAmount, uint32 destinationDomain, bytes32 mintRecipient, bytes32 destinationCaller, uint256 maxFee, - uint32 minFinalityThreshold + uint32 minFinalityThreshold, + bytes32 forwardHookData ); - constructor(address _usdc, address _tokenMessenger, address _ethereumMintRecipient, bytes32 _destinationCaller) { + constructor(address _usdc, address _tokenMessenger, address _ethereumMintRecipient) { require(_usdc != address(0), "Invalid USDC"); require(_tokenMessenger != address(0), "Invalid messenger"); require(_ethereumMintRecipient != address(0), "Invalid recipient"); @@ -37,7 +39,6 @@ contract PerUserCctpSettlement is ReentrancyGuard { tokenMessenger = ITokenMessengerV2(_tokenMessenger); ethereumMintRecipient = _ethereumMintRecipient; mintRecipientBytes32 = _addressToBytes32(_ethereumMintRecipient); - destinationCaller = _destinationCaller; } function sweepUsdc(uint256 maxFee, uint32 minFinalityThreshold) external nonReentrant { @@ -46,26 +47,28 @@ contract PerUserCctpSettlement is ReentrancyGuard { usdc.forceApprove(address(tokenMessenger), usdcAmount); - tokenMessenger.depositForBurn( + tokenMessenger.depositForBurnWithHook( usdcAmount, ETHEREUM_DESTINATION_DOMAIN, mintRecipientBytes32, address(usdc), - destinationCaller, + DESTINATION_CALLER, maxFee, - minFinalityThreshold + minFinalityThreshold, + abi.encodePacked(FORWARD_HOOK_DATA) ); usdc.forceApprove(address(tokenMessenger), 0); - emit UsdcSweptAndBurned( + emit UsdcSweptAndForwarded( msg.sender, usdcAmount, ETHEREUM_DESTINATION_DOMAIN, mintRecipientBytes32, - destinationCaller, + DESTINATION_CALLER, maxFee, - minFinalityThreshold + minFinalityThreshold, + FORWARD_HOOK_DATA ); } diff --git a/contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol b/contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol index 5bae005f45..20684306eb 100644 --- a/contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol +++ b/contracts/cctp-settlement/contracts/PerUserCctpSettlementFactory.sol @@ -9,8 +9,7 @@ contract PerUserCctpSettlementFactory { event SettlementDeployed( address indexed settlement, - address indexed ethereumMintRecipient, - bytes32 destinationCaller + address indexed ethereumMintRecipient ); constructor(address _usdc, address _tokenMessenger) { @@ -21,9 +20,9 @@ contract PerUserCctpSettlementFactory { tokenMessenger = _tokenMessenger; } - function deploySettlement(address ethereumMintRecipient, bytes32 destinationCaller) external returns (address settlement) { - settlement = address(new PerUserCctpSettlement(usdc, tokenMessenger, ethereumMintRecipient, destinationCaller)); + function deploySettlement(address ethereumMintRecipient) external returns (address settlement) { + settlement = address(new PerUserCctpSettlement(usdc, tokenMessenger, ethereumMintRecipient)); - emit SettlementDeployed(settlement, ethereumMintRecipient, destinationCaller); + emit SettlementDeployed(settlement, ethereumMintRecipient); } } diff --git a/contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol b/contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol index d1bece9605..35b2ec953a 100644 --- a/contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol +++ b/contracts/cctp-settlement/contracts/interfaces/ITokenMessengerV2.sol @@ -2,13 +2,14 @@ pragma solidity ^0.8.28; interface ITokenMessengerV2 { - function depositForBurn( + function depositForBurnWithHook( uint256 amount, uint32 destinationDomain, bytes32 mintRecipient, address burnToken, bytes32 destinationCaller, uint256 maxFee, - uint32 minFinalityThreshold + uint32 minFinalityThreshold, + bytes calldata hookData ) external; } diff --git a/contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol b/contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol index 7ba2305bb9..ba111e2b7d 100644 --- a/contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol +++ b/contracts/cctp-settlement/contracts/mocks/MockTokenMessengerV2.sol @@ -15,6 +15,7 @@ contract MockTokenMessengerV2 { bytes32 destinationCaller; uint256 maxFee; uint32 minFinalityThreshold; + bytes hookData; address depositor; } @@ -35,14 +36,15 @@ contract MockTokenMessengerV2 { bytes hookData ); - function depositForBurn( + function depositForBurnWithHook( uint256 amount, uint32 destinationDomain, bytes32 mintRecipient, address burnToken, bytes32 destinationCaller, uint256 maxFee, - uint32 minFinalityThreshold + uint32 minFinalityThreshold, + bytes calldata hookData ) external { if (reenter) { (bool success, bytes memory returndata) = reenterTarget.call(reenterData); @@ -63,6 +65,7 @@ contract MockTokenMessengerV2 { destinationCaller: destinationCaller, maxFee: maxFee, minFinalityThreshold: minFinalityThreshold, + hookData: hookData, depositor: msg.sender }); @@ -75,7 +78,7 @@ contract MockTokenMessengerV2 { destinationCaller, maxFee, minFinalityThreshold, - "" + hookData ); } diff --git a/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts b/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts index e90c237432..b7a645e13c 100644 --- a/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts +++ b/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts @@ -4,11 +4,6 @@ const CCTP_SETTLEMENT_MODULE_NAME = "CctpSettlement"; const BASE_USDC = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"; const BASE_TOKEN_MESSENGER_V2 = "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"; -const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; - -function addressToBytes32Parameter(address: string) { - return `0x${address.replace(/^0x/, "").padStart(64, "0")}`; -} export default buildModule(CCTP_SETTLEMENT_MODULE_NAME, m => { const usdc = m.getParameter("usdc", process.env.USDC_ADDRESS || BASE_USDC); @@ -18,11 +13,9 @@ export default buildModule(CCTP_SETTLEMENT_MODULE_NAME, m => { } const ethereumMintRecipient = m.getParameter("ethereumMintRecipient", process.env.ETHEREUM_MINT_RECIPIENT); - const destinationCallerAddress = process.env.DESTINATION_CALLER || ZERO_ADDRESS; - const destinationCaller = m.getParameter("destinationCaller", addressToBytes32Parameter(destinationCallerAddress)); const factory = m.contract("PerUserCctpSettlementFactory", [usdc, tokenMessenger]); - const settlement = m.contract("PerUserCctpSettlement", [usdc, tokenMessenger, ethereumMintRecipient, destinationCaller]); + const settlement = m.contract("PerUserCctpSettlement", [usdc, tokenMessenger, ethereumMintRecipient]); return { factory, settlement }; }); diff --git a/contracts/cctp-settlement/test/per-user-cctp-settlement.ts b/contracts/cctp-settlement/test/per-user-cctp-settlement.ts index c5e738f303..0a3bac0694 100644 --- a/contracts/cctp-settlement/test/per-user-cctp-settlement.ts +++ b/contracts/cctp-settlement/test/per-user-cctp-settlement.ts @@ -4,6 +4,7 @@ import { ethers } from "hardhat"; const ETHEREUM_DOMAIN = 0; const STANDARD_FINALITY_THRESHOLD = 2000; const ZERO_BYTES32 = ethers.ZeroHash; +const FORWARD_HOOK_DATA = "0x636374702d666f72776172640000000000000000000000000000000000000000"; function addressToBytes32(address: string) { return ethers.zeroPadValue(address, 32); @@ -18,8 +19,7 @@ describe("PerUserCctpSettlement", () => { const settlement = await ethers.deployContract("PerUserCctpSettlement", [ await usdc.getAddress(), await tokenMessenger.getAddress(), - recipient.address, - ZERO_BYTES32 + recipient.address ]); return { caller, deployer, otherRecipient, recipient, settlement, tokenMessenger, usdc }; @@ -32,8 +32,9 @@ describe("PerUserCctpSettlement", () => { expect(await settlement.tokenMessenger()).to.equal(await tokenMessenger.getAddress()); expect(await settlement.ethereumMintRecipient()).to.equal(recipient.address); expect(await settlement.mintRecipientBytes32()).to.equal(addressToBytes32(recipient.address)); - expect(await settlement.destinationCaller()).to.equal(ZERO_BYTES32); + expect(await settlement.DESTINATION_CALLER()).to.equal(ZERO_BYTES32); expect(await settlement.ETHEREUM_DESTINATION_DOMAIN()).to.equal(ETHEREUM_DOMAIN); + expect(await settlement.FORWARD_HOOK_DATA()).to.equal(FORWARD_HOOK_DATA); }); it("reverts when there is no USDC balance", async () => { @@ -42,7 +43,7 @@ describe("PerUserCctpSettlement", () => { await expect(settlement.sweepUsdc(0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWith("No USDC balance"); }); - it("sweeps the full USDC balance into CCTP with the immutable Ethereum recipient", async () => { + it("sweeps the full USDC balance into CCTP forwarding with the immutable Ethereum recipient", async () => { const { caller, recipient, settlement, tokenMessenger, usdc } = await deployFixture(); const amount = 1_000_000n; const maxFee = 1_000n; @@ -50,7 +51,7 @@ describe("PerUserCctpSettlement", () => { await usdc.mint(await settlement.getAddress(), amount); await expect(settlement.connect(caller).sweepUsdc(maxFee, STANDARD_FINALITY_THRESHOLD)) - .to.emit(settlement, "UsdcSweptAndBurned") + .to.emit(settlement, "UsdcSweptAndForwarded") .withArgs( caller.address, amount, @@ -58,7 +59,8 @@ describe("PerUserCctpSettlement", () => { addressToBytes32(recipient.address), ZERO_BYTES32, maxFee, - STANDARD_FINALITY_THRESHOLD + STANDARD_FINALITY_THRESHOLD, + FORWARD_HOOK_DATA ) .and.to.emit(tokenMessenger, "DepositForBurn") .withArgs( @@ -70,7 +72,7 @@ describe("PerUserCctpSettlement", () => { ZERO_BYTES32, maxFee, STANDARD_FINALITY_THRESHOLD, - "0x" + FORWARD_HOOK_DATA ); expect(await usdc.balanceOf(await settlement.getAddress())).to.equal(0n); @@ -84,6 +86,7 @@ describe("PerUserCctpSettlement", () => { expect(burnCall.destinationCaller).to.equal(ZERO_BYTES32); expect(burnCall.maxFee).to.equal(maxFee); expect(burnCall.minFinalityThreshold).to.equal(STANDARD_FINALITY_THRESHOLD); + expect(burnCall.hookData).to.equal(FORWARD_HOOK_DATA); expect(burnCall.depositor).to.equal(await settlement.getAddress()); }); @@ -126,50 +129,38 @@ describe("PerUserCctpSettlement", () => { const { recipient, tokenMessenger, usdc } = await deployFixture(); await expect( - ethers.deployContract("PerUserCctpSettlement", [ - ethers.ZeroAddress, - await tokenMessenger.getAddress(), - recipient.address, - ZERO_BYTES32 - ]) + ethers.deployContract("PerUserCctpSettlement", [ethers.ZeroAddress, await tokenMessenger.getAddress(), recipient.address]) ).to.be.revertedWith("Invalid USDC"); await expect( - ethers.deployContract("PerUserCctpSettlement", [ - await usdc.getAddress(), - ethers.ZeroAddress, - recipient.address, - ZERO_BYTES32 - ]) + ethers.deployContract("PerUserCctpSettlement", [await usdc.getAddress(), ethers.ZeroAddress, recipient.address]) ).to.be.revertedWith("Invalid messenger"); await expect( ethers.deployContract("PerUserCctpSettlement", [ await usdc.getAddress(), await tokenMessenger.getAddress(), - ethers.ZeroAddress, - ZERO_BYTES32 + ethers.ZeroAddress ]) ).to.be.revertedWith("Invalid recipient"); }); it("deploys per-user settlement contracts through the factory", async () => { const { recipient, tokenMessenger, usdc } = await deployFixture(); - const destinationCaller = addressToBytes32(recipient.address); const factory = await ethers.deployContract("PerUserCctpSettlementFactory", [ await usdc.getAddress(), await tokenMessenger.getAddress() ]); - const settlementAddress = await factory.deploySettlement.staticCall(recipient.address, destinationCaller); + const settlementAddress = await factory.deploySettlement.staticCall(recipient.address); - await expect(factory.deploySettlement(recipient.address, destinationCaller)) + await expect(factory.deploySettlement(recipient.address)) .to.emit(factory, "SettlementDeployed") - .withArgs(settlementAddress, recipient.address, destinationCaller); + .withArgs(settlementAddress, recipient.address); const settlement = await ethers.getContractAt("PerUserCctpSettlement", settlementAddress); expect(await settlement.usdc()).to.equal(await usdc.getAddress()); expect(await settlement.tokenMessenger()).to.equal(await tokenMessenger.getAddress()); expect(await settlement.ethereumMintRecipient()).to.equal(recipient.address); - expect(await settlement.destinationCaller()).to.equal(destinationCaller); + expect(await settlement.DESTINATION_CALLER()).to.equal(ZERO_BYTES32); }); }); diff --git a/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md b/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md index c13b64cb22..da57c69ba4 100644 --- a/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md +++ b/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md @@ -2,19 +2,20 @@ ## What This Does -`PerUserCctpSettlement.sol` is a first-iteration proof of concept for customer-specific settlement contracts on Base. It deliberately skips the future EURC→USDC swap step and assumes the contract already holds Base USDC. Anyone may call `sweepUsdc()`, which burns the contract's full USDC balance through Circle CCTP V2 for minting to the immutable Ethereum recipient configured at deployment. +`PerUserCctpSettlement.sol` is a first-iteration proof of concept for customer-specific settlement contracts on Base. It deliberately skips the future EURC→USDC swap step and assumes the contract already holds Base USDC. Anyone may call `sweepUsdc()`, which burns the contract's full USDC balance through Circle CCTP V2 with the Forwarding Service hook so Circle handles the destination-chain mint transaction to the immutable Ethereum recipient configured at deployment. The PoC also includes `PerUserCctpSettlementFactory.sol`, which deploys per-user settlement contracts with shared immutable USDC and TokenMessenger addresses. ## Security Invariants 1. **The Ethereum mint recipient MUST be immutable** — The recipient is constructor-set and exposed only through read-only getters. There is no setter or upgrade path. -2. **The contract MUST NOT expose admin withdrawal of USDC** — USDC can only leave through `TokenMessengerV2.depositForBurn()` with the immutable mint recipient. -3. **The contract MUST NOT expose arbitrary external calls** — The only external protocol call is the configured CCTP TokenMessenger's `depositForBurn()` function. +2. **The contract MUST NOT expose admin withdrawal of USDC** — USDC can only leave through `TokenMessengerV2.depositForBurnWithHook()` with the immutable mint recipient. +3. **The contract MUST NOT expose arbitrary external calls** — The only external protocol call is the configured CCTP TokenMessenger's `depositForBurnWithHook()` function. 4. **Sweeps MUST burn the full current USDC balance** — The PoC does not support partial withdrawals or operator-selected recipients. 5. **CCTP approvals MUST be exact and temporary** — The contract approves exactly the current USDC balance to the TokenMessenger and resets the allowance to zero after a successful burn. 6. **Sweep execution MUST be non-reentrant** — `sweepUsdc()` uses `ReentrancyGuard` because both the ERC-20 and TokenMessenger calls are external. 7. **Destination domain MUST be Ethereum** — The destination domain is hardcoded to Circle domain `0`; Base is the source deployment chain for the intended PoC. +8. **Forwarding Service MUST use Circle's reserved hook data and no destination caller** — The hook data is the static `cctp-forward` payload and `destinationCaller` is always `bytes32(0)`, because Circle forwarding does not support wrapper/authorized-caller flows. ## Threat Vectors & Mitigations @@ -24,15 +25,16 @@ The PoC also includes `PerUserCctpSettlementFactory.sol`, which deploys per-user | **Admin drain** — A deployer or owner withdraws USDC instead of burning it to the user. | The contract has no owner and no token/native withdrawal functions. | | **Approval drain** — TokenMessenger or a compromised spender uses leftover allowance later. | The approval is for the exact sweep amount and is revoked after `depositForBurn()` succeeds. | | **Reentrant burn attempt** — A malicious mock/token/protocol reenters `sweepUsdc()` during the burn path. | `sweepUsdc()` is guarded by OpenZeppelin `ReentrancyGuard`. | -| **Wrong CCTP parameters** — Funds are burned with an incorrect destination domain, token, recipient, or destination caller. | Domain, USDC, TokenMessenger, recipient, and destination caller are constructor-set/constant and emitted in `UsdcSweptAndBurned`. Tests assert the exact parameters passed to the TokenMessenger mock. | -| **CCTP attestation/mint delay** — Base burn succeeds but Ethereum minting is delayed or not submitted. | This is expected CCTP behavior. Backend operations must index Circle `DepositForBurn` / `MessageSent` data, poll Circle attestation, and submit or monitor destination minting. | +| **Wrong CCTP parameters** — Funds are burned with an incorrect destination domain, token, recipient, hook data, or destination caller. | Domain, forwarding hook data, and zero destination caller are constants; USDC, TokenMessenger, and recipient are constructor-set. Tests assert the exact parameters passed to the TokenMessenger mock. | +| **Insufficient forwarding fee** — The provided `maxFee` is too low for CCTP and forwarding execution. | The TokenMessenger reverts or forwarding falls back according to Circle's fee rules. Callers must fetch a fresh Circle fee estimate and pass a sufficient `maxFee`; the contract does not hardcode forwarding fees. | +| **CCTP forwarding delay** — Base burn succeeds but Circle forwarding takes longer than expected. | This is expected CCTP/Forwarding Service behavior. Backend operations should index Circle `DepositForBurn` / `MessageSent` data and monitor Circle transfer status rather than submit the Ethereum mint itself. | ## Audit Checklist - [x] Verify `ethereumMintRecipient` and `mintRecipientBytes32` are immutable and cannot be changed after deployment. - [x] Verify there is no `withdrawToken`, `withdrawETH`, `execute`, `delegatecall`, or generic call surface. - [x] Verify `sweepUsdc()` reads `usdc.balanceOf(address(this))` and reverts when the balance is zero. -- [x] Verify `depositForBurn()` receives destination domain `0`, the immutable recipient bytes32, the immutable destination caller, and the immutable USDC address. +- [x] Verify `depositForBurnWithHook()` receives destination domain `0`, the immutable recipient bytes32, zero destination caller, the immutable USDC address, and the static forwarding hook data. - [x] Verify approval to the TokenMessenger is exact and reset to zero after success. - [x] Verify reentrant calls to `sweepUsdc()` fail. - [x] Verify deployment rejects zero USDC, TokenMessenger, and recipient addresses. From 0e3767d43d3c717b1af4987032915f89782e7709 Mon Sep 17 00:00:00 2001 From: Marcel Ebert Date: Thu, 25 Jun 2026 10:46:47 +0200 Subject: [PATCH 5/6] Allow passing custom amount for cctp settlement contract --- contracts/cctp-settlement/.env.example | 6 +- contracts/cctp-settlement/README.md | 82 +++++++++++++++++++ .../contracts/PerUserCctpSettlement.sol | 9 +- contracts/cctp-settlement/hardhat.config.ts | 51 +++++++++++- .../ignition/modules/CctpSettlement.ts | 8 +- contracts/cctp-settlement/package.json | 2 + .../test/per-user-cctp-settlement.ts | 33 ++++++-- .../per-user-cctp-settlement.md | 10 +-- 8 files changed, 173 insertions(+), 28 deletions(-) create mode 100644 contracts/cctp-settlement/README.md diff --git a/contracts/cctp-settlement/.env.example b/contracts/cctp-settlement/.env.example index 267d3bead1..a7c42a8bf1 100644 --- a/contracts/cctp-settlement/.env.example +++ b/contracts/cctp-settlement/.env.example @@ -3,8 +3,10 @@ ALCHEMY_API_KEY= BASE_RPC_URL= BASE_SEPOLIA_RPC_URL= -# Optional Ignition constructor parameters except ETHEREUM_MINT_RECIPIENT, which is required. -# Defaults point to Base mainnet CCTP V2 / USDC. +# Optional Ignition constructor parameters. Defaults point to Base mainnet CCTP V2 / USDC. USDC_ADDRESS=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 TOKEN_MESSENGER_V2_ADDRESS=0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d + +# Used by deploy:settlement:* scripts. +SETTLEMENT_FACTORY_ADDRESS= ETHEREUM_MINT_RECIPIENT= diff --git a/contracts/cctp-settlement/README.md b/contracts/cctp-settlement/README.md new file mode 100644 index 0000000000..7c901df702 --- /dev/null +++ b/contracts/cctp-settlement/README.md @@ -0,0 +1,82 @@ +# CCTP Settlement Contracts + +This Hardhat workspace contains the per-user USDC CCTP settlement PoC. + +## Deploy the factory on Base + +Configure `contracts/cctp-settlement/.env`: + +```env +PRIVATE_KEY=... +BASE_RPC_URL=... + +USDC_ADDRESS=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 +TOKEN_MESSENGER_V2_ADDRESS=0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d +``` + +Then deploy: + +```bash +cd contracts/cctp-settlement +bun run deploy:base +``` + +The deployed factory address is written to: + +```text +contracts/cctp-settlement/ignition/deployments/chain-8453/deployed_addresses.json +``` + +## Deploy a per-user settlement contract + +Add the factory address to `.env`: + +```env +SETTLEMENT_FACTORY_ADDRESS=0xYourFactoryAddress +``` + +Then pass the user's Ethereum mint recipient as the positional argument: + +```bash +cd contracts/cctp-settlement +bun run deploy:settlement:base -- 0xUserEthereumRecipient +``` + +Alternatively, put the recipient in `.env`: + +```env +ETHEREUM_MINT_RECIPIENT=0xUserEthereumRecipient +``` + +and run: + +```bash +bun run deploy:settlement:base +``` + +The command prints the transaction hash, the deployed settlement address, and the immutable Ethereum mint recipient. + +## Base Sepolia + +Use the Sepolia commands with Base Sepolia addresses in `.env`: + +```env +USDC_ADDRESS=0x036CbD53842c5426634e7929541eC2318f3dCF7e +TOKEN_MESSENGER_V2_ADDRESS=0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA +BASE_SEPOLIA_RPC_URL=... +``` + +```bash +bun run deploy:base-sepolia +bun run deploy:settlement:base-sepolia -- 0xUserEthereumRecipient +``` + +## Sweep USDC through CCTP forwarding + +After USDC is transferred to the per-user settlement contract, call: + +```solidity +sweepUsdc(usdcAmount, maxFee, minFinalityThreshold) +``` + +For Base → Ethereum, `minFinalityThreshold` can be `2000` for standard finality. Fetch `maxFee` from Circle's CCTP fee API with `forward=true`; it must cover the CCTP protocol fee and Forwarding Service fee. diff --git a/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol b/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol index e3b2a3dc2c..5caa58bf74 100644 --- a/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol +++ b/contracts/cctp-settlement/contracts/PerUserCctpSettlement.sol @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; +import {ITokenMessengerV2} from "./interfaces/ITokenMessengerV2.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; -import {ITokenMessengerV2} from "./interfaces/ITokenMessengerV2.sol"; - contract PerUserCctpSettlement is ReentrancyGuard { using SafeERC20 for IERC20; @@ -41,9 +40,9 @@ contract PerUserCctpSettlement is ReentrancyGuard { mintRecipientBytes32 = _addressToBytes32(_ethereumMintRecipient); } - function sweepUsdc(uint256 maxFee, uint32 minFinalityThreshold) external nonReentrant { - uint256 usdcAmount = usdc.balanceOf(address(this)); - require(usdcAmount > 0, "No USDC balance"); + function sweepUsdc(uint256 usdcAmount, uint256 maxFee, uint32 minFinalityThreshold) external nonReentrant { + require(usdcAmount > 0, "Invalid amount"); + require(usdc.balanceOf(address(this)) >= usdcAmount, "Insufficient USDC balance"); usdc.forceApprove(address(tokenMessenger), usdcAmount); diff --git a/contracts/cctp-settlement/hardhat.config.ts b/contracts/cctp-settlement/hardhat.config.ts index 2b6c21138d..cb5f976a63 100644 --- a/contracts/cctp-settlement/hardhat.config.ts +++ b/contracts/cctp-settlement/hardhat.config.ts @@ -1,4 +1,4 @@ -import { HardhatUserConfig } from "hardhat/config"; +import { HardhatUserConfig, task } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; import dotenv from "dotenv"; import path from "path"; @@ -8,6 +8,55 @@ dotenv.config({ path: path.resolve(__dirname, ".env") }); const RAW_PRIVATE_KEY = process.env.PRIVATE_KEY; const PRIVATE_KEY = RAW_PRIVATE_KEY ? (RAW_PRIVATE_KEY.startsWith("0x") ? RAW_PRIVATE_KEY : `0x${RAW_PRIVATE_KEY}`) : undefined; +function getRequiredAddress(value: string | undefined, name: string) { + if (!value) { + throw new Error(`${name} is required`); + } + + if (!/^0x[a-fA-F0-9]{40}$/.test(value)) { + throw new Error(`${name} must be a valid EVM address`); + } + + return value; +} + +task("deploy-settlement", "Deploy a per-user settlement contract from the configured factory") + .addOptionalPositionalParam("recipient", "Ethereum mint recipient address") + .setAction(async ({ recipient }, hre) => { + const factoryAddress = getRequiredAddress(process.env.SETTLEMENT_FACTORY_ADDRESS, "SETTLEMENT_FACTORY_ADDRESS"); + const ethereumMintRecipient = getRequiredAddress( + recipient || process.env.ETHEREUM_MINT_RECIPIENT, + "ETHEREUM_MINT_RECIPIENT" + ); + + const factory = await hre.ethers.getContractAt("PerUserCctpSettlementFactory", factoryAddress); + const tx = await factory.deploySettlement(ethereumMintRecipient); + + console.log("Deployment tx:", tx.hash); + + const receipt = await tx.wait(); + if (!receipt) { + throw new Error("Transaction was not mined"); + } + + for (const log of receipt.logs) { + try { + const parsedLog = factory.interface.parseLog(log); + + if (parsedLog?.name === "SettlementDeployed") { + console.log("Settlement address:", parsedLog.args.settlement); + console.log("Ethereum mint recipient:", parsedLog.args.ethereumMintRecipient); + return; + } + } catch (error) { + void error; + continue; + } + } + + throw new Error("SettlementDeployed event not found in transaction receipt"); + }); + const config: HardhatUserConfig = { networks: { base: { diff --git a/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts b/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts index b7a645e13c..d4fc7bbe4e 100644 --- a/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts +++ b/contracts/cctp-settlement/ignition/modules/CctpSettlement.ts @@ -8,14 +8,8 @@ const BASE_TOKEN_MESSENGER_V2 = "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"; export default buildModule(CCTP_SETTLEMENT_MODULE_NAME, m => { const usdc = m.getParameter("usdc", process.env.USDC_ADDRESS || BASE_USDC); const tokenMessenger = m.getParameter("tokenMessenger", process.env.TOKEN_MESSENGER_V2_ADDRESS || BASE_TOKEN_MESSENGER_V2); - if (!process.env.ETHEREUM_MINT_RECIPIENT) { - throw new Error("ETHEREUM_MINT_RECIPIENT must be set before deploying CctpSettlement"); - } - - const ethereumMintRecipient = m.getParameter("ethereumMintRecipient", process.env.ETHEREUM_MINT_RECIPIENT); const factory = m.contract("PerUserCctpSettlementFactory", [usdc, tokenMessenger]); - const settlement = m.contract("PerUserCctpSettlement", [usdc, tokenMessenger, ethereumMintRecipient]); - return { factory, settlement }; + return { factory }; }); diff --git a/contracts/cctp-settlement/package.json b/contracts/cctp-settlement/package.json index 42928f9fa4..6dd5cb017d 100644 --- a/contracts/cctp-settlement/package.json +++ b/contracts/cctp-settlement/package.json @@ -21,6 +21,8 @@ "compile": "hardhat compile", "deploy:base": "hardhat ignition deploy ignition/modules/CctpSettlement.ts --network base", "deploy:base-sepolia": "hardhat ignition deploy ignition/modules/CctpSettlement.ts --network baseSepolia", + "deploy:settlement:base": "hardhat deploy-settlement --network base", + "deploy:settlement:base-sepolia": "hardhat deploy-settlement --network baseSepolia", "node": "hardhat node", "test": "hardhat test" }, diff --git a/contracts/cctp-settlement/test/per-user-cctp-settlement.ts b/contracts/cctp-settlement/test/per-user-cctp-settlement.ts index 0a3bac0694..cc3f8f0f12 100644 --- a/contracts/cctp-settlement/test/per-user-cctp-settlement.ts +++ b/contracts/cctp-settlement/test/per-user-cctp-settlement.ts @@ -40,17 +40,24 @@ describe("PerUserCctpSettlement", () => { it("reverts when there is no USDC balance", async () => { const { settlement } = await deployFixture(); - await expect(settlement.sweepUsdc(0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWith("No USDC balance"); + await expect(settlement.sweepUsdc(1n, 0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWith("Insufficient USDC balance"); }); - it("sweeps the full USDC balance into CCTP forwarding with the immutable Ethereum recipient", async () => { + it("reverts when the requested sweep amount is zero", async () => { + const { settlement } = await deployFixture(); + + await expect(settlement.sweepUsdc(0, 0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWith("Invalid amount"); + }); + + it("sweeps the requested USDC amount into CCTP forwarding with the immutable Ethereum recipient", async () => { const { caller, recipient, settlement, tokenMessenger, usdc } = await deployFixture(); const amount = 1_000_000n; + const remainingAmount = 500_000n; const maxFee = 1_000n; - await usdc.mint(await settlement.getAddress(), amount); + await usdc.mint(await settlement.getAddress(), amount + remainingAmount); - await expect(settlement.connect(caller).sweepUsdc(maxFee, STANDARD_FINALITY_THRESHOLD)) + await expect(settlement.connect(caller).sweepUsdc(amount, maxFee, STANDARD_FINALITY_THRESHOLD)) .to.emit(settlement, "UsdcSweptAndForwarded") .withArgs( caller.address, @@ -75,7 +82,7 @@ describe("PerUserCctpSettlement", () => { FORWARD_HOOK_DATA ); - expect(await usdc.balanceOf(await settlement.getAddress())).to.equal(0n); + expect(await usdc.balanceOf(await settlement.getAddress())).to.equal(remainingAmount); expect(await usdc.balanceOf(await tokenMessenger.getAddress())).to.equal(amount); const burnCall = await tokenMessenger.lastBurnCall(); @@ -90,11 +97,21 @@ describe("PerUserCctpSettlement", () => { expect(burnCall.depositor).to.equal(await settlement.getAddress()); }); + it("reverts when the requested sweep amount exceeds the USDC balance", async () => { + const { settlement, usdc } = await deployFixture(); + + await usdc.mint(await settlement.getAddress(), 1_000_000n); + + await expect(settlement.sweepUsdc(1_000_001n, 0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWith( + "Insufficient USDC balance" + ); + }); + it("revokes the TokenMessenger allowance after a successful burn", async () => { const { settlement, tokenMessenger, usdc } = await deployFixture(); await usdc.mint(await settlement.getAddress(), 1_000_000n); - await settlement.sweepUsdc(0, STANDARD_FINALITY_THRESHOLD); + await settlement.sweepUsdc(1_000_000n, 0, STANDARD_FINALITY_THRESHOLD); expect(await usdc.allowance(await settlement.getAddress(), await tokenMessenger.getAddress())).to.equal(0n); }); @@ -105,10 +122,10 @@ describe("PerUserCctpSettlement", () => { await usdc.mint(await settlement.getAddress(), 1_000_000n); await tokenMessenger.setReenter( await settlement.getAddress(), - settlement.interface.encodeFunctionData("sweepUsdc", [0, STANDARD_FINALITY_THRESHOLD]) + settlement.interface.encodeFunctionData("sweepUsdc", [1_000_000n, 0, STANDARD_FINALITY_THRESHOLD]) ); - await expect(settlement.sweepUsdc(0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWithCustomError( + await expect(settlement.sweepUsdc(1_000_000n, 0, STANDARD_FINALITY_THRESHOLD)).to.be.revertedWithCustomError( settlement, "ReentrancyGuardReentrantCall" ); diff --git a/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md b/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md index da57c69ba4..113654cedb 100644 --- a/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md +++ b/docs/security-spec/04-smart-contracts/per-user-cctp-settlement.md @@ -2,7 +2,7 @@ ## What This Does -`PerUserCctpSettlement.sol` is a first-iteration proof of concept for customer-specific settlement contracts on Base. It deliberately skips the future EURC→USDC swap step and assumes the contract already holds Base USDC. Anyone may call `sweepUsdc()`, which burns the contract's full USDC balance through Circle CCTP V2 with the Forwarding Service hook so Circle handles the destination-chain mint transaction to the immutable Ethereum recipient configured at deployment. +`PerUserCctpSettlement.sol` is a first-iteration proof of concept for customer-specific settlement contracts on Base. It deliberately skips the future EURC→USDC swap step and assumes the contract already holds Base USDC. Anyone may call `sweepUsdc(amount, maxFee, minFinalityThreshold)`, which burns the requested USDC amount through Circle CCTP V2 with the Forwarding Service hook so Circle handles the destination-chain mint transaction to the immutable Ethereum recipient configured at deployment. The PoC also includes `PerUserCctpSettlementFactory.sol`, which deploys per-user settlement contracts with shared immutable USDC and TokenMessenger addresses. @@ -11,8 +11,8 @@ The PoC also includes `PerUserCctpSettlementFactory.sol`, which deploys per-user 1. **The Ethereum mint recipient MUST be immutable** — The recipient is constructor-set and exposed only through read-only getters. There is no setter or upgrade path. 2. **The contract MUST NOT expose admin withdrawal of USDC** — USDC can only leave through `TokenMessengerV2.depositForBurnWithHook()` with the immutable mint recipient. 3. **The contract MUST NOT expose arbitrary external calls** — The only external protocol call is the configured CCTP TokenMessenger's `depositForBurnWithHook()` function. -4. **Sweeps MUST burn the full current USDC balance** — The PoC does not support partial withdrawals or operator-selected recipients. -5. **CCTP approvals MUST be exact and temporary** — The contract approves exactly the current USDC balance to the TokenMessenger and resets the allowance to zero after a successful burn. +4. **Sweeps MUST burn only the explicitly requested USDC amount** — The caller supplies the burn amount, and the contract reverts if the amount is zero or exceeds the contract's USDC balance. +5. **CCTP approvals MUST be exact and temporary** — The contract approves exactly the requested USDC amount to the TokenMessenger and resets the allowance to zero after a successful burn. 6. **Sweep execution MUST be non-reentrant** — `sweepUsdc()` uses `ReentrancyGuard` because both the ERC-20 and TokenMessenger calls are external. 7. **Destination domain MUST be Ethereum** — The destination domain is hardcoded to Circle domain `0`; Base is the source deployment chain for the intended PoC. 8. **Forwarding Service MUST use Circle's reserved hook data and no destination caller** — The hook data is the static `cctp-forward` payload and `destinationCaller` is always `bytes32(0)`, because Circle forwarding does not support wrapper/authorized-caller flows. @@ -23,7 +23,7 @@ The PoC also includes `PerUserCctpSettlementFactory.sol`, which deploys per-user |---|---| | **Recipient redirection** — An operator tries to change the Ethereum payout wallet after funds arrive. | The recipient is immutable and there is no setter, owner, proxy, or arbitrary execution path. | | **Admin drain** — A deployer or owner withdraws USDC instead of burning it to the user. | The contract has no owner and no token/native withdrawal functions. | -| **Approval drain** — TokenMessenger or a compromised spender uses leftover allowance later. | The approval is for the exact sweep amount and is revoked after `depositForBurn()` succeeds. | +| **Approval drain** — TokenMessenger or a compromised spender uses leftover allowance later. | The approval is for the exact requested sweep amount and is revoked after `depositForBurnWithHook()` succeeds. | | **Reentrant burn attempt** — A malicious mock/token/protocol reenters `sweepUsdc()` during the burn path. | `sweepUsdc()` is guarded by OpenZeppelin `ReentrancyGuard`. | | **Wrong CCTP parameters** — Funds are burned with an incorrect destination domain, token, recipient, hook data, or destination caller. | Domain, forwarding hook data, and zero destination caller are constants; USDC, TokenMessenger, and recipient are constructor-set. Tests assert the exact parameters passed to the TokenMessenger mock. | | **Insufficient forwarding fee** — The provided `maxFee` is too low for CCTP and forwarding execution. | The TokenMessenger reverts or forwarding falls back according to Circle's fee rules. Callers must fetch a fresh Circle fee estimate and pass a sufficient `maxFee`; the contract does not hardcode forwarding fees. | @@ -33,7 +33,7 @@ The PoC also includes `PerUserCctpSettlementFactory.sol`, which deploys per-user - [x] Verify `ethereumMintRecipient` and `mintRecipientBytes32` are immutable and cannot be changed after deployment. - [x] Verify there is no `withdrawToken`, `withdrawETH`, `execute`, `delegatecall`, or generic call surface. -- [x] Verify `sweepUsdc()` reads `usdc.balanceOf(address(this))` and reverts when the balance is zero. +- [x] Verify `sweepUsdc()` reverts when the requested amount is zero or exceeds the USDC balance. - [x] Verify `depositForBurnWithHook()` receives destination domain `0`, the immutable recipient bytes32, zero destination caller, the immutable USDC address, and the static forwarding hook data. - [x] Verify approval to the TokenMessenger is exact and reset to zero after success. - [x] Verify reentrant calls to `sweepUsdc()` fail. From eedf6eaa89531b25a334d8d124db2927b45b87ad Mon Sep 17 00:00:00 2001 From: Marcel Ebert Date: Thu, 25 Jun 2026 11:05:15 +0200 Subject: [PATCH 6/6] Add script to interact with settlement contract --- contracts/cctp-settlement/.env.example | 7 + contracts/cctp-settlement/README.md | 51 +- contracts/cctp-settlement/hardhat.config.ts | 150 + ...ment#PerUserCctpSettlementFactory.dbg.json | 4 + ...ttlement#PerUserCctpSettlementFactory.json | 91 + .../7569859a0eac12594a94c5b5ed7261c9.json | 54207 ++++++++++++++++ .../chain-8453/deployed_addresses.json | 3 + .../deployments/chain-8453/journal.jsonl | 8 + contracts/cctp-settlement/package.json | 2 + 9 files changed, 54521 insertions(+), 2 deletions(-) create mode 100644 contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.dbg.json create mode 100644 contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.json create mode 100644 contracts/cctp-settlement/ignition/deployments/chain-8453/build-info/7569859a0eac12594a94c5b5ed7261c9.json create mode 100644 contracts/cctp-settlement/ignition/deployments/chain-8453/deployed_addresses.json create mode 100644 contracts/cctp-settlement/ignition/deployments/chain-8453/journal.jsonl diff --git a/contracts/cctp-settlement/.env.example b/contracts/cctp-settlement/.env.example index a7c42a8bf1..2e252c6389 100644 --- a/contracts/cctp-settlement/.env.example +++ b/contracts/cctp-settlement/.env.example @@ -10,3 +10,10 @@ TOKEN_MESSENGER_V2_ADDRESS=0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d # Used by deploy:settlement:* scripts. SETTLEMENT_FACTORY_ADDRESS= ETHEREUM_MINT_RECIPIENT= + +# Used by sweep:* scripts. +SETTLEMENT_ADDRESS= +SWEEP_USDC_AMOUNT= +CCTP_MIN_FINALITY_THRESHOLD=2000 +CCTP_FEE_TIER=medium +CCTP_MAX_FEE= diff --git a/contracts/cctp-settlement/README.md b/contracts/cctp-settlement/README.md index 7c901df702..c7e8dea04d 100644 --- a/contracts/cctp-settlement/README.md +++ b/contracts/cctp-settlement/README.md @@ -73,10 +73,57 @@ bun run deploy:settlement:base-sepolia -- 0xUserEthereumRecipient ## Sweep USDC through CCTP forwarding -After USDC is transferred to the per-user settlement contract, call: +After USDC is transferred to the per-user settlement contract, add the settlement address to `.env`: + +```env +SETTLEMENT_ADDRESS=0xYourSettlementAddress +``` + +Then run: + +```bash +bun run sweep:base -- --amount 10.5 +``` + +`--amount` is the total USDC amount to burn, in normal decimal USDC units. The recipient receives this amount minus the actual CCTP and Forwarding Service fees. + +By default the task uses: + +```text +minFinalityThreshold = 2000 +feeTier = medium +``` + +and fetches `maxFee` from Circle's CCTP fee API with `forward=true` immediately before submitting the transaction. + +You can override those values: + +```bash +bun run sweep:base -- --amount 10.5 --finality 1000 --fee-tier high +``` + +If you already have a fee quote, pass the raw USDC subunit value directly: + +```bash +bun run sweep:base -- --amount 10.5 --max-fee 250000 +``` + +You can also pass the settlement address as a positional argument instead of using `.env`: + +```bash +bun run sweep:base -- 0xYourSettlementAddress --amount 10.5 +``` + +The underlying contract call is: ```solidity sweepUsdc(usdcAmount, maxFee, minFinalityThreshold) ``` -For Base → Ethereum, `minFinalityThreshold` can be `2000` for standard finality. Fetch `maxFee` from Circle's CCTP fee API with `forward=true`; it must cover the CCTP protocol fee and Forwarding Service fee. +For Base → Ethereum, `minFinalityThreshold` can be `2000` for standard finality or `1000` for fast transfer eligibility. Circle recommends using the `medium` fee tier or higher and querying the fee API immediately before sweeping because forwarding fees fluctuate with destination-chain gas. + +If you see `Error HH700: Artifact for contract "PerUserCctpSettlement" not found`, the local Hardhat artifacts are missing. The deployment and sweep tasks run `compile` automatically, so rerunning the same command should regenerate them. You can also run this manually: + +```bash +bun run compile +``` diff --git a/contracts/cctp-settlement/hardhat.config.ts b/contracts/cctp-settlement/hardhat.config.ts index cb5f976a63..26b7ebef9a 100644 --- a/contracts/cctp-settlement/hardhat.config.ts +++ b/contracts/cctp-settlement/hardhat.config.ts @@ -20,9 +20,106 @@ function getRequiredAddress(value: string | undefined, name: string) { return value; } +function getOptionalAddress(value: string | undefined, name: string) { + if (!value) { + return undefined; + } + + return getRequiredAddress(value, name); +} + +function getRequiredValue(value: string | undefined, name: string) { + if (!value) { + throw new Error(`${name} is required`); + } + + return value; +} + +function parseUint32(value: string, name: string) { + if (!/^\d+$/.test(value)) { + throw new Error(`${name} must be an unsigned integer`); + } + + const parsed = Number(value); + if (!Number.isSafeInteger(parsed) || parsed > 2 ** 32 - 1) { + throw new Error(`${name} must fit in uint32`); + } + + return parsed; +} + +function getIrisApiBaseUrl(networkName: string) { + return networkName === "baseSepolia" || networkName === "hardhat" + ? "https://iris-api-sandbox.circle.com" + : "https://iris-api.circle.com"; +} + +type CctpFeeTier = "low" | "medium" | "med" | "high"; + +type CctpFeeQuote = { + finalityThreshold: number; + minimumFee: number; + forwardFee?: Partial>; +}; + +function isCctpFeeQuote(value: unknown): value is CctpFeeQuote { + if (typeof value !== "object" || value === null) { + return false; + } + + const candidate = value as Record; + + return typeof candidate.finalityThreshold === "number" && typeof candidate.minimumFee === "number"; +} + +function getForwardFee(quote: CctpFeeQuote, tier: CctpFeeTier) { + const forwardFee = quote.forwardFee; + if (!forwardFee) { + throw new Error("Circle fee quote did not include forwardFee; ensure the request uses forward=true"); + } + + const normalizedTier = tier === "med" ? "medium" : tier; + const fee = forwardFee[normalizedTier] ?? (normalizedTier === "medium" ? forwardFee.med : undefined); + + if (fee === undefined) { + throw new Error(`Circle fee quote did not include forwardFee.${normalizedTier}`); + } + + return BigInt(fee); +} + +async function quoteCctpMaxFee(networkName: string, usdcAmount: bigint, minFinalityThreshold: number, feeTier: CctpFeeTier) { + const sourceDomain = 6; + const destinationDomain = 0; + const feesUrl = `${getIrisApiBaseUrl(networkName)}/v2/burn/USDC/fees/${sourceDomain}/${destinationDomain}?forward=true`; + + const response = await fetch(feesUrl, { headers: { "Content-Type": "application/json" } }); + if (!response.ok) { + throw new Error(`Circle fee request failed with HTTP ${response.status}: ${await response.text()}`); + } + + const feeQuotes = (await response.json()) as unknown; + if (!Array.isArray(feeQuotes)) { + throw new Error("Circle fee response was not an array"); + } + + const quote = feeQuotes.filter(isCctpFeeQuote).find(item => item.finalityThreshold === minFinalityThreshold); + if (!quote) { + throw new Error(`Circle fee response did not include finalityThreshold ${minFinalityThreshold}`); + } + + const forwardFee = getForwardFee(quote, feeTier); + const protocolFee = (usdcAmount * BigInt(Math.round(quote.minimumFee * 100))) / 1_000_000n; + + return { feesUrl, forwardFee, maxFee: forwardFee + protocolFee, protocolFee }; +} + task("deploy-settlement", "Deploy a per-user settlement contract from the configured factory") .addOptionalPositionalParam("recipient", "Ethereum mint recipient address") .setAction(async ({ recipient }, hre) => { + await hre.run("compile"); + const factoryAddress = getRequiredAddress(process.env.SETTLEMENT_FACTORY_ADDRESS, "SETTLEMENT_FACTORY_ADDRESS"); const ethereumMintRecipient = getRequiredAddress( recipient || process.env.ETHEREUM_MINT_RECIPIENT, @@ -57,6 +154,59 @@ task("deploy-settlement", "Deploy a per-user settlement contract from the config throw new Error("SettlementDeployed event not found in transaction receipt"); }); +task("sweep-usdc", "Sweep USDC from a deployed settlement contract through CCTP forwarding") + .addOptionalPositionalParam("settlement", "PerUserCctpSettlement contract address") + .addOptionalParam("amount", "USDC amount to burn, in decimal USDC units") + .addOptionalParam("maxFee", "CCTP maxFee in raw USDC subunits; if omitted, Circle's forwarding fee API is used") + .addOptionalParam("finality", "CCTP minFinalityThreshold", process.env.CCTP_MIN_FINALITY_THRESHOLD || "2000") + .addOptionalParam("feeTier", "Forwarding fee tier: low, medium/med, or high", process.env.CCTP_FEE_TIER || "medium") + .setAction(async ({ amount, feeTier, finality, maxFee, settlement }, hre) => { + await hre.run("compile"); + + const settlementAddress = getRequiredAddress( + getOptionalAddress(settlement, "settlement") || process.env.SETTLEMENT_ADDRESS, + "SETTLEMENT_ADDRESS" + ); + const usdcAmount = hre.ethers.parseUnits(getRequiredValue(amount || process.env.SWEEP_USDC_AMOUNT, "SWEEP_USDC_AMOUNT"), 6); + const minFinalityThreshold = parseUint32(finality, "minFinalityThreshold"); + const normalizedFeeTier = (feeTier === "med" ? "medium" : feeTier) as CctpFeeTier; + + if (!["low", "medium", "high"].includes(normalizedFeeTier)) { + throw new Error("feeTier must be one of: low, medium, med, high"); + } + + let resolvedMaxFee: bigint; + + if (maxFee || process.env.CCTP_MAX_FEE) { + resolvedMaxFee = BigInt(maxFee || process.env.CCTP_MAX_FEE || "0"); + console.log("Using explicit maxFee:", resolvedMaxFee.toString(), "raw USDC subunits"); + } else { + const quote = await quoteCctpMaxFee(hre.network.name, usdcAmount, minFinalityThreshold, normalizedFeeTier); + resolvedMaxFee = quote.maxFee; + + console.log("Circle fee URL:", quote.feesUrl); + console.log("Forwarding fee:", quote.forwardFee.toString(), "raw USDC subunits"); + console.log("Protocol fee:", quote.protocolFee.toString(), "raw USDC subunits"); + console.log("Resolved maxFee:", resolvedMaxFee.toString(), "raw USDC subunits"); + } + + const settlementContract = await hre.ethers.getContractAt("PerUserCctpSettlement", settlementAddress); + + console.log("Settlement:", settlementAddress); + console.log("Burn amount:", usdcAmount.toString(), "raw USDC subunits"); + console.log("Minimum finality threshold:", minFinalityThreshold); + + const tx = await settlementContract.sweepUsdc(usdcAmount, resolvedMaxFee, minFinalityThreshold); + console.log("Sweep tx:", tx.hash); + + const receipt = await tx.wait(); + if (!receipt) { + throw new Error("Transaction was not mined"); + } + + console.log("Sweep confirmed in block:", receipt.blockNumber); + }); + const config: HardhatUserConfig = { networks: { base: { diff --git a/contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.dbg.json b/contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.dbg.json new file mode 100644 index 0000000000..27e41f881f --- /dev/null +++ b/contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/7569859a0eac12594a94c5b5ed7261c9.json" +} diff --git a/contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.json b/contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.json new file mode 100644 index 0000000000..50d9d57ce0 --- /dev/null +++ b/contracts/cctp-settlement/ignition/deployments/chain-8453/artifacts/CctpSettlement#PerUserCctpSettlementFactory.json @@ -0,0 +1,91 @@ +{ + "_format": "hh-sol-artifact-1", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_usdc", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenMessenger", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "settlement", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "ethereumMintRecipient", + "type": "address" + } + ], + "name": "SettlementDeployed", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethereumMintRecipient", + "type": "address" + } + ], + "name": "deploySettlement", + "outputs": [ + { + "internalType": "address", + "name": "settlement", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tokenMessenger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "usdc", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60c060405234801561000f575f5ffd5b50604051610ce5380380610ce583398101604081905261002e916100f4565b6001600160a01b0382166100785760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0381166100c25760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b604482015260640161006f565b6001600160a01b039182166080521660a052610125565b80516001600160a01b03811681146100ef575f5ffd5b919050565b5f5f60408385031215610105575f5ffd5b61010e836100d9565b915061011c602084016100d9565b90509250929050565b60805160a051610b956101505f395f8181608b015260df01525f81816048015260be0152610b955ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80633e413bee146100435780634611783014610086578063ada7ee88146100ad575b5f5ffd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b61006a6100bb366004610199565b5f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008360405161010b9061018c565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015610144573d5f5f3e3d5ffd5b509050816001600160a01b0316816001600160a01b03167fe2bfc35fa05117daee61105a0b06dde9b00b3f98c90eb430a7d5a05f1dc994d660405160405180910390a3919050565b610999806101c783390190565b5f602082840312156101a9575f5ffd5b81356001600160a01b03811681146101bf575f5ffd5b939250505056fe610100604052348015610010575f5ffd5b5060405161099938038061099983398101604081905261002f9161016e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03831661009d5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0382166100e75760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b6044820152606401610094565b6001600160a01b0381166101315760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610094565b6001600160a01b0392831660805290821660a0521660c081905260e0526101ae565b80516001600160a01b0381168114610169575f5ffd5b919050565b5f5f5f60608486031215610180575f5ffd5b61018984610153565b925061019760208501610153565b91506101a560408501610153565b90509250925092565b60805160a05160c05160e05161077c61021d5f395f818161016701528181610348015261047701525f608e01525f818160f9015281816102f001528181610317015261044101525f818160d201528181610202015281816102ce01528181610369015261041d015261077c5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063acef1c5711610058578063acef1c5714610130578063c6db9c871461014c578063c74ee95714610162578063dccf984614610189575f5ffd5b806309bdf150146100895780633e413bee146100cd57806346117830146100f457806362cef4b91461011b575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6101225f81565b6040519081526020016100c4565b6101375f81565b60405163ffffffff90911681526020016100c4565b6101226b18d8dd1c0b599bdc9dd85c9960a21b81565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b61019c610197366004610672565b61019e565b005b6101a6610524565b5f83116101eb5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561024f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027391906106b0565b10156102c15760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420555344432062616c616e63650000000000000060448201526064016101e2565b6103156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610552565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663779b432d845f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f5f1b88886b18d8dd1c0b599bdc9dd85c9960a21b5f1b6040516020016103b191815260200190565b6040516020818303038152906040526040518963ffffffff1660e01b81526004016103e39897969594939291906106c7565b5f604051808303815f87803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b506104669250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000005f610552565b604080518481525f602082018190527f00000000000000000000000000000000000000000000000000000000000000008284015260608201526080810184905263ffffffff831660a08201526b18d8dd1c0b599bdc9dd85c9960a21b60c0820152905133917f3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6919081900360e00190a261051f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b61052c6105cc565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61055e8383835f610610565b61051f5761056f83835f6001610610565b61059757604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b6105a48383836001610610565b61051f57604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361060e57604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661066657838315161561065a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f5f5f60608486031215610684575f5ffd5b8335925060208401359150604084013563ffffffff811681146106a5575f5ffd5b809150509250925092565b5f602082840312156106c0575f5ffd5b5051919050565b88815263ffffffff8816602082015286604082015260018060a01b03861660608201528460808201528360a082015263ffffffff831660c082015261010060e08201525f825180610100840152806020850161012085015e5f6101208285010152610120601f19601f830116840101915050999850505050505050505056fea2646970667358221220b76c50a6e2d835a1079f67de279f46d3362268b2a2daa5b5e1a88be179ff8e9164736f6c634300081c0033a264697066735822122028f11a1d2c5b9fe443e13fa13bed25a04fa72f1b95484d50d1d7d416100402bf64736f6c634300081c0033", + "contractName": "PerUserCctpSettlementFactory", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80633e413bee146100435780634611783014610086578063ada7ee88146100ad575b5f5ffd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b61006a6100bb366004610199565b5f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008360405161010b9061018c565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015610144573d5f5f3e3d5ffd5b509050816001600160a01b0316816001600160a01b03167fe2bfc35fa05117daee61105a0b06dde9b00b3f98c90eb430a7d5a05f1dc994d660405160405180910390a3919050565b610999806101c783390190565b5f602082840312156101a9575f5ffd5b81356001600160a01b03811681146101bf575f5ffd5b939250505056fe610100604052348015610010575f5ffd5b5060405161099938038061099983398101604081905261002f9161016e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03831661009d5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0382166100e75760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b6044820152606401610094565b6001600160a01b0381166101315760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610094565b6001600160a01b0392831660805290821660a0521660c081905260e0526101ae565b80516001600160a01b0381168114610169575f5ffd5b919050565b5f5f5f60608486031215610180575f5ffd5b61018984610153565b925061019760208501610153565b91506101a560408501610153565b90509250925092565b60805160a05160c05160e05161077c61021d5f395f818161016701528181610348015261047701525f608e01525f818160f9015281816102f001528181610317015261044101525f818160d201528181610202015281816102ce01528181610369015261041d015261077c5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063acef1c5711610058578063acef1c5714610130578063c6db9c871461014c578063c74ee95714610162578063dccf984614610189575f5ffd5b806309bdf150146100895780633e413bee146100cd57806346117830146100f457806362cef4b91461011b575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6101225f81565b6040519081526020016100c4565b6101375f81565b60405163ffffffff90911681526020016100c4565b6101226b18d8dd1c0b599bdc9dd85c9960a21b81565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b61019c610197366004610672565b61019e565b005b6101a6610524565b5f83116101eb5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561024f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027391906106b0565b10156102c15760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420555344432062616c616e63650000000000000060448201526064016101e2565b6103156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610552565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663779b432d845f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f5f1b88886b18d8dd1c0b599bdc9dd85c9960a21b5f1b6040516020016103b191815260200190565b6040516020818303038152906040526040518963ffffffff1660e01b81526004016103e39897969594939291906106c7565b5f604051808303815f87803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b506104669250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000005f610552565b604080518481525f602082018190527f00000000000000000000000000000000000000000000000000000000000000008284015260608201526080810184905263ffffffff831660a08201526b18d8dd1c0b599bdc9dd85c9960a21b60c0820152905133917f3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6919081900360e00190a261051f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b61052c6105cc565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61055e8383835f610610565b61051f5761056f83835f6001610610565b61059757604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b6105a48383836001610610565b61051f57604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361060e57604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661066657838315161561065a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f5f5f60608486031215610684575f5ffd5b8335925060208401359150604084013563ffffffff811681146106a5575f5ffd5b809150509250925092565b5f602082840312156106c0575f5ffd5b5051919050565b88815263ffffffff8816602082015286604082015260018060a01b03861660608201528460808201528360a082015263ffffffff831660c082015261010060e08201525f825180610100840152806020850161012085015e5f6101208285010152610120601f19601f830116840101915050999850505050505050505056fea2646970667358221220b76c50a6e2d835a1079f67de279f46d3362268b2a2daa5b5e1a88be179ff8e9164736f6c634300081c0033a264697066735822122028f11a1d2c5b9fe443e13fa13bed25a04fa72f1b95484d50d1d7d416100402bf64736f6c634300081c0033", + "deployedLinkReferences": {}, + "linkReferences": {}, + "sourceName": "contracts/PerUserCctpSettlementFactory.sol" +} diff --git a/contracts/cctp-settlement/ignition/deployments/chain-8453/build-info/7569859a0eac12594a94c5b5ed7261c9.json b/contracts/cctp-settlement/ignition/deployments/chain-8453/build-info/7569859a0eac12594a94c5b5ed7261c9.json new file mode 100644 index 0000000000..4f638f0aa9 --- /dev/null +++ b/contracts/cctp-settlement/ignition/deployments/chain-8453/build-info/7569859a0eac12594a94c5b5ed7261c9.json @@ -0,0 +1,54207 @@ +{ + "_format": "hh-sol-build-info-1", + "id": "7569859a0eac12594a94c5b5ed7261c9", + "input": { + "language": "Solidity", + "settings": { + "evmVersion": "cancun", + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "": ["ast"], + "*": ["abi", "evm.bytecode", "evm.deployedBytecode", "evm.methodIdentifiers", "metadata"] + } + } + }, + "sources": { + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (interfaces/draft-IERC6093.sol)\n\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n mapping(address account => uint256) private _balances;\n\n mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * Both values are immutable: they can only be set once during construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the default value returned by this function, unless\n * it's overridden.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return 18;\n }\n\n /// @inheritdoc IERC20\n function totalSupply() public view virtual returns (uint256) {\n return _totalSupply;\n }\n\n /// @inheritdoc IERC20\n function balanceOf(address account) public view virtual returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - the caller must have a balance of at least `value`.\n */\n function transfer(address to, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _transfer(owner, to, value);\n return true;\n }\n\n /// @inheritdoc IERC20\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n * `transferFrom`. This is semantically equivalent to an infinite approval.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _approve(owner, spender, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Skips emitting an {Approval} event indicating an allowance update. This is not\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n *\n * NOTE: Does not update the allowance if the current allowance\n * is the maximum `uint256`.\n *\n * Requirements:\n *\n * - `from` and `to` cannot be the zero address.\n * - `from` must have a balance of at least `value`.\n * - the caller must have allowance for ``from``'s tokens of at least\n * `value`.\n */\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n address spender = _msgSender();\n _spendAllowance(from, spender, value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _transfer(address from, address to, uint256 value) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n if (to == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(from, to, value);\n }\n\n /**\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n * this function.\n *\n * Emits a {Transfer} event.\n */\n function _update(address from, address to, uint256 value) internal virtual {\n if (from == address(0)) {\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\n _totalSupply += value;\n } else {\n uint256 fromBalance = _balances[from];\n if (fromBalance < value) {\n revert ERC20InsufficientBalance(from, fromBalance, value);\n }\n unchecked {\n // Overflow not possible: value <= fromBalance <= totalSupply.\n _balances[from] = fromBalance - value;\n }\n }\n\n if (to == address(0)) {\n unchecked {\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n _totalSupply -= value;\n }\n } else {\n unchecked {\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n _balances[to] += value;\n }\n }\n\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n * Relies on the `_update` mechanism\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _mint(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(address(0), account, value);\n }\n\n /**\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n * Relies on the `_update` mechanism.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead\n */\n function _burn(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n _update(account, address(0), value);\n }\n\n /**\n * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n _approve(owner, spender, value, true);\n }\n\n /**\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n *\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n * `_spendAllowance` during the `transferFrom` operation sets the flag to false. This saves gas by not emitting any\n * `Approval` event during `transferFrom` operations.\n *\n * Anyone who wishes to continue emitting `Approval` events on the `transferFrom` operation can force the flag to\n * true using the following override:\n *\n * ```solidity\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n * super._approve(owner, spender, value, true);\n * }\n * ```\n *\n * Requirements are the same as {_approve}.\n */\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(address(0));\n }\n if (spender == address(0)) {\n revert ERC20InvalidSpender(address(0));\n }\n _allowances[owner][spender] = value;\n if (emitEvent) {\n emit Approval(owner, spender, value);\n }\n }\n\n /**\n * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n *\n * Does not update the allowance value in case of infinite allowance.\n * Revert if not enough allowance is available.\n *\n * Does not emit an {Approval} event.\n */\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance < type(uint256).max) {\n if (currentAllowance < value) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n }\n unchecked {\n _approve(owner, spender, currentAllowance - value, false);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n if (!_safeTransfer(token, to, value, true)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n if (!_safeTransferFrom(token, from, to, value, true)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {\n return _safeTransfer(token, to, value, false);\n }\n\n /**\n * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {\n return _safeTransferFrom(token, from, to, value, false);\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n if (!_safeApprove(token, spender, value, false)) {\n if (!_safeApprove(token, spender, 0, true)) revert SafeERC20FailedOperation(address(token));\n if (!_safeApprove(token, spender, value, true)) revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that relies on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that relies on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Oppositely, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity `token.transfer(to, value)` call, relaxing the requirement on the return value: the\n * return value is optional (but if data is returned, it must not be false).\n *\n * @param token The token targeted by the call.\n * @param to The recipient of the tokens\n * @param value The amount of token to transfer\n * @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean.\n */\n function _safeTransfer(IERC20 token, address to, uint256 value, bool bubble) private returns (bool success) {\n bytes4 selector = IERC20.transfer.selector;\n\n assembly (\"memory-safe\") {\n let fmp := mload(0x40)\n mstore(0x00, selector)\n mstore(0x04, and(to, shr(96, not(0))))\n mstore(0x24, value)\n success := call(gas(), token, 0, 0x00, 0x44, 0x00, 0x20)\n // if call success and return is true, all is good.\n // otherwise (not success or return is not true), we need to perform further checks\n if iszero(and(success, eq(mload(0x00), 1))) {\n // if the call was a failure and bubble is enabled, bubble the error\n if and(iszero(success), bubble) {\n returndatacopy(fmp, 0x00, returndatasize())\n revert(fmp, returndatasize())\n }\n // if the return value is not true, then the call is only successful if:\n // - the token address has code\n // - the returndata is empty\n success := and(success, and(iszero(returndatasize()), gt(extcodesize(token), 0)))\n }\n mstore(0x40, fmp)\n }\n }\n\n /**\n * @dev Imitates a Solidity `token.transferFrom(from, to, value)` call, relaxing the requirement on the return\n * value: the return value is optional (but if data is returned, it must not be false).\n *\n * @param token The token targeted by the call.\n * @param from The sender of the tokens\n * @param to The recipient of the tokens\n * @param value The amount of token to transfer\n * @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean.\n */\n function _safeTransferFrom(\n IERC20 token,\n address from,\n address to,\n uint256 value,\n bool bubble\n ) private returns (bool success) {\n bytes4 selector = IERC20.transferFrom.selector;\n\n assembly (\"memory-safe\") {\n let fmp := mload(0x40)\n mstore(0x00, selector)\n mstore(0x04, and(from, shr(96, not(0))))\n mstore(0x24, and(to, shr(96, not(0))))\n mstore(0x44, value)\n success := call(gas(), token, 0, 0x00, 0x64, 0x00, 0x20)\n // if call success and return is true, all is good.\n // otherwise (not success or return is not true), we need to perform further checks\n if iszero(and(success, eq(mload(0x00), 1))) {\n // if the call was a failure and bubble is enabled, bubble the error\n if and(iszero(success), bubble) {\n returndatacopy(fmp, 0x00, returndatasize())\n revert(fmp, returndatasize())\n }\n // if the return value is not true, then the call is only successful if:\n // - the token address has code\n // - the returndata is empty\n success := and(success, and(iszero(returndatasize()), gt(extcodesize(token), 0)))\n }\n mstore(0x40, fmp)\n mstore(0x60, 0)\n }\n }\n\n /**\n * @dev Imitates a Solidity `token.approve(spender, value)` call, relaxing the requirement on the return value:\n * the return value is optional (but if data is returned, it must not be false).\n *\n * @param token The token targeted by the call.\n * @param spender The spender of the tokens\n * @param value The amount of token to transfer\n * @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean.\n */\n function _safeApprove(IERC20 token, address spender, uint256 value, bool bubble) private returns (bool success) {\n bytes4 selector = IERC20.approve.selector;\n\n assembly (\"memory-safe\") {\n let fmp := mload(0x40)\n mstore(0x00, selector)\n mstore(0x04, and(spender, shr(96, not(0))))\n mstore(0x24, value)\n success := call(gas(), token, 0, 0x00, 0x44, 0x00, 0x20)\n // if call success and return is true, all is good.\n // otherwise (not success or return is not true), we need to perform further checks\n if iszero(and(success, eq(mload(0x00), 1))) {\n // if the call was a failure and bubble is enabled, bubble the error\n if and(iszero(success), bubble) {\n returndatacopy(fmp, 0x00, returndatasize())\n revert(fmp, returndatasize())\n }\n // if the return value is not true, then the call is only successful if:\n // - the token address has code\n // - the returndata is empty\n success := and(success, and(iszero(returndatasize()), gt(extcodesize(token), 0)))\n }\n mstore(0x40, fmp)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/utils/ReentrancyGuard.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\nimport {StorageSlot} from \"./StorageSlot.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n * consider using {ReentrancyGuardTransient} instead.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n *\n * IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced\n * by the {ReentrancyGuardTransient} variant in v6.0.\n *\n * @custom:stateless\n */\nabstract contract ReentrancyGuard {\n using StorageSlot for bytes32;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant NOT_ENTERED = 1;\n uint256 private constant ENTERED = 2;\n\n /**\n * @dev Unauthorized reentrant call.\n */\n error ReentrancyGuardReentrantCall();\n\n constructor() {\n _reentrancyGuardStorageSlot().getUint256Slot().value = NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n /**\n * @dev A `view` only version of {nonReentrant}. Use to block view functions\n * from being called, preventing reading from inconsistent contract state.\n *\n * CAUTION: This is a \"view\" modifier and does not change the reentrancy\n * status. Use it only on view functions. For payable or non-payable functions,\n * use the standard {nonReentrant} modifier instead.\n */\n modifier nonReentrantView() {\n _nonReentrantBeforeView();\n _;\n }\n\n function _nonReentrantBeforeView() private view {\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED\n _nonReentrantBeforeView();\n\n // Any calls to nonReentrant after this point will fail\n _reentrancyGuardStorageSlot().getUint256Slot().value = ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _reentrancyGuardStorageSlot().getUint256Slot().value = NOT_ENTERED;\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _reentrancyGuardStorageSlot().getUint256Slot().value == ENTERED;\n }\n\n function _reentrancyGuardStorageSlot() internal pure virtual returns (bytes32) {\n return REENTRANCY_GUARD_STORAGE;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct Int256Slot {\n int256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n */\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n}\n" + }, + "contracts/interfaces/ITokenMessengerV2.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\ninterface ITokenMessengerV2 {\n function depositForBurnWithHook(\n uint256 amount,\n uint32 destinationDomain,\n bytes32 mintRecipient,\n address burnToken,\n bytes32 destinationCaller,\n uint256 maxFee,\n uint32 minFinalityThreshold,\n bytes calldata hookData\n ) external;\n}\n" + }, + "contracts/mocks/MockERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract MockERC20 is ERC20 {\n uint8 private immutable tokenDecimals;\n\n constructor(string memory name_, string memory symbol_, uint8 decimals_) ERC20(name_, symbol_) {\n tokenDecimals = decimals_;\n }\n\n function decimals() public view override returns (uint8) {\n return tokenDecimals;\n }\n\n function mint(address to, uint256 amount) external {\n _mint(to, amount);\n }\n}\n" + }, + "contracts/mocks/MockTokenMessengerV2.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\ncontract MockTokenMessengerV2 {\n using SafeERC20 for IERC20;\n\n struct BurnCall {\n uint256 amount;\n uint32 destinationDomain;\n bytes32 mintRecipient;\n address burnToken;\n bytes32 destinationCaller;\n uint256 maxFee;\n uint32 minFinalityThreshold;\n bytes hookData;\n address depositor;\n }\n\n BurnCall public lastBurnCall;\n bool public reenter;\n address public reenterTarget;\n bytes public reenterData;\n\n event DepositForBurn(\n address indexed burnToken,\n uint256 amount,\n address indexed depositor,\n bytes32 mintRecipient,\n uint32 destinationDomain,\n bytes32 destinationCaller,\n uint256 maxFee,\n uint32 indexed minFinalityThreshold,\n bytes hookData\n );\n\n function depositForBurnWithHook(\n uint256 amount,\n uint32 destinationDomain,\n bytes32 mintRecipient,\n address burnToken,\n bytes32 destinationCaller,\n uint256 maxFee,\n uint32 minFinalityThreshold,\n bytes calldata hookData\n ) external {\n if (reenter) {\n (bool success, bytes memory returndata) = reenterTarget.call(reenterData);\n if (!success) {\n assembly {\n revert(add(returndata, 32), mload(returndata))\n }\n }\n }\n\n IERC20(burnToken).safeTransferFrom(msg.sender, address(this), amount);\n\n lastBurnCall = BurnCall({\n amount: amount,\n destinationDomain: destinationDomain,\n mintRecipient: mintRecipient,\n burnToken: burnToken,\n destinationCaller: destinationCaller,\n maxFee: maxFee,\n minFinalityThreshold: minFinalityThreshold,\n hookData: hookData,\n depositor: msg.sender\n });\n\n emit DepositForBurn(\n burnToken,\n amount,\n msg.sender,\n mintRecipient,\n destinationDomain,\n destinationCaller,\n maxFee,\n minFinalityThreshold,\n hookData\n );\n }\n\n function setReenter(address target, bytes calldata data) external {\n reenter = true;\n reenterTarget = target;\n reenterData = data;\n }\n}\n" + }, + "contracts/PerUserCctpSettlement.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\nimport {ITokenMessengerV2} from \"./interfaces/ITokenMessengerV2.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {ReentrancyGuard} from \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\n\ncontract PerUserCctpSettlement is ReentrancyGuard {\n using SafeERC20 for IERC20;\n\n uint32 public constant ETHEREUM_DESTINATION_DOMAIN = 0;\n bytes32 public constant DESTINATION_CALLER = bytes32(0);\n bytes32 public constant FORWARD_HOOK_DATA = 0x636374702d666f72776172640000000000000000000000000000000000000000;\n\n IERC20 public immutable usdc;\n ITokenMessengerV2 public immutable tokenMessenger;\n address public immutable ethereumMintRecipient;\n bytes32 public immutable mintRecipientBytes32;\n\n event UsdcSweptAndForwarded(\n address indexed caller,\n uint256 usdcAmount,\n uint32 destinationDomain,\n bytes32 mintRecipient,\n bytes32 destinationCaller,\n uint256 maxFee,\n uint32 minFinalityThreshold,\n bytes32 forwardHookData\n );\n\n constructor(address _usdc, address _tokenMessenger, address _ethereumMintRecipient) {\n require(_usdc != address(0), \"Invalid USDC\");\n require(_tokenMessenger != address(0), \"Invalid messenger\");\n require(_ethereumMintRecipient != address(0), \"Invalid recipient\");\n\n usdc = IERC20(_usdc);\n tokenMessenger = ITokenMessengerV2(_tokenMessenger);\n ethereumMintRecipient = _ethereumMintRecipient;\n mintRecipientBytes32 = _addressToBytes32(_ethereumMintRecipient);\n }\n\n function sweepUsdc(uint256 usdcAmount, uint256 maxFee, uint32 minFinalityThreshold) external nonReentrant {\n require(usdcAmount > 0, \"Invalid amount\");\n require(usdc.balanceOf(address(this)) >= usdcAmount, \"Insufficient USDC balance\");\n\n usdc.forceApprove(address(tokenMessenger), usdcAmount);\n\n tokenMessenger.depositForBurnWithHook(\n usdcAmount,\n ETHEREUM_DESTINATION_DOMAIN,\n mintRecipientBytes32,\n address(usdc),\n DESTINATION_CALLER,\n maxFee,\n minFinalityThreshold,\n abi.encodePacked(FORWARD_HOOK_DATA)\n );\n\n usdc.forceApprove(address(tokenMessenger), 0);\n\n emit UsdcSweptAndForwarded(\n msg.sender,\n usdcAmount,\n ETHEREUM_DESTINATION_DOMAIN,\n mintRecipientBytes32,\n DESTINATION_CALLER,\n maxFee,\n minFinalityThreshold,\n FORWARD_HOOK_DATA\n );\n }\n\n function _addressToBytes32(address value) private pure returns (bytes32) {\n return bytes32(uint256(uint160(value)));\n }\n}\n" + }, + "contracts/PerUserCctpSettlementFactory.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\nimport {PerUserCctpSettlement} from \"./PerUserCctpSettlement.sol\";\n\ncontract PerUserCctpSettlementFactory {\n address public immutable usdc;\n address public immutable tokenMessenger;\n\n event SettlementDeployed(\n address indexed settlement,\n address indexed ethereumMintRecipient\n );\n\n constructor(address _usdc, address _tokenMessenger) {\n require(_usdc != address(0), \"Invalid USDC\");\n require(_tokenMessenger != address(0), \"Invalid messenger\");\n\n usdc = _usdc;\n tokenMessenger = _tokenMessenger;\n }\n\n function deploySettlement(address ethereumMintRecipient) external returns (address settlement) {\n settlement = address(new PerUserCctpSettlement(usdc, tokenMessenger, ethereumMintRecipient));\n\n emit SettlementDeployed(settlement, ethereumMintRecipient);\n }\n}\n" + } + } + }, + "output": { + "contracts": { + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "IERC20Errors": { + "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" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"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\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"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.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]}},\"version\":1}" + }, + "IERC721Errors": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC721IncorrectOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ERC721InsufficientApproval", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC721InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "ERC721InvalidOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC721InvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC721InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC721InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ERC721NonexistentToken", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]}},\"version\":1}" + }, + "IERC1155Errors": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ERC1155InsufficientBalance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC1155InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "idsLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "valuesLength", + "type": "uint256" + } + ], + "name": "ERC1155InvalidArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "ERC1155InvalidOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC1155InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC1155InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC1155MissingApprovalForAll", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,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.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "IERC1363": { + "abi": [ + { + "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": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approveAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "approveAndCall", + "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": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "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": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "transferAndCall", + "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", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "transferFromAndCall", + "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": "transferFromAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "approveAndCall(address,uint256,bytes)": "cae9ca51", + "approveAndCall(address,uint256)": "3177029f", + "balanceOf(address)": "70a08231", + "supportsInterface(bytes4)": "01ffc9a7", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferAndCall(address,uint256,bytes)": "4000aea0", + "transferAndCall(address,uint256)": "1296ee62", + "transferFrom(address,address,uint256)": "23b872dd", + "transferFromAndCall(address,address,uint256,bytes)": "c1d34b89", + "transferFromAndCall(address,address,uint256)": "d8fbe994" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"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\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferFromAndCall\",\"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\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\",\"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\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"approveAndCall(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `spender`.\",\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferAndCall(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFromAndCall(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFromAndCall(address,address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}}},\"title\":\"IERC1363\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":\"IERC1363\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "ERC20": { + "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" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "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" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"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 ERC-20 applications.\",\"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\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"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\":\"Returns the value of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. Both 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\":\"Returns the value of tokens in existence.\"},\"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}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. 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\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195\",\"dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "IERC20Metadata": { + "abi": [ + { + "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" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "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" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"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\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "IERC20": { + "abi": [ + { + "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": "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" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"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\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"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\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "SafeERC20": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "currentAllowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedDecrease", + "type": "uint256" + } + ], + "name": "SafeERC20FailedDecreaseAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212205c28a953d80cbde5965c90d7d69e4200c2946ffa7d85a8c75c36f5291a6d6e6464736f6c634300081c0033", + "opcodes": "PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TLOAD 0x28 0xA9 MSTORE8 0xD8 0xC 0xBD 0xE5 SWAP7 TLOAD SWAP1 0xD7 0xD6 SWAP15 TIMESTAMP STOP 0xC2 SWAP5 PUSH16 0xFA7D85A8C75C36F5291A6D6E6464736F PUSH13 0x634300081C0033000000000000 ", + "sourceMap": "698:12615:7:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;698:12615:7;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212205c28a953d80cbde5965c90d7d69e4200c2946ffa7d85a8c75c36f5291a6d6e6464736f6c634300081c0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TLOAD 0x28 0xA9 MSTORE8 0xD8 0xC 0xBD 0xE5 SWAP7 TLOAD SWAP1 0xD7 0xD6 SWAP15 TIMESTAMP STOP 0xC2 SWAP5 PUSH16 0xFA7D85A8C75C36F5291A6D6E6464736F PUSH13 0x634300081C0033000000000000 ", + "sourceMap": "698:12615:7:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x304d732678032a9781ae85c8f204c8fba3d3a5e31c02616964e75cfdc5049098\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://299ced486011781dc98f638059678323c03079fefae1482abaa2135b22fa92d0\",\"dweb:/ipfs/QmbZNbcPTBxNvwChavN2kkZZs7xHhYL7mv51KrxMhsMs3j\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/utils/Context.sol": { + "Context": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "IERC165": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "supportsInterface(bytes4)": "01ffc9a7" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/utils/ReentrancyGuard.sol": { + "ReentrancyGuard": { + "abi": [ + { + "inputs": [], + "name": "ReentrancyGuardReentrantCall", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"custom:stateless\":\"\",\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced by the {ReentrancyGuardTransient} variant in v6.0.\",\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99\",\"dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}" + } + }, + "@openzeppelin/contracts/utils/StorageSlot.sol": { + "StorageSlot": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212202e11909616c8a357ae57cd11f3e744f7b7de3a3174b44a2b6467fa9904f2585764736f6c634300081c0033", + "opcodes": "PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2E GT SWAP1 SWAP7 AND 0xC8 LOG3 JUMPI 0xAE JUMPI 0xCD GT RETURN 0xE7 PREVRANDAO 0xF7 0xB7 0xDE GASPRICE BALANCE PUSH21 0xB44A2B6467FA9904F2585764736F6C634300081C00 CALLER ", + "sourceMap": "1407:2774:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1407:2774:10;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212202e11909616c8a357ae57cd11f3e744f7b7de3a3174b44a2b6467fa9904f2585764736f6c634300081c0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2E GT SWAP1 SWAP7 AND 0xC8 LOG3 JUMPI 0xAE JUMPI 0xCD GT RETURN 0xE7 PREVRANDAO 0xF7 0xB7 0xDE GASPRICE BALANCE PUSH21 0xB44A2B6467FA9904F2585764736F6C634300081C00 CALLER ", + "sourceMap": "1407:2774:10:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 { // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}" + } + }, + "contracts/interfaces/ITokenMessengerV2.sol": { + "ITokenMessengerV2": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "maxFee", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "minFinalityThreshold", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "hookData", + "type": "bytes" + } + ], + "name": "depositForBurnWithHook", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "depositForBurnWithHook(uint256,uint32,bytes32,address,bytes32,uint256,uint32,bytes)": "779b432d" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"minFinalityThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"depositForBurnWithHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ITokenMessengerV2.sol\":\"ITokenMessengerV2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/ITokenMessengerV2.sol\":{\"keccak256\":\"0x76b7d85feaf149e32f9fa3b2202d9a8436265a8424b2074dd792c9fa5bba6c42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9868ed7e99cc1def8409878c58151bd11322145864b1f3a705fb2be5494a37e7\",\"dweb:/ipfs/QmTiMymy6cHS7HYDDwEs15e1Qzo7H5JiLYNyzmZnVBGmsF\"]}},\"version\":1}" + } + }, + "contracts/mocks/MockERC20.sol": { + "MockERC20": { + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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": [ + { + "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": [], + "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" + } + ], + "evm": { + "bytecode": { + "functionDebugData": { + "@_278": { + "entryPoint": null, + "id": 278, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_1925": { + "entryPoint": null, + "id": 1925, + "parameterSlots": 3, + "returnSlots": 0 + }, + "abi_decode_string_fromMemory": { + "entryPoint": 110, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory": { + "entryPoint": 247, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "array_dataslot_string_storage": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "clean_up_bytearray_end_slots_string_storage": { + "entryPoint": 428, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": { + "entryPoint": 504, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "extract_byte_array_length": { + "entryPoint": 372, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "extract_used_part_and_set_length_of_short_byte_array": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "panic_error_0x41": { + "entryPoint": 90, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:4092:17", + "nodeType": "YulBlock", + "src": "0:4092:17", + "statements": [ + { + "nativeSrc": "6:3:17", + "nodeType": "YulBlock", + "src": "6:3:17", + "statements": [] + }, + { + "body": { + "nativeSrc": "46:95:17", + "nodeType": "YulBlock", + "src": "46:95:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "63:1:17", + "nodeType": "YulLiteral", + "src": "63:1:17", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "70:3:17", + "nodeType": "YulLiteral", + "src": "70:3:17", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "75:10:17", + "nodeType": "YulLiteral", + "src": "75:10:17", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "66:3:17", + "nodeType": "YulIdentifier", + "src": "66:3:17" + }, + "nativeSrc": "66:20:17", + "nodeType": "YulFunctionCall", + "src": "66:20:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "56:6:17", + "nodeType": "YulIdentifier", + "src": "56:6:17" + }, + "nativeSrc": "56:31:17", + "nodeType": "YulFunctionCall", + "src": "56:31:17" + }, + "nativeSrc": "56:31:17", + "nodeType": "YulExpressionStatement", + "src": "56:31:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "103:1:17", + "nodeType": "YulLiteral", + "src": "103:1:17", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "106:4:17", + "nodeType": "YulLiteral", + "src": "106:4:17", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "96:6:17", + "nodeType": "YulIdentifier", + "src": "96:6:17" + }, + "nativeSrc": "96:15:17", + "nodeType": "YulFunctionCall", + "src": "96:15:17" + }, + "nativeSrc": "96:15:17", + "nodeType": "YulExpressionStatement", + "src": "96:15:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "127:1:17", + "nodeType": "YulLiteral", + "src": "127:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "130:4:17", + "nodeType": "YulLiteral", + "src": "130:4:17", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "120:6:17", + "nodeType": "YulIdentifier", + "src": "120:6:17" + }, + "nativeSrc": "120:15:17", + "nodeType": "YulFunctionCall", + "src": "120:15:17" + }, + "nativeSrc": "120:15:17", + "nodeType": "YulExpressionStatement", + "src": "120:15:17" + } + ] + }, + "name": "panic_error_0x41", + "nativeSrc": "14:127:17", + "nodeType": "YulFunctionDefinition", + "src": "14:127:17" + }, + { + "body": { + "nativeSrc": "210:659:17", + "nodeType": "YulBlock", + "src": "210:659:17", + "statements": [ + { + "body": { + "nativeSrc": "259:16:17", + "nodeType": "YulBlock", + "src": "259:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "268:1:17", + "nodeType": "YulLiteral", + "src": "268:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "271:1:17", + "nodeType": "YulLiteral", + "src": "271:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "261:6:17", + "nodeType": "YulIdentifier", + "src": "261:6:17" + }, + "nativeSrc": "261:12:17", + "nodeType": "YulFunctionCall", + "src": "261:12:17" + }, + "nativeSrc": "261:12:17", + "nodeType": "YulExpressionStatement", + "src": "261:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "238:6:17", + "nodeType": "YulIdentifier", + "src": "238:6:17" + }, + { + "kind": "number", + "nativeSrc": "246:4:17", + "nodeType": "YulLiteral", + "src": "246:4:17", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "234:3:17", + "nodeType": "YulIdentifier", + "src": "234:3:17" + }, + "nativeSrc": "234:17:17", + "nodeType": "YulFunctionCall", + "src": "234:17:17" + }, + { + "name": "end", + "nativeSrc": "253:3:17", + "nodeType": "YulIdentifier", + "src": "253:3:17" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "230:3:17", + "nodeType": "YulIdentifier", + "src": "230:3:17" + }, + "nativeSrc": "230:27:17", + "nodeType": "YulFunctionCall", + "src": "230:27:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "223:6:17", + "nodeType": "YulIdentifier", + "src": "223:6:17" + }, + "nativeSrc": "223:35:17", + "nodeType": "YulFunctionCall", + "src": "223:35:17" + }, + "nativeSrc": "220:55:17", + "nodeType": "YulIf", + "src": "220:55:17" + }, + { + "nativeSrc": "284:27:17", + "nodeType": "YulVariableDeclaration", + "src": "284:27:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "304:6:17", + "nodeType": "YulIdentifier", + "src": "304:6:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "298:5:17", + "nodeType": "YulIdentifier", + "src": "298:5:17" + }, + "nativeSrc": "298:13:17", + "nodeType": "YulFunctionCall", + "src": "298:13:17" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "288:6:17", + "nodeType": "YulTypedName", + "src": "288:6:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "354:22:17", + "nodeType": "YulBlock", + "src": "354:22:17", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "356:16:17", + "nodeType": "YulIdentifier", + "src": "356:16:17" + }, + "nativeSrc": "356:18:17", + "nodeType": "YulFunctionCall", + "src": "356:18:17" + }, + "nativeSrc": "356:18:17", + "nodeType": "YulExpressionStatement", + "src": "356:18:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "326:6:17", + "nodeType": "YulIdentifier", + "src": "326:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "342:2:17", + "nodeType": "YulLiteral", + "src": "342:2:17", + "type": "", + "value": "64" + }, + { + "kind": "number", + "nativeSrc": "346:1:17", + "nodeType": "YulLiteral", + "src": "346:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "338:3:17", + "nodeType": "YulIdentifier", + "src": "338:3:17" + }, + "nativeSrc": "338:10:17", + "nodeType": "YulFunctionCall", + "src": "338:10:17" + }, + { + "kind": "number", + "nativeSrc": "350:1:17", + "nodeType": "YulLiteral", + "src": "350:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "334:3:17", + "nodeType": "YulIdentifier", + "src": "334:3:17" + }, + "nativeSrc": "334:18:17", + "nodeType": "YulFunctionCall", + "src": "334:18:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "323:2:17", + "nodeType": "YulIdentifier", + "src": "323:2:17" + }, + "nativeSrc": "323:30:17", + "nodeType": "YulFunctionCall", + "src": "323:30:17" + }, + "nativeSrc": "320:56:17", + "nodeType": "YulIf", + "src": "320:56:17" + }, + { + "nativeSrc": "385:23:17", + "nodeType": "YulVariableDeclaration", + "src": "385:23:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "405:2:17", + "nodeType": "YulLiteral", + "src": "405:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "399:5:17", + "nodeType": "YulIdentifier", + "src": "399:5:17" + }, + "nativeSrc": "399:9:17", + "nodeType": "YulFunctionCall", + "src": "399:9:17" + }, + "variables": [ + { + "name": "memPtr", + "nativeSrc": "389:6:17", + "nodeType": "YulTypedName", + "src": "389:6:17", + "type": "" + } + ] + }, + { + "nativeSrc": "417:85:17", + "nodeType": "YulVariableDeclaration", + "src": "417:85:17", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "439:6:17", + "nodeType": "YulIdentifier", + "src": "439:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "463:6:17", + "nodeType": "YulIdentifier", + "src": "463:6:17" + }, + { + "kind": "number", + "nativeSrc": "471:4:17", + "nodeType": "YulLiteral", + "src": "471:4:17", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "459:3:17", + "nodeType": "YulIdentifier", + "src": "459:3:17" + }, + "nativeSrc": "459:17:17", + "nodeType": "YulFunctionCall", + "src": "459:17:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "482:2:17", + "nodeType": "YulLiteral", + "src": "482:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "478:3:17", + "nodeType": "YulIdentifier", + "src": "478:3:17" + }, + "nativeSrc": "478:7:17", + "nodeType": "YulFunctionCall", + "src": "478:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "455:3:17", + "nodeType": "YulIdentifier", + "src": "455:3:17" + }, + "nativeSrc": "455:31:17", + "nodeType": "YulFunctionCall", + "src": "455:31:17" + }, + { + "kind": "number", + "nativeSrc": "488:2:17", + "nodeType": "YulLiteral", + "src": "488:2:17", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "451:3:17", + "nodeType": "YulIdentifier", + "src": "451:3:17" + }, + "nativeSrc": "451:40:17", + "nodeType": "YulFunctionCall", + "src": "451:40:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "497:2:17", + "nodeType": "YulLiteral", + "src": "497:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "493:3:17", + "nodeType": "YulIdentifier", + "src": "493:3:17" + }, + "nativeSrc": "493:7:17", + "nodeType": "YulFunctionCall", + "src": "493:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "447:3:17", + "nodeType": "YulIdentifier", + "src": "447:3:17" + }, + "nativeSrc": "447:54:17", + "nodeType": "YulFunctionCall", + "src": "447:54:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "435:3:17", + "nodeType": "YulIdentifier", + "src": "435:3:17" + }, + "nativeSrc": "435:67:17", + "nodeType": "YulFunctionCall", + "src": "435:67:17" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "421:10:17", + "nodeType": "YulTypedName", + "src": "421:10:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "577:22:17", + "nodeType": "YulBlock", + "src": "577:22:17", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "579:16:17", + "nodeType": "YulIdentifier", + "src": "579:16:17" + }, + "nativeSrc": "579:18:17", + "nodeType": "YulFunctionCall", + "src": "579:18:17" + }, + "nativeSrc": "579:18:17", + "nodeType": "YulExpressionStatement", + "src": "579:18:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "520:10:17", + "nodeType": "YulIdentifier", + "src": "520:10:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "540:2:17", + "nodeType": "YulLiteral", + "src": "540:2:17", + "type": "", + "value": "64" + }, + { + "kind": "number", + "nativeSrc": "544:1:17", + "nodeType": "YulLiteral", + "src": "544:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "536:3:17", + "nodeType": "YulIdentifier", + "src": "536:3:17" + }, + "nativeSrc": "536:10:17", + "nodeType": "YulFunctionCall", + "src": "536:10:17" + }, + { + "kind": "number", + "nativeSrc": "548:1:17", + "nodeType": "YulLiteral", + "src": "548:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "532:3:17", + "nodeType": "YulIdentifier", + "src": "532:3:17" + }, + "nativeSrc": "532:18:17", + "nodeType": "YulFunctionCall", + "src": "532:18:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "517:2:17", + "nodeType": "YulIdentifier", + "src": "517:2:17" + }, + "nativeSrc": "517:34:17", + "nodeType": "YulFunctionCall", + "src": "517:34:17" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "556:10:17", + "nodeType": "YulIdentifier", + "src": "556:10:17" + }, + { + "name": "memPtr", + "nativeSrc": "568:6:17", + "nodeType": "YulIdentifier", + "src": "568:6:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "553:2:17", + "nodeType": "YulIdentifier", + "src": "553:2:17" + }, + "nativeSrc": "553:22:17", + "nodeType": "YulFunctionCall", + "src": "553:22:17" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "514:2:17", + "nodeType": "YulIdentifier", + "src": "514:2:17" + }, + "nativeSrc": "514:62:17", + "nodeType": "YulFunctionCall", + "src": "514:62:17" + }, + "nativeSrc": "511:88:17", + "nodeType": "YulIf", + "src": "511:88:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "615:2:17", + "nodeType": "YulLiteral", + "src": "615:2:17", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "619:10:17", + "nodeType": "YulIdentifier", + "src": "619:10:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "608:6:17", + "nodeType": "YulIdentifier", + "src": "608:6:17" + }, + "nativeSrc": "608:22:17", + "nodeType": "YulFunctionCall", + "src": "608:22:17" + }, + "nativeSrc": "608:22:17", + "nodeType": "YulExpressionStatement", + "src": "608:22:17" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "646:6:17", + "nodeType": "YulIdentifier", + "src": "646:6:17" + }, + { + "name": "length", + "nativeSrc": "654:6:17", + "nodeType": "YulIdentifier", + "src": "654:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "639:6:17", + "nodeType": "YulIdentifier", + "src": "639:6:17" + }, + "nativeSrc": "639:22:17", + "nodeType": "YulFunctionCall", + "src": "639:22:17" + }, + "nativeSrc": "639:22:17", + "nodeType": "YulExpressionStatement", + "src": "639:22:17" + }, + { + "body": { + "nativeSrc": "713:16:17", + "nodeType": "YulBlock", + "src": "713:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "722:1:17", + "nodeType": "YulLiteral", + "src": "722:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "725:1:17", + "nodeType": "YulLiteral", + "src": "725:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "715:6:17", + "nodeType": "YulIdentifier", + "src": "715:6:17" + }, + "nativeSrc": "715:12:17", + "nodeType": "YulFunctionCall", + "src": "715:12:17" + }, + "nativeSrc": "715:12:17", + "nodeType": "YulExpressionStatement", + "src": "715:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "684:6:17", + "nodeType": "YulIdentifier", + "src": "684:6:17" + }, + { + "name": "length", + "nativeSrc": "692:6:17", + "nodeType": "YulIdentifier", + "src": "692:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "680:3:17", + "nodeType": "YulIdentifier", + "src": "680:3:17" + }, + "nativeSrc": "680:19:17", + "nodeType": "YulFunctionCall", + "src": "680:19:17" + }, + { + "kind": "number", + "nativeSrc": "701:4:17", + "nodeType": "YulLiteral", + "src": "701:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "676:3:17", + "nodeType": "YulIdentifier", + "src": "676:3:17" + }, + "nativeSrc": "676:30:17", + "nodeType": "YulFunctionCall", + "src": "676:30:17" + }, + { + "name": "end", + "nativeSrc": "708:3:17", + "nodeType": "YulIdentifier", + "src": "708:3:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "673:2:17", + "nodeType": "YulIdentifier", + "src": "673:2:17" + }, + "nativeSrc": "673:39:17", + "nodeType": "YulFunctionCall", + "src": "673:39:17" + }, + "nativeSrc": "670:59:17", + "nodeType": "YulIf", + "src": "670:59:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "748:6:17", + "nodeType": "YulIdentifier", + "src": "748:6:17" + }, + { + "kind": "number", + "nativeSrc": "756:4:17", + "nodeType": "YulLiteral", + "src": "756:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "744:3:17", + "nodeType": "YulIdentifier", + "src": "744:3:17" + }, + "nativeSrc": "744:17:17", + "nodeType": "YulFunctionCall", + "src": "744:17:17" + }, + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "767:6:17", + "nodeType": "YulIdentifier", + "src": "767:6:17" + }, + { + "kind": "number", + "nativeSrc": "775:4:17", + "nodeType": "YulLiteral", + "src": "775:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "763:3:17", + "nodeType": "YulIdentifier", + "src": "763:3:17" + }, + "nativeSrc": "763:17:17", + "nodeType": "YulFunctionCall", + "src": "763:17:17" + }, + { + "name": "length", + "nativeSrc": "782:6:17", + "nodeType": "YulIdentifier", + "src": "782:6:17" + } + ], + "functionName": { + "name": "mcopy", + "nativeSrc": "738:5:17", + "nodeType": "YulIdentifier", + "src": "738:5:17" + }, + "nativeSrc": "738:51:17", + "nodeType": "YulFunctionCall", + "src": "738:51:17" + }, + "nativeSrc": "738:51:17", + "nodeType": "YulExpressionStatement", + "src": "738:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "813:6:17", + "nodeType": "YulIdentifier", + "src": "813:6:17" + }, + { + "name": "length", + "nativeSrc": "821:6:17", + "nodeType": "YulIdentifier", + "src": "821:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "809:3:17", + "nodeType": "YulIdentifier", + "src": "809:3:17" + }, + "nativeSrc": "809:19:17", + "nodeType": "YulFunctionCall", + "src": "809:19:17" + }, + { + "kind": "number", + "nativeSrc": "830:4:17", + "nodeType": "YulLiteral", + "src": "830:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "805:3:17", + "nodeType": "YulIdentifier", + "src": "805:3:17" + }, + "nativeSrc": "805:30:17", + "nodeType": "YulFunctionCall", + "src": "805:30:17" + }, + { + "kind": "number", + "nativeSrc": "837:1:17", + "nodeType": "YulLiteral", + "src": "837:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "798:6:17", + "nodeType": "YulIdentifier", + "src": "798:6:17" + }, + "nativeSrc": "798:41:17", + "nodeType": "YulFunctionCall", + "src": "798:41:17" + }, + "nativeSrc": "798:41:17", + "nodeType": "YulExpressionStatement", + "src": "798:41:17" + }, + { + "nativeSrc": "848:15:17", + "nodeType": "YulAssignment", + "src": "848:15:17", + "value": { + "name": "memPtr", + "nativeSrc": "857:6:17", + "nodeType": "YulIdentifier", + "src": "857:6:17" + }, + "variableNames": [ + { + "name": "array", + "nativeSrc": "848:5:17", + "nodeType": "YulIdentifier", + "src": "848:5:17" + } + ] + } + ] + }, + "name": "abi_decode_string_fromMemory", + "nativeSrc": "146:723:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "184:6:17", + "nodeType": "YulTypedName", + "src": "184:6:17", + "type": "" + }, + { + "name": "end", + "nativeSrc": "192:3:17", + "nodeType": "YulTypedName", + "src": "192:3:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nativeSrc": "200:5:17", + "nodeType": "YulTypedName", + "src": "200:5:17", + "type": "" + } + ], + "src": "146:723:17" + }, + { + "body": { + "nativeSrc": "1007:574:17", + "nodeType": "YulBlock", + "src": "1007:574:17", + "statements": [ + { + "body": { + "nativeSrc": "1053:16:17", + "nodeType": "YulBlock", + "src": "1053:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1062:1:17", + "nodeType": "YulLiteral", + "src": "1062:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1065:1:17", + "nodeType": "YulLiteral", + "src": "1065:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1055:6:17", + "nodeType": "YulIdentifier", + "src": "1055:6:17" + }, + "nativeSrc": "1055:12:17", + "nodeType": "YulFunctionCall", + "src": "1055:12:17" + }, + "nativeSrc": "1055:12:17", + "nodeType": "YulExpressionStatement", + "src": "1055:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1028:7:17", + "nodeType": "YulIdentifier", + "src": "1028:7:17" + }, + { + "name": "headStart", + "nativeSrc": "1037:9:17", + "nodeType": "YulIdentifier", + "src": "1037:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1024:3:17", + "nodeType": "YulIdentifier", + "src": "1024:3:17" + }, + "nativeSrc": "1024:23:17", + "nodeType": "YulFunctionCall", + "src": "1024:23:17" + }, + { + "kind": "number", + "nativeSrc": "1049:2:17", + "nodeType": "YulLiteral", + "src": "1049:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1020:3:17", + "nodeType": "YulIdentifier", + "src": "1020:3:17" + }, + "nativeSrc": "1020:32:17", + "nodeType": "YulFunctionCall", + "src": "1020:32:17" + }, + "nativeSrc": "1017:52:17", + "nodeType": "YulIf", + "src": "1017:52:17" + }, + { + "nativeSrc": "1078:30:17", + "nodeType": "YulVariableDeclaration", + "src": "1078:30:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1098:9:17", + "nodeType": "YulIdentifier", + "src": "1098:9:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1092:5:17", + "nodeType": "YulIdentifier", + "src": "1092:5:17" + }, + "nativeSrc": "1092:16:17", + "nodeType": "YulFunctionCall", + "src": "1092:16:17" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "1082:6:17", + "nodeType": "YulTypedName", + "src": "1082:6:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1151:16:17", + "nodeType": "YulBlock", + "src": "1151:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1160:1:17", + "nodeType": "YulLiteral", + "src": "1160:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1163:1:17", + "nodeType": "YulLiteral", + "src": "1163:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1153:6:17", + "nodeType": "YulIdentifier", + "src": "1153:6:17" + }, + "nativeSrc": "1153:12:17", + "nodeType": "YulFunctionCall", + "src": "1153:12:17" + }, + "nativeSrc": "1153:12:17", + "nodeType": "YulExpressionStatement", + "src": "1153:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1123:6:17", + "nodeType": "YulIdentifier", + "src": "1123:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1139:2:17", + "nodeType": "YulLiteral", + "src": "1139:2:17", + "type": "", + "value": "64" + }, + { + "kind": "number", + "nativeSrc": "1143:1:17", + "nodeType": "YulLiteral", + "src": "1143:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1135:3:17", + "nodeType": "YulIdentifier", + "src": "1135:3:17" + }, + "nativeSrc": "1135:10:17", + "nodeType": "YulFunctionCall", + "src": "1135:10:17" + }, + { + "kind": "number", + "nativeSrc": "1147:1:17", + "nodeType": "YulLiteral", + "src": "1147:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1131:3:17", + "nodeType": "YulIdentifier", + "src": "1131:3:17" + }, + "nativeSrc": "1131:18:17", + "nodeType": "YulFunctionCall", + "src": "1131:18:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1120:2:17", + "nodeType": "YulIdentifier", + "src": "1120:2:17" + }, + "nativeSrc": "1120:30:17", + "nodeType": "YulFunctionCall", + "src": "1120:30:17" + }, + "nativeSrc": "1117:50:17", + "nodeType": "YulIf", + "src": "1117:50:17" + }, + { + "nativeSrc": "1176:71:17", + "nodeType": "YulAssignment", + "src": "1176:71:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1219:9:17", + "nodeType": "YulIdentifier", + "src": "1219:9:17" + }, + { + "name": "offset", + "nativeSrc": "1230:6:17", + "nodeType": "YulIdentifier", + "src": "1230:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1215:3:17", + "nodeType": "YulIdentifier", + "src": "1215:3:17" + }, + "nativeSrc": "1215:22:17", + "nodeType": "YulFunctionCall", + "src": "1215:22:17" + }, + { + "name": "dataEnd", + "nativeSrc": "1239:7:17", + "nodeType": "YulIdentifier", + "src": "1239:7:17" + } + ], + "functionName": { + "name": "abi_decode_string_fromMemory", + "nativeSrc": "1186:28:17", + "nodeType": "YulIdentifier", + "src": "1186:28:17" + }, + "nativeSrc": "1186:61:17", + "nodeType": "YulFunctionCall", + "src": "1186:61:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1176:6:17", + "nodeType": "YulIdentifier", + "src": "1176:6:17" + } + ] + }, + { + "nativeSrc": "1256:41:17", + "nodeType": "YulVariableDeclaration", + "src": "1256:41:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1282:9:17", + "nodeType": "YulIdentifier", + "src": "1282:9:17" + }, + { + "kind": "number", + "nativeSrc": "1293:2:17", + "nodeType": "YulLiteral", + "src": "1293:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1278:3:17", + "nodeType": "YulIdentifier", + "src": "1278:3:17" + }, + "nativeSrc": "1278:18:17", + "nodeType": "YulFunctionCall", + "src": "1278:18:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1272:5:17", + "nodeType": "YulIdentifier", + "src": "1272:5:17" + }, + "nativeSrc": "1272:25:17", + "nodeType": "YulFunctionCall", + "src": "1272:25:17" + }, + "variables": [ + { + "name": "offset_1", + "nativeSrc": "1260:8:17", + "nodeType": "YulTypedName", + "src": "1260:8:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1342:16:17", + "nodeType": "YulBlock", + "src": "1342:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1351:1:17", + "nodeType": "YulLiteral", + "src": "1351:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1354:1:17", + "nodeType": "YulLiteral", + "src": "1354:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1344:6:17", + "nodeType": "YulIdentifier", + "src": "1344:6:17" + }, + "nativeSrc": "1344:12:17", + "nodeType": "YulFunctionCall", + "src": "1344:12:17" + }, + "nativeSrc": "1344:12:17", + "nodeType": "YulExpressionStatement", + "src": "1344:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nativeSrc": "1312:8:17", + "nodeType": "YulIdentifier", + "src": "1312:8:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1330:2:17", + "nodeType": "YulLiteral", + "src": "1330:2:17", + "type": "", + "value": "64" + }, + { + "kind": "number", + "nativeSrc": "1334:1:17", + "nodeType": "YulLiteral", + "src": "1334:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1326:3:17", + "nodeType": "YulIdentifier", + "src": "1326:3:17" + }, + "nativeSrc": "1326:10:17", + "nodeType": "YulFunctionCall", + "src": "1326:10:17" + }, + { + "kind": "number", + "nativeSrc": "1338:1:17", + "nodeType": "YulLiteral", + "src": "1338:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1322:3:17", + "nodeType": "YulIdentifier", + "src": "1322:3:17" + }, + "nativeSrc": "1322:18:17", + "nodeType": "YulFunctionCall", + "src": "1322:18:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1309:2:17", + "nodeType": "YulIdentifier", + "src": "1309:2:17" + }, + "nativeSrc": "1309:32:17", + "nodeType": "YulFunctionCall", + "src": "1309:32:17" + }, + "nativeSrc": "1306:52:17", + "nodeType": "YulIf", + "src": "1306:52:17" + }, + { + "nativeSrc": "1367:73:17", + "nodeType": "YulAssignment", + "src": "1367:73:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1410:9:17", + "nodeType": "YulIdentifier", + "src": "1410:9:17" + }, + { + "name": "offset_1", + "nativeSrc": "1421:8:17", + "nodeType": "YulIdentifier", + "src": "1421:8:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1406:3:17", + "nodeType": "YulIdentifier", + "src": "1406:3:17" + }, + "nativeSrc": "1406:24:17", + "nodeType": "YulFunctionCall", + "src": "1406:24:17" + }, + { + "name": "dataEnd", + "nativeSrc": "1432:7:17", + "nodeType": "YulIdentifier", + "src": "1432:7:17" + } + ], + "functionName": { + "name": "abi_decode_string_fromMemory", + "nativeSrc": "1377:28:17", + "nodeType": "YulIdentifier", + "src": "1377:28:17" + }, + "nativeSrc": "1377:63:17", + "nodeType": "YulFunctionCall", + "src": "1377:63:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "1367:6:17", + "nodeType": "YulIdentifier", + "src": "1367:6:17" + } + ] + }, + { + "nativeSrc": "1449:38:17", + "nodeType": "YulVariableDeclaration", + "src": "1449:38:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1472:9:17", + "nodeType": "YulIdentifier", + "src": "1472:9:17" + }, + { + "kind": "number", + "nativeSrc": "1483:2:17", + "nodeType": "YulLiteral", + "src": "1483:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1468:3:17", + "nodeType": "YulIdentifier", + "src": "1468:3:17" + }, + "nativeSrc": "1468:18:17", + "nodeType": "YulFunctionCall", + "src": "1468:18:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1462:5:17", + "nodeType": "YulIdentifier", + "src": "1462:5:17" + }, + "nativeSrc": "1462:25:17", + "nodeType": "YulFunctionCall", + "src": "1462:25:17" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1453:5:17", + "nodeType": "YulTypedName", + "src": "1453:5:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1535:16:17", + "nodeType": "YulBlock", + "src": "1535:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1544:1:17", + "nodeType": "YulLiteral", + "src": "1544:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1547:1:17", + "nodeType": "YulLiteral", + "src": "1547:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1537:6:17", + "nodeType": "YulIdentifier", + "src": "1537:6:17" + }, + "nativeSrc": "1537:12:17", + "nodeType": "YulFunctionCall", + "src": "1537:12:17" + }, + "nativeSrc": "1537:12:17", + "nodeType": "YulExpressionStatement", + "src": "1537:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1509:5:17", + "nodeType": "YulIdentifier", + "src": "1509:5:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1520:5:17", + "nodeType": "YulIdentifier", + "src": "1520:5:17" + }, + { + "kind": "number", + "nativeSrc": "1527:4:17", + "nodeType": "YulLiteral", + "src": "1527:4:17", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1516:3:17", + "nodeType": "YulIdentifier", + "src": "1516:3:17" + }, + "nativeSrc": "1516:16:17", + "nodeType": "YulFunctionCall", + "src": "1516:16:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1506:2:17", + "nodeType": "YulIdentifier", + "src": "1506:2:17" + }, + "nativeSrc": "1506:27:17", + "nodeType": "YulFunctionCall", + "src": "1506:27:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1499:6:17", + "nodeType": "YulIdentifier", + "src": "1499:6:17" + }, + "nativeSrc": "1499:35:17", + "nodeType": "YulFunctionCall", + "src": "1499:35:17" + }, + "nativeSrc": "1496:55:17", + "nodeType": "YulIf", + "src": "1496:55:17" + }, + { + "nativeSrc": "1560:15:17", + "nodeType": "YulAssignment", + "src": "1560:15:17", + "value": { + "name": "value", + "nativeSrc": "1570:5:17", + "nodeType": "YulIdentifier", + "src": "1570:5:17" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "1560:6:17", + "nodeType": "YulIdentifier", + "src": "1560:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory", + "nativeSrc": "874:707:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "957:9:17", + "nodeType": "YulTypedName", + "src": "957:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "968:7:17", + "nodeType": "YulTypedName", + "src": "968:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "980:6:17", + "nodeType": "YulTypedName", + "src": "980:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "988:6:17", + "nodeType": "YulTypedName", + "src": "988:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "996:6:17", + "nodeType": "YulTypedName", + "src": "996:6:17", + "type": "" + } + ], + "src": "874:707:17" + }, + { + "body": { + "nativeSrc": "1641:325:17", + "nodeType": "YulBlock", + "src": "1641:325:17", + "statements": [ + { + "nativeSrc": "1651:22:17", + "nodeType": "YulAssignment", + "src": "1651:22:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1665:1:17", + "nodeType": "YulLiteral", + "src": "1665:1:17", + "type": "", + "value": "1" + }, + { + "name": "data", + "nativeSrc": "1668:4:17", + "nodeType": "YulIdentifier", + "src": "1668:4:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "1661:3:17", + "nodeType": "YulIdentifier", + "src": "1661:3:17" + }, + "nativeSrc": "1661:12:17", + "nodeType": "YulFunctionCall", + "src": "1661:12:17" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "1651:6:17", + "nodeType": "YulIdentifier", + "src": "1651:6:17" + } + ] + }, + { + "nativeSrc": "1682:38:17", + "nodeType": "YulVariableDeclaration", + "src": "1682:38:17", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "1712:4:17", + "nodeType": "YulIdentifier", + "src": "1712:4:17" + }, + { + "kind": "number", + "nativeSrc": "1718:1:17", + "nodeType": "YulLiteral", + "src": "1718:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1708:3:17", + "nodeType": "YulIdentifier", + "src": "1708:3:17" + }, + "nativeSrc": "1708:12:17", + "nodeType": "YulFunctionCall", + "src": "1708:12:17" + }, + "variables": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "1686:18:17", + "nodeType": "YulTypedName", + "src": "1686:18:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1759:31:17", + "nodeType": "YulBlock", + "src": "1759:31:17", + "statements": [ + { + "nativeSrc": "1761:27:17", + "nodeType": "YulAssignment", + "src": "1761:27:17", + "value": { + "arguments": [ + { + "name": "length", + "nativeSrc": "1775:6:17", + "nodeType": "YulIdentifier", + "src": "1775:6:17" + }, + { + "kind": "number", + "nativeSrc": "1783:4:17", + "nodeType": "YulLiteral", + "src": "1783:4:17", + "type": "", + "value": "0x7f" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1771:3:17", + "nodeType": "YulIdentifier", + "src": "1771:3:17" + }, + "nativeSrc": "1771:17:17", + "nodeType": "YulFunctionCall", + "src": "1771:17:17" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "1761:6:17", + "nodeType": "YulIdentifier", + "src": "1761:6:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "1739:18:17", + "nodeType": "YulIdentifier", + "src": "1739:18:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1732:6:17", + "nodeType": "YulIdentifier", + "src": "1732:6:17" + }, + "nativeSrc": "1732:26:17", + "nodeType": "YulFunctionCall", + "src": "1732:26:17" + }, + "nativeSrc": "1729:61:17", + "nodeType": "YulIf", + "src": "1729:61:17" + }, + { + "body": { + "nativeSrc": "1849:111:17", + "nodeType": "YulBlock", + "src": "1849:111:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1870:1:17", + "nodeType": "YulLiteral", + "src": "1870:1:17", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1877:3:17", + "nodeType": "YulLiteral", + "src": "1877:3:17", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "1882:10:17", + "nodeType": "YulLiteral", + "src": "1882:10:17", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1873:3:17", + "nodeType": "YulIdentifier", + "src": "1873:3:17" + }, + "nativeSrc": "1873:20:17", + "nodeType": "YulFunctionCall", + "src": "1873:20:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1863:6:17", + "nodeType": "YulIdentifier", + "src": "1863:6:17" + }, + "nativeSrc": "1863:31:17", + "nodeType": "YulFunctionCall", + "src": "1863:31:17" + }, + "nativeSrc": "1863:31:17", + "nodeType": "YulExpressionStatement", + "src": "1863:31:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1914:1:17", + "nodeType": "YulLiteral", + "src": "1914:1:17", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "1917:4:17", + "nodeType": "YulLiteral", + "src": "1917:4:17", + "type": "", + "value": "0x22" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1907:6:17", + "nodeType": "YulIdentifier", + "src": "1907:6:17" + }, + "nativeSrc": "1907:15:17", + "nodeType": "YulFunctionCall", + "src": "1907:15:17" + }, + "nativeSrc": "1907:15:17", + "nodeType": "YulExpressionStatement", + "src": "1907:15:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1942:1:17", + "nodeType": "YulLiteral", + "src": "1942:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1945:4:17", + "nodeType": "YulLiteral", + "src": "1945:4:17", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1935:6:17", + "nodeType": "YulIdentifier", + "src": "1935:6:17" + }, + "nativeSrc": "1935:15:17", + "nodeType": "YulFunctionCall", + "src": "1935:15:17" + }, + "nativeSrc": "1935:15:17", + "nodeType": "YulExpressionStatement", + "src": "1935:15:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "1805:18:17", + "nodeType": "YulIdentifier", + "src": "1805:18:17" + }, + { + "arguments": [ + { + "name": "length", + "nativeSrc": "1828:6:17", + "nodeType": "YulIdentifier", + "src": "1828:6:17" + }, + { + "kind": "number", + "nativeSrc": "1836:2:17", + "nodeType": "YulLiteral", + "src": "1836:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "1825:2:17", + "nodeType": "YulIdentifier", + "src": "1825:2:17" + }, + "nativeSrc": "1825:14:17", + "nodeType": "YulFunctionCall", + "src": "1825:14:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1802:2:17", + "nodeType": "YulIdentifier", + "src": "1802:2:17" + }, + "nativeSrc": "1802:38:17", + "nodeType": "YulFunctionCall", + "src": "1802:38:17" + }, + "nativeSrc": "1799:161:17", + "nodeType": "YulIf", + "src": "1799:161:17" + } + ] + }, + "name": "extract_byte_array_length", + "nativeSrc": "1586:380:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "data", + "nativeSrc": "1621:4:17", + "nodeType": "YulTypedName", + "src": "1621:4:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nativeSrc": "1630:6:17", + "nodeType": "YulTypedName", + "src": "1630:6:17", + "type": "" + } + ], + "src": "1586:380:17" + }, + { + "body": { + "nativeSrc": "2027:65:17", + "nodeType": "YulBlock", + "src": "2027:65:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2044:1:17", + "nodeType": "YulLiteral", + "src": "2044:1:17", + "type": "", + "value": "0" + }, + { + "name": "ptr", + "nativeSrc": "2047:3:17", + "nodeType": "YulIdentifier", + "src": "2047:3:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2037:6:17", + "nodeType": "YulIdentifier", + "src": "2037:6:17" + }, + "nativeSrc": "2037:14:17", + "nodeType": "YulFunctionCall", + "src": "2037:14:17" + }, + "nativeSrc": "2037:14:17", + "nodeType": "YulExpressionStatement", + "src": "2037:14:17" + }, + { + "nativeSrc": "2060:26:17", + "nodeType": "YulAssignment", + "src": "2060:26:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2078:1:17", + "nodeType": "YulLiteral", + "src": "2078:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2081:4:17", + "nodeType": "YulLiteral", + "src": "2081:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "2068:9:17", + "nodeType": "YulIdentifier", + "src": "2068:9:17" + }, + "nativeSrc": "2068:18:17", + "nodeType": "YulFunctionCall", + "src": "2068:18:17" + }, + "variableNames": [ + { + "name": "data", + "nativeSrc": "2060:4:17", + "nodeType": "YulIdentifier", + "src": "2060:4:17" + } + ] + } + ] + }, + "name": "array_dataslot_string_storage", + "nativeSrc": "1971:121:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "ptr", + "nativeSrc": "2010:3:17", + "nodeType": "YulTypedName", + "src": "2010:3:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "data", + "nativeSrc": "2018:4:17", + "nodeType": "YulTypedName", + "src": "2018:4:17", + "type": "" + } + ], + "src": "1971:121:17" + }, + { + "body": { + "nativeSrc": "2178:437:17", + "nodeType": "YulBlock", + "src": "2178:437:17", + "statements": [ + { + "body": { + "nativeSrc": "2211:398:17", + "nodeType": "YulBlock", + "src": "2211:398:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2232:1:17", + "nodeType": "YulLiteral", + "src": "2232:1:17", + "type": "", + "value": "0" + }, + { + "name": "array", + "nativeSrc": "2235:5:17", + "nodeType": "YulIdentifier", + "src": "2235:5:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2225:6:17", + "nodeType": "YulIdentifier", + "src": "2225:6:17" + }, + "nativeSrc": "2225:16:17", + "nodeType": "YulFunctionCall", + "src": "2225:16:17" + }, + "nativeSrc": "2225:16:17", + "nodeType": "YulExpressionStatement", + "src": "2225:16:17" + }, + { + "nativeSrc": "2254:30:17", + "nodeType": "YulVariableDeclaration", + "src": "2254:30:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2276:1:17", + "nodeType": "YulLiteral", + "src": "2276:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2279:4:17", + "nodeType": "YulLiteral", + "src": "2279:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "2266:9:17", + "nodeType": "YulIdentifier", + "src": "2266:9:17" + }, + "nativeSrc": "2266:18:17", + "nodeType": "YulFunctionCall", + "src": "2266:18:17" + }, + "variables": [ + { + "name": "data", + "nativeSrc": "2258:4:17", + "nodeType": "YulTypedName", + "src": "2258:4:17", + "type": "" + } + ] + }, + { + "nativeSrc": "2297:57:17", + "nodeType": "YulVariableDeclaration", + "src": "2297:57:17", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "2320:4:17", + "nodeType": "YulIdentifier", + "src": "2320:4:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2330:1:17", + "nodeType": "YulLiteral", + "src": "2330:1:17", + "type": "", + "value": "5" + }, + { + "arguments": [ + { + "name": "startIndex", + "nativeSrc": "2337:10:17", + "nodeType": "YulIdentifier", + "src": "2337:10:17" + }, + { + "kind": "number", + "nativeSrc": "2349:2:17", + "nodeType": "YulLiteral", + "src": "2349:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2333:3:17", + "nodeType": "YulIdentifier", + "src": "2333:3:17" + }, + "nativeSrc": "2333:19:17", + "nodeType": "YulFunctionCall", + "src": "2333:19:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "2326:3:17", + "nodeType": "YulIdentifier", + "src": "2326:3:17" + }, + "nativeSrc": "2326:27:17", + "nodeType": "YulFunctionCall", + "src": "2326:27:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2316:3:17", + "nodeType": "YulIdentifier", + "src": "2316:3:17" + }, + "nativeSrc": "2316:38:17", + "nodeType": "YulFunctionCall", + "src": "2316:38:17" + }, + "variables": [ + { + "name": "deleteStart", + "nativeSrc": "2301:11:17", + "nodeType": "YulTypedName", + "src": "2301:11:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2391:23:17", + "nodeType": "YulBlock", + "src": "2391:23:17", + "statements": [ + { + "nativeSrc": "2393:19:17", + "nodeType": "YulAssignment", + "src": "2393:19:17", + "value": { + "name": "data", + "nativeSrc": "2408:4:17", + "nodeType": "YulIdentifier", + "src": "2408:4:17" + }, + "variableNames": [ + { + "name": "deleteStart", + "nativeSrc": "2393:11:17", + "nodeType": "YulIdentifier", + "src": "2393:11:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "startIndex", + "nativeSrc": "2373:10:17", + "nodeType": "YulIdentifier", + "src": "2373:10:17" + }, + { + "kind": "number", + "nativeSrc": "2385:4:17", + "nodeType": "YulLiteral", + "src": "2385:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "2370:2:17", + "nodeType": "YulIdentifier", + "src": "2370:2:17" + }, + "nativeSrc": "2370:20:17", + "nodeType": "YulFunctionCall", + "src": "2370:20:17" + }, + "nativeSrc": "2367:47:17", + "nodeType": "YulIf", + "src": "2367:47:17" + }, + { + "nativeSrc": "2427:41:17", + "nodeType": "YulVariableDeclaration", + "src": "2427:41:17", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "2441:4:17", + "nodeType": "YulIdentifier", + "src": "2441:4:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2451:1:17", + "nodeType": "YulLiteral", + "src": "2451:1:17", + "type": "", + "value": "5" + }, + { + "arguments": [ + { + "name": "len", + "nativeSrc": "2458:3:17", + "nodeType": "YulIdentifier", + "src": "2458:3:17" + }, + { + "kind": "number", + "nativeSrc": "2463:2:17", + "nodeType": "YulLiteral", + "src": "2463:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2454:3:17", + "nodeType": "YulIdentifier", + "src": "2454:3:17" + }, + "nativeSrc": "2454:12:17", + "nodeType": "YulFunctionCall", + "src": "2454:12:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "2447:3:17", + "nodeType": "YulIdentifier", + "src": "2447:3:17" + }, + "nativeSrc": "2447:20:17", + "nodeType": "YulFunctionCall", + "src": "2447:20:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2437:3:17", + "nodeType": "YulIdentifier", + "src": "2437:3:17" + }, + "nativeSrc": "2437:31:17", + "nodeType": "YulFunctionCall", + "src": "2437:31:17" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "2431:2:17", + "nodeType": "YulTypedName", + "src": "2431:2:17", + "type": "" + } + ] + }, + { + "nativeSrc": "2481:24:17", + "nodeType": "YulVariableDeclaration", + "src": "2481:24:17", + "value": { + "name": "deleteStart", + "nativeSrc": "2494:11:17", + "nodeType": "YulIdentifier", + "src": "2494:11:17" + }, + "variables": [ + { + "name": "start", + "nativeSrc": "2485:5:17", + "nodeType": "YulTypedName", + "src": "2485:5:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2579:20:17", + "nodeType": "YulBlock", + "src": "2579:20:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "start", + "nativeSrc": "2588:5:17", + "nodeType": "YulIdentifier", + "src": "2588:5:17" + }, + { + "kind": "number", + "nativeSrc": "2595:1:17", + "nodeType": "YulLiteral", + "src": "2595:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "2581:6:17", + "nodeType": "YulIdentifier", + "src": "2581:6:17" + }, + "nativeSrc": "2581:16:17", + "nodeType": "YulFunctionCall", + "src": "2581:16:17" + }, + "nativeSrc": "2581:16:17", + "nodeType": "YulExpressionStatement", + "src": "2581:16:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "start", + "nativeSrc": "2529:5:17", + "nodeType": "YulIdentifier", + "src": "2529:5:17" + }, + { + "name": "_1", + "nativeSrc": "2536:2:17", + "nodeType": "YulIdentifier", + "src": "2536:2:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "2526:2:17", + "nodeType": "YulIdentifier", + "src": "2526:2:17" + }, + "nativeSrc": "2526:13:17", + "nodeType": "YulFunctionCall", + "src": "2526:13:17" + }, + "nativeSrc": "2518:81:17", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "2540:26:17", + "nodeType": "YulBlock", + "src": "2540:26:17", + "statements": [ + { + "nativeSrc": "2542:22:17", + "nodeType": "YulAssignment", + "src": "2542:22:17", + "value": { + "arguments": [ + { + "name": "start", + "nativeSrc": "2555:5:17", + "nodeType": "YulIdentifier", + "src": "2555:5:17" + }, + { + "kind": "number", + "nativeSrc": "2562:1:17", + "nodeType": "YulLiteral", + "src": "2562:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2551:3:17", + "nodeType": "YulIdentifier", + "src": "2551:3:17" + }, + "nativeSrc": "2551:13:17", + "nodeType": "YulFunctionCall", + "src": "2551:13:17" + }, + "variableNames": [ + { + "name": "start", + "nativeSrc": "2542:5:17", + "nodeType": "YulIdentifier", + "src": "2542:5:17" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "2522:3:17", + "nodeType": "YulBlock", + "src": "2522:3:17", + "statements": [] + }, + "src": "2518:81:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "len", + "nativeSrc": "2194:3:17", + "nodeType": "YulIdentifier", + "src": "2194:3:17" + }, + { + "kind": "number", + "nativeSrc": "2199:2:17", + "nodeType": "YulLiteral", + "src": "2199:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "2191:2:17", + "nodeType": "YulIdentifier", + "src": "2191:2:17" + }, + "nativeSrc": "2191:11:17", + "nodeType": "YulFunctionCall", + "src": "2191:11:17" + }, + "nativeSrc": "2188:421:17", + "nodeType": "YulIf", + "src": "2188:421:17" + } + ] + }, + "name": "clean_up_bytearray_end_slots_string_storage", + "nativeSrc": "2097:518:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "array", + "nativeSrc": "2150:5:17", + "nodeType": "YulTypedName", + "src": "2150:5:17", + "type": "" + }, + { + "name": "len", + "nativeSrc": "2157:3:17", + "nodeType": "YulTypedName", + "src": "2157:3:17", + "type": "" + }, + { + "name": "startIndex", + "nativeSrc": "2162:10:17", + "nodeType": "YulTypedName", + "src": "2162:10:17", + "type": "" + } + ], + "src": "2097:518:17" + }, + { + "body": { + "nativeSrc": "2705:81:17", + "nodeType": "YulBlock", + "src": "2705:81:17", + "statements": [ + { + "nativeSrc": "2715:65:17", + "nodeType": "YulAssignment", + "src": "2715:65:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "data", + "nativeSrc": "2730:4:17", + "nodeType": "YulIdentifier", + "src": "2730:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2748:1:17", + "nodeType": "YulLiteral", + "src": "2748:1:17", + "type": "", + "value": "3" + }, + { + "name": "len", + "nativeSrc": "2751:3:17", + "nodeType": "YulIdentifier", + "src": "2751:3:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2744:3:17", + "nodeType": "YulIdentifier", + "src": "2744:3:17" + }, + "nativeSrc": "2744:11:17", + "nodeType": "YulFunctionCall", + "src": "2744:11:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2761:1:17", + "nodeType": "YulLiteral", + "src": "2761:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "2757:3:17", + "nodeType": "YulIdentifier", + "src": "2757:3:17" + }, + "nativeSrc": "2757:6:17", + "nodeType": "YulFunctionCall", + "src": "2757:6:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "2740:3:17", + "nodeType": "YulIdentifier", + "src": "2740:3:17" + }, + "nativeSrc": "2740:24:17", + "nodeType": "YulFunctionCall", + "src": "2740:24:17" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "2736:3:17", + "nodeType": "YulIdentifier", + "src": "2736:3:17" + }, + "nativeSrc": "2736:29:17", + "nodeType": "YulFunctionCall", + "src": "2736:29:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2726:3:17", + "nodeType": "YulIdentifier", + "src": "2726:3:17" + }, + "nativeSrc": "2726:40:17", + "nodeType": "YulFunctionCall", + "src": "2726:40:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2772:1:17", + "nodeType": "YulLiteral", + "src": "2772:1:17", + "type": "", + "value": "1" + }, + { + "name": "len", + "nativeSrc": "2775:3:17", + "nodeType": "YulIdentifier", + "src": "2775:3:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2768:3:17", + "nodeType": "YulIdentifier", + "src": "2768:3:17" + }, + "nativeSrc": "2768:11:17", + "nodeType": "YulFunctionCall", + "src": "2768:11:17" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "2723:2:17", + "nodeType": "YulIdentifier", + "src": "2723:2:17" + }, + "nativeSrc": "2723:57:17", + "nodeType": "YulFunctionCall", + "src": "2723:57:17" + }, + "variableNames": [ + { + "name": "used", + "nativeSrc": "2715:4:17", + "nodeType": "YulIdentifier", + "src": "2715:4:17" + } + ] + } + ] + }, + "name": "extract_used_part_and_set_length_of_short_byte_array", + "nativeSrc": "2620:166:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "data", + "nativeSrc": "2682:4:17", + "nodeType": "YulTypedName", + "src": "2682:4:17", + "type": "" + }, + { + "name": "len", + "nativeSrc": "2688:3:17", + "nodeType": "YulTypedName", + "src": "2688:3:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "used", + "nativeSrc": "2696:4:17", + "nodeType": "YulTypedName", + "src": "2696:4:17", + "type": "" + } + ], + "src": "2620:166:17" + }, + { + "body": { + "nativeSrc": "2887:1203:17", + "nodeType": "YulBlock", + "src": "2887:1203:17", + "statements": [ + { + "nativeSrc": "2897:24:17", + "nodeType": "YulVariableDeclaration", + "src": "2897:24:17", + "value": { + "arguments": [ + { + "name": "src", + "nativeSrc": "2917:3:17", + "nodeType": "YulIdentifier", + "src": "2917:3:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "2911:5:17", + "nodeType": "YulIdentifier", + "src": "2911:5:17" + }, + "nativeSrc": "2911:10:17", + "nodeType": "YulFunctionCall", + "src": "2911:10:17" + }, + "variables": [ + { + "name": "newLen", + "nativeSrc": "2901:6:17", + "nodeType": "YulTypedName", + "src": "2901:6:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2964:22:17", + "nodeType": "YulBlock", + "src": "2964:22:17", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "2966:16:17", + "nodeType": "YulIdentifier", + "src": "2966:16:17" + }, + "nativeSrc": "2966:18:17", + "nodeType": "YulFunctionCall", + "src": "2966:18:17" + }, + "nativeSrc": "2966:18:17", + "nodeType": "YulExpressionStatement", + "src": "2966:18:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "2936:6:17", + "nodeType": "YulIdentifier", + "src": "2936:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2952:2:17", + "nodeType": "YulLiteral", + "src": "2952:2:17", + "type": "", + "value": "64" + }, + { + "kind": "number", + "nativeSrc": "2956:1:17", + "nodeType": "YulLiteral", + "src": "2956:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2948:3:17", + "nodeType": "YulIdentifier", + "src": "2948:3:17" + }, + "nativeSrc": "2948:10:17", + "nodeType": "YulFunctionCall", + "src": "2948:10:17" + }, + { + "kind": "number", + "nativeSrc": "2960:1:17", + "nodeType": "YulLiteral", + "src": "2960:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2944:3:17", + "nodeType": "YulIdentifier", + "src": "2944:3:17" + }, + "nativeSrc": "2944:18:17", + "nodeType": "YulFunctionCall", + "src": "2944:18:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "2933:2:17", + "nodeType": "YulIdentifier", + "src": "2933:2:17" + }, + "nativeSrc": "2933:30:17", + "nodeType": "YulFunctionCall", + "src": "2933:30:17" + }, + "nativeSrc": "2930:56:17", + "nodeType": "YulIf", + "src": "2930:56:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "3039:4:17", + "nodeType": "YulIdentifier", + "src": "3039:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "slot", + "nativeSrc": "3077:4:17", + "nodeType": "YulIdentifier", + "src": "3077:4:17" + } + ], + "functionName": { + "name": "sload", + "nativeSrc": "3071:5:17", + "nodeType": "YulIdentifier", + "src": "3071:5:17" + }, + "nativeSrc": "3071:11:17", + "nodeType": "YulFunctionCall", + "src": "3071:11:17" + } + ], + "functionName": { + "name": "extract_byte_array_length", + "nativeSrc": "3045:25:17", + "nodeType": "YulIdentifier", + "src": "3045:25:17" + }, + "nativeSrc": "3045:38:17", + "nodeType": "YulFunctionCall", + "src": "3045:38:17" + }, + { + "name": "newLen", + "nativeSrc": "3085:6:17", + "nodeType": "YulIdentifier", + "src": "3085:6:17" + } + ], + "functionName": { + "name": "clean_up_bytearray_end_slots_string_storage", + "nativeSrc": "2995:43:17", + "nodeType": "YulIdentifier", + "src": "2995:43:17" + }, + "nativeSrc": "2995:97:17", + "nodeType": "YulFunctionCall", + "src": "2995:97:17" + }, + "nativeSrc": "2995:97:17", + "nodeType": "YulExpressionStatement", + "src": "2995:97:17" + }, + { + "nativeSrc": "3101:18:17", + "nodeType": "YulVariableDeclaration", + "src": "3101:18:17", + "value": { + "kind": "number", + "nativeSrc": "3118:1:17", + "nodeType": "YulLiteral", + "src": "3118:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "srcOffset", + "nativeSrc": "3105:9:17", + "nodeType": "YulTypedName", + "src": "3105:9:17", + "type": "" + } + ] + }, + { + "nativeSrc": "3128:17:17", + "nodeType": "YulAssignment", + "src": "3128:17:17", + "value": { + "kind": "number", + "nativeSrc": "3141:4:17", + "nodeType": "YulLiteral", + "src": "3141:4:17", + "type": "", + "value": "0x20" + }, + "variableNames": [ + { + "name": "srcOffset", + "nativeSrc": "3128:9:17", + "nodeType": "YulIdentifier", + "src": "3128:9:17" + } + ] + }, + { + "cases": [ + { + "body": { + "nativeSrc": "3191:642:17", + "nodeType": "YulBlock", + "src": "3191:642:17", + "statements": [ + { + "nativeSrc": "3205:35:17", + "nodeType": "YulVariableDeclaration", + "src": "3205:35:17", + "value": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "3224:6:17", + "nodeType": "YulIdentifier", + "src": "3224:6:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3236:2:17", + "nodeType": "YulLiteral", + "src": "3236:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3232:3:17", + "nodeType": "YulIdentifier", + "src": "3232:3:17" + }, + "nativeSrc": "3232:7:17", + "nodeType": "YulFunctionCall", + "src": "3232:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3220:3:17", + "nodeType": "YulIdentifier", + "src": "3220:3:17" + }, + "nativeSrc": "3220:20:17", + "nodeType": "YulFunctionCall", + "src": "3220:20:17" + }, + "variables": [ + { + "name": "loopEnd", + "nativeSrc": "3209:7:17", + "nodeType": "YulTypedName", + "src": "3209:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "3253:49:17", + "nodeType": "YulVariableDeclaration", + "src": "3253:49:17", + "value": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "3297:4:17", + "nodeType": "YulIdentifier", + "src": "3297:4:17" + } + ], + "functionName": { + "name": "array_dataslot_string_storage", + "nativeSrc": "3267:29:17", + "nodeType": "YulIdentifier", + "src": "3267:29:17" + }, + "nativeSrc": "3267:35:17", + "nodeType": "YulFunctionCall", + "src": "3267:35:17" + }, + "variables": [ + { + "name": "dstPtr", + "nativeSrc": "3257:6:17", + "nodeType": "YulTypedName", + "src": "3257:6:17", + "type": "" + } + ] + }, + { + "nativeSrc": "3315:10:17", + "nodeType": "YulVariableDeclaration", + "src": "3315:10:17", + "value": { + "kind": "number", + "nativeSrc": "3324:1:17", + "nodeType": "YulLiteral", + "src": "3324:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "3319:1:17", + "nodeType": "YulTypedName", + "src": "3319:1:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3395:165:17", + "nodeType": "YulBlock", + "src": "3395:165:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "3420:6:17", + "nodeType": "YulIdentifier", + "src": "3420:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "3438:3:17", + "nodeType": "YulIdentifier", + "src": "3438:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "3443:9:17", + "nodeType": "YulIdentifier", + "src": "3443:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3434:3:17", + "nodeType": "YulIdentifier", + "src": "3434:3:17" + }, + "nativeSrc": "3434:19:17", + "nodeType": "YulFunctionCall", + "src": "3434:19:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3428:5:17", + "nodeType": "YulIdentifier", + "src": "3428:5:17" + }, + "nativeSrc": "3428:26:17", + "nodeType": "YulFunctionCall", + "src": "3428:26:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "3413:6:17", + "nodeType": "YulIdentifier", + "src": "3413:6:17" + }, + "nativeSrc": "3413:42:17", + "nodeType": "YulFunctionCall", + "src": "3413:42:17" + }, + "nativeSrc": "3413:42:17", + "nodeType": "YulExpressionStatement", + "src": "3413:42:17" + }, + { + "nativeSrc": "3472:24:17", + "nodeType": "YulAssignment", + "src": "3472:24:17", + "value": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "3486:6:17", + "nodeType": "YulIdentifier", + "src": "3486:6:17" + }, + { + "kind": "number", + "nativeSrc": "3494:1:17", + "nodeType": "YulLiteral", + "src": "3494:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3482:3:17", + "nodeType": "YulIdentifier", + "src": "3482:3:17" + }, + "nativeSrc": "3482:14:17", + "nodeType": "YulFunctionCall", + "src": "3482:14:17" + }, + "variableNames": [ + { + "name": "dstPtr", + "nativeSrc": "3472:6:17", + "nodeType": "YulIdentifier", + "src": "3472:6:17" + } + ] + }, + { + "nativeSrc": "3513:33:17", + "nodeType": "YulAssignment", + "src": "3513:33:17", + "value": { + "arguments": [ + { + "name": "srcOffset", + "nativeSrc": "3530:9:17", + "nodeType": "YulIdentifier", + "src": "3530:9:17" + }, + { + "kind": "number", + "nativeSrc": "3541:4:17", + "nodeType": "YulLiteral", + "src": "3541:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3526:3:17", + "nodeType": "YulIdentifier", + "src": "3526:3:17" + }, + "nativeSrc": "3526:20:17", + "nodeType": "YulFunctionCall", + "src": "3526:20:17" + }, + "variableNames": [ + { + "name": "srcOffset", + "nativeSrc": "3513:9:17", + "nodeType": "YulIdentifier", + "src": "3513:9:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3349:1:17", + "nodeType": "YulIdentifier", + "src": "3349:1:17" + }, + { + "name": "loopEnd", + "nativeSrc": "3352:7:17", + "nodeType": "YulIdentifier", + "src": "3352:7:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "3346:2:17", + "nodeType": "YulIdentifier", + "src": "3346:2:17" + }, + "nativeSrc": "3346:14:17", + "nodeType": "YulFunctionCall", + "src": "3346:14:17" + }, + "nativeSrc": "3338:222:17", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "3361:21:17", + "nodeType": "YulBlock", + "src": "3361:21:17", + "statements": [ + { + "nativeSrc": "3363:17:17", + "nodeType": "YulAssignment", + "src": "3363:17:17", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3372:1:17", + "nodeType": "YulIdentifier", + "src": "3372:1:17" + }, + { + "kind": "number", + "nativeSrc": "3375:4:17", + "nodeType": "YulLiteral", + "src": "3375:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3368:3:17", + "nodeType": "YulIdentifier", + "src": "3368:3:17" + }, + "nativeSrc": "3368:12:17", + "nodeType": "YulFunctionCall", + "src": "3368:12:17" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "3363:1:17", + "nodeType": "YulIdentifier", + "src": "3363:1:17" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "3342:3:17", + "nodeType": "YulBlock", + "src": "3342:3:17", + "statements": [] + }, + "src": "3338:222:17" + }, + { + "body": { + "nativeSrc": "3608:166:17", + "nodeType": "YulBlock", + "src": "3608:166:17", + "statements": [ + { + "nativeSrc": "3626:43:17", + "nodeType": "YulVariableDeclaration", + "src": "3626:43:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "3653:3:17", + "nodeType": "YulIdentifier", + "src": "3653:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "3658:9:17", + "nodeType": "YulIdentifier", + "src": "3658:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3649:3:17", + "nodeType": "YulIdentifier", + "src": "3649:3:17" + }, + "nativeSrc": "3649:19:17", + "nodeType": "YulFunctionCall", + "src": "3649:19:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3643:5:17", + "nodeType": "YulIdentifier", + "src": "3643:5:17" + }, + "nativeSrc": "3643:26:17", + "nodeType": "YulFunctionCall", + "src": "3643:26:17" + }, + "variables": [ + { + "name": "lastValue", + "nativeSrc": "3630:9:17", + "nodeType": "YulTypedName", + "src": "3630:9:17", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "3693:6:17", + "nodeType": "YulIdentifier", + "src": "3693:6:17" + }, + { + "arguments": [ + { + "name": "lastValue", + "nativeSrc": "3705:9:17", + "nodeType": "YulIdentifier", + "src": "3705:9:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3732:1:17", + "nodeType": "YulLiteral", + "src": "3732:1:17", + "type": "", + "value": "3" + }, + { + "name": "newLen", + "nativeSrc": "3735:6:17", + "nodeType": "YulIdentifier", + "src": "3735:6:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3728:3:17", + "nodeType": "YulIdentifier", + "src": "3728:3:17" + }, + "nativeSrc": "3728:14:17", + "nodeType": "YulFunctionCall", + "src": "3728:14:17" + }, + { + "kind": "number", + "nativeSrc": "3744:3:17", + "nodeType": "YulLiteral", + "src": "3744:3:17", + "type": "", + "value": "248" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3724:3:17", + "nodeType": "YulIdentifier", + "src": "3724:3:17" + }, + "nativeSrc": "3724:24:17", + "nodeType": "YulFunctionCall", + "src": "3724:24:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3754:1:17", + "nodeType": "YulLiteral", + "src": "3754:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3750:3:17", + "nodeType": "YulIdentifier", + "src": "3750:3:17" + }, + "nativeSrc": "3750:6:17", + "nodeType": "YulFunctionCall", + "src": "3750:6:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "3720:3:17", + "nodeType": "YulIdentifier", + "src": "3720:3:17" + }, + "nativeSrc": "3720:37:17", + "nodeType": "YulFunctionCall", + "src": "3720:37:17" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3716:3:17", + "nodeType": "YulIdentifier", + "src": "3716:3:17" + }, + "nativeSrc": "3716:42:17", + "nodeType": "YulFunctionCall", + "src": "3716:42:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3701:3:17", + "nodeType": "YulIdentifier", + "src": "3701:3:17" + }, + "nativeSrc": "3701:58:17", + "nodeType": "YulFunctionCall", + "src": "3701:58:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "3686:6:17", + "nodeType": "YulIdentifier", + "src": "3686:6:17" + }, + "nativeSrc": "3686:74:17", + "nodeType": "YulFunctionCall", + "src": "3686:74:17" + }, + "nativeSrc": "3686:74:17", + "nodeType": "YulExpressionStatement", + "src": "3686:74:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "loopEnd", + "nativeSrc": "3579:7:17", + "nodeType": "YulIdentifier", + "src": "3579:7:17" + }, + { + "name": "newLen", + "nativeSrc": "3588:6:17", + "nodeType": "YulIdentifier", + "src": "3588:6:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "3576:2:17", + "nodeType": "YulIdentifier", + "src": "3576:2:17" + }, + "nativeSrc": "3576:19:17", + "nodeType": "YulFunctionCall", + "src": "3576:19:17" + }, + "nativeSrc": "3573:201:17", + "nodeType": "YulIf", + "src": "3573:201:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "3794:4:17", + "nodeType": "YulIdentifier", + "src": "3794:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3808:1:17", + "nodeType": "YulLiteral", + "src": "3808:1:17", + "type": "", + "value": "1" + }, + { + "name": "newLen", + "nativeSrc": "3811:6:17", + "nodeType": "YulIdentifier", + "src": "3811:6:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3804:3:17", + "nodeType": "YulIdentifier", + "src": "3804:3:17" + }, + "nativeSrc": "3804:14:17", + "nodeType": "YulFunctionCall", + "src": "3804:14:17" + }, + { + "kind": "number", + "nativeSrc": "3820:1:17", + "nodeType": "YulLiteral", + "src": "3820:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3800:3:17", + "nodeType": "YulIdentifier", + "src": "3800:3:17" + }, + "nativeSrc": "3800:22:17", + "nodeType": "YulFunctionCall", + "src": "3800:22:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "3787:6:17", + "nodeType": "YulIdentifier", + "src": "3787:6:17" + }, + "nativeSrc": "3787:36:17", + "nodeType": "YulFunctionCall", + "src": "3787:36:17" + }, + "nativeSrc": "3787:36:17", + "nodeType": "YulExpressionStatement", + "src": "3787:36:17" + } + ] + }, + "nativeSrc": "3184:649:17", + "nodeType": "YulCase", + "src": "3184:649:17", + "value": { + "kind": "number", + "nativeSrc": "3189:1:17", + "nodeType": "YulLiteral", + "src": "3189:1:17", + "type": "", + "value": "1" + } + }, + { + "body": { + "nativeSrc": "3850:234:17", + "nodeType": "YulBlock", + "src": "3850:234:17", + "statements": [ + { + "nativeSrc": "3864:14:17", + "nodeType": "YulVariableDeclaration", + "src": "3864:14:17", + "value": { + "kind": "number", + "nativeSrc": "3877:1:17", + "nodeType": "YulLiteral", + "src": "3877:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "3868:5:17", + "nodeType": "YulTypedName", + "src": "3868:5:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3913:67:17", + "nodeType": "YulBlock", + "src": "3913:67:17", + "statements": [ + { + "nativeSrc": "3931:35:17", + "nodeType": "YulAssignment", + "src": "3931:35:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "3950:3:17", + "nodeType": "YulIdentifier", + "src": "3950:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "3955:9:17", + "nodeType": "YulIdentifier", + "src": "3955:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3946:3:17", + "nodeType": "YulIdentifier", + "src": "3946:3:17" + }, + "nativeSrc": "3946:19:17", + "nodeType": "YulFunctionCall", + "src": "3946:19:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3940:5:17", + "nodeType": "YulIdentifier", + "src": "3940:5:17" + }, + "nativeSrc": "3940:26:17", + "nodeType": "YulFunctionCall", + "src": "3940:26:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "3931:5:17", + "nodeType": "YulIdentifier", + "src": "3931:5:17" + } + ] + } + ] + }, + "condition": { + "name": "newLen", + "nativeSrc": "3894:6:17", + "nodeType": "YulIdentifier", + "src": "3894:6:17" + }, + "nativeSrc": "3891:89:17", + "nodeType": "YulIf", + "src": "3891:89:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "4000:4:17", + "nodeType": "YulIdentifier", + "src": "4000:4:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "4059:5:17", + "nodeType": "YulIdentifier", + "src": "4059:5:17" + }, + { + "name": "newLen", + "nativeSrc": "4066:6:17", + "nodeType": "YulIdentifier", + "src": "4066:6:17" + } + ], + "functionName": { + "name": "extract_used_part_and_set_length_of_short_byte_array", + "nativeSrc": "4006:52:17", + "nodeType": "YulIdentifier", + "src": "4006:52:17" + }, + "nativeSrc": "4006:67:17", + "nodeType": "YulFunctionCall", + "src": "4006:67:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "3993:6:17", + "nodeType": "YulIdentifier", + "src": "3993:6:17" + }, + "nativeSrc": "3993:81:17", + "nodeType": "YulFunctionCall", + "src": "3993:81:17" + }, + "nativeSrc": "3993:81:17", + "nodeType": "YulExpressionStatement", + "src": "3993:81:17" + } + ] + }, + "nativeSrc": "3842:242:17", + "nodeType": "YulCase", + "src": "3842:242:17", + "value": "default" + } + ], + "expression": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "3164:6:17", + "nodeType": "YulIdentifier", + "src": "3164:6:17" + }, + { + "kind": "number", + "nativeSrc": "3172:2:17", + "nodeType": "YulLiteral", + "src": "3172:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "3161:2:17", + "nodeType": "YulIdentifier", + "src": "3161:2:17" + }, + "nativeSrc": "3161:14:17", + "nodeType": "YulFunctionCall", + "src": "3161:14:17" + }, + "nativeSrc": "3154:930:17", + "nodeType": "YulSwitch", + "src": "3154:930:17" + } + ] + }, + "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage", + "nativeSrc": "2791:1299:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "slot", + "nativeSrc": "2872:4:17", + "nodeType": "YulTypedName", + "src": "2872:4:17", + "type": "" + }, + { + "name": "src", + "nativeSrc": "2878:3:17", + "nodeType": "YulTypedName", + "src": "2878:3:17", + "type": "" + } + ], + "src": "2791:1299:17" + } + ] + }, + "contents": "{\n { }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_string_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let length := mload(offset)\n if gt(length, sub(shl(64, 1), 1)) { panic_error_0x41() }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(length, 0x1f), not(31)), 63), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, length)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n mcopy(add(memPtr, 0x20), add(offset, 0x20), length)\n mstore(add(add(memPtr, length), 0x20), 0)\n array := memPtr\n }\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let offset := mload(headStart)\n if gt(offset, sub(shl(64, 1), 1)) { revert(0, 0) }\n value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n let offset_1 := mload(add(headStart, 32))\n if gt(offset_1, sub(shl(64, 1), 1)) { revert(0, 0) }\n value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n let value := mload(add(headStart, 64))\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n value2 := value\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _1 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _1) { start := add(start, 1) }\n { sstore(start, 0) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 0x20)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n}", + "id": 17, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "60a060405234801561000f575f5ffd5b50604051610a32380380610a3283398101604081905261002e916100f7565b8282600361003c83826101f8565b50600461004982826101f8565b50505060ff16608052506102b29050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007d575f5ffd5b81516001600160401b038111156100965761009661005a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c4576100c461005a565b6040528181528382016020018510156100db575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610109575f5ffd5b83516001600160401b0381111561011e575f5ffd5b61012a8682870161006e565b602086015190945090506001600160401b03811115610147575f5ffd5b6101538682870161006e565b925050604084015160ff81168114610169575f5ffd5b809150509250925092565b600181811c9082168061018857607f821691505b6020821081036101a657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f357805f5260205f20601f840160051c810160208510156101d15750805b601f840160051c820191505b818110156101f0575f81556001016101dd565b50505b505050565b81516001600160401b038111156102115761021161005a565b6102258161021f8454610174565b846101ac565b6020601f821160018114610257575f83156102405750848201515b5f19600385901b1c1916600184901b1784556101f0565b5f84815260208120601f198516915b828110156102865787850151825560209485019460019092019101610266565b50848210156102a357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516107686102ca5f395f61010c01526107685ff3fe608060405234801561000f575f5ffd5b506004361061009b575f3560e01c806340c10f191161006357806340c10f191461013657806370a082311461014b57806395d89b4114610173578063a9059cbb1461017b578063dd62ed3e1461018e575f5ffd5b806306fdde031461009f578063095ea7b3146100bd57806318160ddd146100e057806323b872dd146100f2578063313ce56714610105575b5f5ffd5b6100a76101c6565b6040516100b491906105d8565b60405180910390f35b6100d06100cb366004610628565b610256565b60405190151581526020016100b4565b6002545b6040519081526020016100b4565b6100d0610100366004610650565b61026f565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100b4565b610149610144366004610628565b610292565b005b6100e461015936600461068a565b6001600160a01b03165f9081526020819052604090205490565b6100a76102a0565b6100d0610189366004610628565b6102af565b6100e461019c3660046106aa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101d5906106db565b80601f0160208091040260200160405190810160405280929190818152602001828054610201906106db565b801561024c5780601f106102235761010080835404028352916020019161024c565b820191905f5260205f20905b81548152906001019060200180831161022f57829003601f168201915b5050505050905090565b5f336102638185856102bc565b60019150505b92915050565b5f3361027c8582856102ce565b61028785858561034f565b506001949350505050565b61029c82826103ac565b5050565b6060600480546101d5906106db565b5f3361026381858561034f565b6102c983838360016103e0565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610349578181101561033b57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61034984848484035f6103e0565b50505050565b6001600160a01b03831661037857604051634b637e8f60e11b81525f6004820152602401610332565b6001600160a01b0382166103a15760405163ec442f0560e01b81525f6004820152602401610332565b6102c98383836104b2565b6001600160a01b0382166103d55760405163ec442f0560e01b81525f6004820152602401610332565b61029c5f83836104b2565b6001600160a01b0384166104095760405163e602df0560e01b81525f6004820152602401610332565b6001600160a01b03831661043257604051634a1406b160e11b81525f6004820152602401610332565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561034957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104a491815260200190565b60405180910390a350505050565b6001600160a01b0383166104dc578060025f8282546104d19190610713565b9091555061054c9050565b6001600160a01b0383165f908152602081905260409020548181101561052e5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610332565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661056857600280548290039055610586565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105cb91815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610623575f5ffd5b919050565b5f5f60408385031215610639575f5ffd5b6106428361060d565b946020939093013593505050565b5f5f5f60608486031215610662575f5ffd5b61066b8461060d565b92506106796020850161060d565b929592945050506040919091013590565b5f6020828403121561069a575f5ffd5b6106a38261060d565b9392505050565b5f5f604083850312156106bb575f5ffd5b6106c48361060d565b91506106d26020840161060d565b90509250929050565b600181811c908216806106ef57607f821691505b60208210810361070d57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561026957634e487b7160e01b5f52601160045260245ffdfea2646970667358221220051c929eef2ca859049f293d34cdcbebf1dfa98589ada2fc7b817014e2c28bd864736f6c634300081c0033", + "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xA32 CODESIZE SUB DUP1 PUSH2 0xA32 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2E SWAP2 PUSH2 0xF7 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x3 PUSH2 0x3C DUP4 DUP3 PUSH2 0x1F8 JUMP JUMPDEST POP PUSH1 0x4 PUSH2 0x49 DUP3 DUP3 PUSH2 0x1F8 JUMP JUMPDEST POP POP POP PUSH1 0xFF AND PUSH1 0x80 MSTORE POP PUSH2 0x2B2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7D JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x96 JUMPI PUSH2 0x96 PUSH2 0x5A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xC4 JUMPI PUSH2 0xC4 PUSH2 0x5A JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP6 LT ISZERO PUSH2 0xDB JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD MCOPY PUSH0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x109 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x11E JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x12A DUP7 DUP3 DUP8 ADD PUSH2 0x6E JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP1 SWAP5 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x147 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x153 DUP7 DUP3 DUP8 ADD PUSH2 0x6E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x169 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x188 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x1A6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1F3 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x1D1 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1F0 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DD JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x211 JUMPI PUSH2 0x211 PUSH2 0x5A JUMP JUMPDEST PUSH2 0x225 DUP2 PUSH2 0x21F DUP5 SLOAD PUSH2 0x174 JUMP JUMPDEST DUP5 PUSH2 0x1AC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x257 JUMPI PUSH0 DUP4 ISZERO PUSH2 0x240 JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x1F0 JUMP JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x286 JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x266 JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0x2A3 JUMPI DUP7 DUP5 ADD MLOAD PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x768 PUSH2 0x2CA PUSH0 CODECOPY PUSH0 PUSH2 0x10C ADD MSTORE PUSH2 0x768 PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9B JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x63 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x173 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x18E JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x9F JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xE0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xF2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x105 JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0xA7 PUSH2 0x1C6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x5D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD0 PUSH2 0xCB CALLDATASIZE PUSH1 0x4 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x256 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH2 0xD0 PUSH2 0x100 CALLDATASIZE PUSH1 0x4 PUSH2 0x650 JUMP JUMPDEST PUSH2 0x26F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH2 0x149 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x292 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE4 PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x68A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xA7 PUSH2 0x2A0 JUMP JUMPDEST PUSH2 0xD0 PUSH2 0x189 CALLDATASIZE PUSH1 0x4 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST PUSH2 0xE4 PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x1D5 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x201 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP1 ISZERO PUSH2 0x24C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x223 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x24C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x22F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 CALLER PUSH2 0x263 DUP2 DUP6 DUP6 PUSH2 0x2BC JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 CALLER PUSH2 0x27C DUP6 DUP3 DUP6 PUSH2 0x2CE JUMP JUMPDEST PUSH2 0x287 DUP6 DUP6 DUP6 PUSH2 0x34F JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x29C DUP3 DUP3 PUSH2 0x3AC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x1D5 SWAP1 PUSH2 0x6DB JUMP JUMPDEST PUSH0 CALLER PUSH2 0x263 DUP2 DUP6 DUP6 PUSH2 0x34F JUMP JUMPDEST PUSH2 0x2C9 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x3E0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH0 NOT DUP2 LT ISZERO PUSH2 0x349 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x33B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x349 DUP5 DUP5 DUP5 DUP5 SUB PUSH0 PUSH2 0x3E0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x378 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH2 0x2C9 DUP4 DUP4 DUP4 PUSH2 0x4B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH2 0x29C PUSH0 DUP4 DUP4 PUSH2 0x4B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x409 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x432 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x349 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x4A4 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x4DC JUMPI DUP1 PUSH1 0x2 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x4D1 SWAP2 SWAP1 PUSH2 0x713 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x54C SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x52E JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x568 JUMPI PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x586 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x5CB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD PUSH1 0x40 DUP6 ADD MCOPY PUSH0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x623 JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x639 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x642 DUP4 PUSH2 0x60D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x662 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x66B DUP5 PUSH2 0x60D JUMP JUMPDEST SWAP3 POP PUSH2 0x679 PUSH1 0x20 DUP6 ADD PUSH2 0x60D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x69A JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x6A3 DUP3 PUSH2 0x60D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6BB JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x6C4 DUP4 PUSH2 0x60D JUMP JUMPDEST SWAP2 POP PUSH2 0x6D2 PUSH1 0x20 DUP5 ADD PUSH2 0x60D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x6EF JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x70D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x269 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SDIV SHR SWAP3 SWAP15 0xEF 0x2C 0xA8 MSIZE DIV SWAP16 0x29 RETURNDATASIZE CALLVALUE 0xCD 0xCB 0xEB CALL 0xDF 0xA9 DUP6 DUP10 0xAD LOG2 0xFC PUSH28 0x817014E2C28BD864736F6C634300081C003300000000000000000000 ", + "sourceMap": "128:408:15:-:0;;;206:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;285:5;292:7;1648:5:4;:13;285:5:15;1648::4;:13;:::i;:::-;-1:-1:-1;1671:7:4;:17;1681:7;1671;:17;:::i;:::-;-1:-1:-1;;;311:25:15::1;;;::::0;-1:-1:-1;128:408:15;;-1:-1:-1;128:408:15;14:127:17;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:723;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;298:13;;-1:-1:-1;;;;;323:30:17;;320:56;;;356:18;;:::i;:::-;405:2;399:9;497:2;459:17;;-1:-1:-1;;455:31:17;;;488:2;451:40;447:54;435:67;;-1:-1:-1;;;;;517:34:17;;553:22;;;514:62;511:88;;;579:18;;:::i;:::-;615:2;608:22;639;;;680:19;;;701:4;676:30;673:39;-1:-1:-1;670:59:17;;;725:1;722;715:12;670:59;782:6;775:4;767:6;763:17;756:4;748:6;744:17;738:51;837:1;809:19;;;830:4;805:30;798:41;;;;813:6;146:723;-1:-1:-1;;;146:723:17:o;874:707::-;980:6;988;996;1049:2;1037:9;1028:7;1024:23;1020:32;1017:52;;;1065:1;1062;1055:12;1017:52;1092:16;;-1:-1:-1;;;;;1120:30:17;;1117:50;;;1163:1;1160;1153:12;1117:50;1186:61;1239:7;1230:6;1219:9;1215:22;1186:61;:::i;:::-;1293:2;1278:18;;1272:25;1176:71;;-1:-1:-1;1272:25:17;-1:-1:-1;;;;;;1309:32:17;;1306:52;;;1354:1;1351;1344:12;1306:52;1377:63;1432:7;1421:8;1410:9;1406:24;1377:63;:::i;:::-;1367:73;;;1483:2;1472:9;1468:18;1462:25;1527:4;1520:5;1516:16;1509:5;1506:27;1496:55;;1547:1;1544;1537:12;1496:55;1570:5;1560:15;;;874:707;;;;;:::o;1586:380::-;1665:1;1661:12;;;;1708;;;1729:61;;1783:4;1775:6;1771:17;1761:27;;1729:61;1836:2;1828:6;1825:14;1805:18;1802:38;1799:161;;1882:10;1877:3;1873:20;1870:1;1863:31;1917:4;1914:1;1907:15;1945:4;1942:1;1935:15;1799:161;;1586:380;;;:::o;2097:518::-;2199:2;2194:3;2191:11;2188:421;;;2235:5;2232:1;2225:16;2279:4;2276:1;2266:18;2349:2;2337:10;2333:19;2330:1;2326:27;2320:4;2316:38;2385:4;2373:10;2370:20;2367:47;;;-1:-1:-1;2408:4:17;2367:47;2463:2;2458:3;2454:12;2451:1;2447:20;2441:4;2437:31;2427:41;;2518:81;2536:2;2529:5;2526:13;2518:81;;;2595:1;2581:16;;2562:1;2551:13;2518:81;;;2522:3;;2188:421;2097:518;;;:::o;2791:1299::-;2911:10;;-1:-1:-1;;;;;2933:30:17;;2930:56;;;2966:18;;:::i;:::-;2995:97;3085:6;3045:38;3077:4;3071:11;3045:38;:::i;:::-;3039:4;2995:97;:::i;:::-;3141:4;3172:2;3161:14;;3189:1;3184:649;;;;3877:1;3894:6;3891:89;;;-1:-1:-1;3946:19:17;;;3940:26;3891:89;-1:-1:-1;;2748:1:17;2744:11;;;2740:24;2736:29;2726:40;2772:1;2768:11;;;2723:57;3993:81;;3154:930;;3184:649;2044:1;2037:14;;;2081:4;2068:18;;-1:-1:-1;;3220:20:17;;;3338:222;3352:7;3349:1;3346:14;3338:222;;;3434:19;;;3428:26;3413:42;;3541:4;3526:20;;;;3494:1;3482:14;;;;3368:12;3338:222;;;3342:3;3588:6;3579:7;3576:19;3573:201;;;3649:19;;;3643:26;-1:-1:-1;;3732:1:17;3728:14;;;3744:3;3724:24;3720:37;3716:42;3701:58;3686:74;;3573:201;-1:-1:-1;;;;3820:1:17;3804:14;;;3800:22;3787:36;;-1:-1:-1;2791:1299:17:o;:::-;128:408:15;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@_approve_632": { + "entryPoint": 700, + "id": 632, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@_approve_692": { + "entryPoint": 992, + "id": 692, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@_mint_581": { + "entryPoint": 940, + "id": 581, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_msgSender_1312": { + "entryPoint": null, + "id": 1312, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_spendAllowance_740": { + "entryPoint": 718, + "id": 740, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@_transfer_471": { + "entryPoint": 847, + "id": 471, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@_update_548": { + "entryPoint": 1202, + "id": 548, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@allowance_368": { + "entryPoint": null, + "id": 368, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@approve_392": { + "entryPoint": 598, + "id": 392, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@balanceOf_327": { + "entryPoint": null, + "id": 327, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@decimals_1934": { + "entryPoint": null, + "id": 1934, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@mint_1947": { + "entryPoint": 658, + "id": 1947, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@name_287": { + "entryPoint": 454, + "id": 287, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@symbol_296": { + "entryPoint": 672, + "id": 296, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@totalSupply_314": { + "entryPoint": null, + "id": 314, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@transfer_351": { + "entryPoint": 687, + "id": 351, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@transferFrom_424": { + "entryPoint": 623, + "id": 424, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_address": { + "entryPoint": 1549, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address": { + "entryPoint": 1674, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_address": { + "entryPoint": 1706, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_addresst_addresst_uint256": { + "entryPoint": 1616, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_addresst_uint256": { + "entryPoint": 1576, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 1496, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 1811, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "extract_byte_array_length": { + "entryPoint": 1755, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:3485:17", + "nodeType": "YulBlock", + "src": "0:3485:17", + "statements": [ + { + "nativeSrc": "6:3:17", + "nodeType": "YulBlock", + "src": "6:3:17", + "statements": [] + }, + { + "body": { + "nativeSrc": "135:297:17", + "nodeType": "YulBlock", + "src": "135:297:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "152:9:17", + "nodeType": "YulIdentifier", + "src": "152:9:17" + }, + { + "kind": "number", + "nativeSrc": "163:2:17", + "nodeType": "YulLiteral", + "src": "163:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "145:6:17", + "nodeType": "YulIdentifier", + "src": "145:6:17" + }, + "nativeSrc": "145:21:17", + "nodeType": "YulFunctionCall", + "src": "145:21:17" + }, + "nativeSrc": "145:21:17", + "nodeType": "YulExpressionStatement", + "src": "145:21:17" + }, + { + "nativeSrc": "175:27:17", + "nodeType": "YulVariableDeclaration", + "src": "175:27:17", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "195:6:17", + "nodeType": "YulIdentifier", + "src": "195:6:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "189:5:17", + "nodeType": "YulIdentifier", + "src": "189:5:17" + }, + "nativeSrc": "189:13:17", + "nodeType": "YulFunctionCall", + "src": "189:13:17" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "179:6:17", + "nodeType": "YulTypedName", + "src": "179:6:17", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "222:9:17", + "nodeType": "YulIdentifier", + "src": "222:9:17" + }, + { + "kind": "number", + "nativeSrc": "233:2:17", + "nodeType": "YulLiteral", + "src": "233:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "218:3:17", + "nodeType": "YulIdentifier", + "src": "218:3:17" + }, + "nativeSrc": "218:18:17", + "nodeType": "YulFunctionCall", + "src": "218:18:17" + }, + { + "name": "length", + "nativeSrc": "238:6:17", + "nodeType": "YulIdentifier", + "src": "238:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "211:6:17", + "nodeType": "YulIdentifier", + "src": "211:6:17" + }, + "nativeSrc": "211:34:17", + "nodeType": "YulFunctionCall", + "src": "211:34:17" + }, + "nativeSrc": "211:34:17", + "nodeType": "YulExpressionStatement", + "src": "211:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "264:9:17", + "nodeType": "YulIdentifier", + "src": "264:9:17" + }, + { + "kind": "number", + "nativeSrc": "275:2:17", + "nodeType": "YulLiteral", + "src": "275:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "260:3:17", + "nodeType": "YulIdentifier", + "src": "260:3:17" + }, + "nativeSrc": "260:18:17", + "nodeType": "YulFunctionCall", + "src": "260:18:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "284:6:17", + "nodeType": "YulIdentifier", + "src": "284:6:17" + }, + { + "kind": "number", + "nativeSrc": "292:2:17", + "nodeType": "YulLiteral", + "src": "292:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "280:3:17", + "nodeType": "YulIdentifier", + "src": "280:3:17" + }, + "nativeSrc": "280:15:17", + "nodeType": "YulFunctionCall", + "src": "280:15:17" + }, + { + "name": "length", + "nativeSrc": "297:6:17", + "nodeType": "YulIdentifier", + "src": "297:6:17" + } + ], + "functionName": { + "name": "mcopy", + "nativeSrc": "254:5:17", + "nodeType": "YulIdentifier", + "src": "254:5:17" + }, + "nativeSrc": "254:50:17", + "nodeType": "YulFunctionCall", + "src": "254:50:17" + }, + "nativeSrc": "254:50:17", + "nodeType": "YulExpressionStatement", + "src": "254:50:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "328:9:17", + "nodeType": "YulIdentifier", + "src": "328:9:17" + }, + { + "name": "length", + "nativeSrc": "339:6:17", + "nodeType": "YulIdentifier", + "src": "339:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "324:3:17", + "nodeType": "YulIdentifier", + "src": "324:3:17" + }, + "nativeSrc": "324:22:17", + "nodeType": "YulFunctionCall", + "src": "324:22:17" + }, + { + "kind": "number", + "nativeSrc": "348:2:17", + "nodeType": "YulLiteral", + "src": "348:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "320:3:17", + "nodeType": "YulIdentifier", + "src": "320:3:17" + }, + "nativeSrc": "320:31:17", + "nodeType": "YulFunctionCall", + "src": "320:31:17" + }, + { + "kind": "number", + "nativeSrc": "353:1:17", + "nodeType": "YulLiteral", + "src": "353:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "313:6:17", + "nodeType": "YulIdentifier", + "src": "313:6:17" + }, + "nativeSrc": "313:42:17", + "nodeType": "YulFunctionCall", + "src": "313:42:17" + }, + "nativeSrc": "313:42:17", + "nodeType": "YulExpressionStatement", + "src": "313:42:17" + }, + { + "nativeSrc": "364:62:17", + "nodeType": "YulAssignment", + "src": "364:62:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "380:9:17", + "nodeType": "YulIdentifier", + "src": "380:9:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "399:6:17", + "nodeType": "YulIdentifier", + "src": "399:6:17" + }, + { + "kind": "number", + "nativeSrc": "407:2:17", + "nodeType": "YulLiteral", + "src": "407:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "395:3:17", + "nodeType": "YulIdentifier", + "src": "395:3:17" + }, + "nativeSrc": "395:15:17", + "nodeType": "YulFunctionCall", + "src": "395:15:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "416:2:17", + "nodeType": "YulLiteral", + "src": "416:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "412:3:17", + "nodeType": "YulIdentifier", + "src": "412:3:17" + }, + "nativeSrc": "412:7:17", + "nodeType": "YulFunctionCall", + "src": "412:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "391:3:17", + "nodeType": "YulIdentifier", + "src": "391:3:17" + }, + "nativeSrc": "391:29:17", + "nodeType": "YulFunctionCall", + "src": "391:29:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "376:3:17", + "nodeType": "YulIdentifier", + "src": "376:3:17" + }, + "nativeSrc": "376:45:17", + "nodeType": "YulFunctionCall", + "src": "376:45:17" + }, + { + "kind": "number", + "nativeSrc": "423:2:17", + "nodeType": "YulLiteral", + "src": "423:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "372:3:17", + "nodeType": "YulIdentifier", + "src": "372:3:17" + }, + "nativeSrc": "372:54:17", + "nodeType": "YulFunctionCall", + "src": "372:54:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "364:4:17", + "nodeType": "YulIdentifier", + "src": "364:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "14:418:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "104:9:17", + "nodeType": "YulTypedName", + "src": "104:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "115:6:17", + "nodeType": "YulTypedName", + "src": "115:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "126:4:17", + "nodeType": "YulTypedName", + "src": "126:4:17", + "type": "" + } + ], + "src": "14:418:17" + }, + { + "body": { + "nativeSrc": "486:124:17", + "nodeType": "YulBlock", + "src": "486:124:17", + "statements": [ + { + "nativeSrc": "496:29:17", + "nodeType": "YulAssignment", + "src": "496:29:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "518:6:17", + "nodeType": "YulIdentifier", + "src": "518:6:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "505:12:17", + "nodeType": "YulIdentifier", + "src": "505:12:17" + }, + "nativeSrc": "505:20:17", + "nodeType": "YulFunctionCall", + "src": "505:20:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "496:5:17", + "nodeType": "YulIdentifier", + "src": "496:5:17" + } + ] + }, + { + "body": { + "nativeSrc": "588:16:17", + "nodeType": "YulBlock", + "src": "588:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "597:1:17", + "nodeType": "YulLiteral", + "src": "597:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "600:1:17", + "nodeType": "YulLiteral", + "src": "600:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "590:6:17", + "nodeType": "YulIdentifier", + "src": "590:6:17" + }, + "nativeSrc": "590:12:17", + "nodeType": "YulFunctionCall", + "src": "590:12:17" + }, + "nativeSrc": "590:12:17", + "nodeType": "YulExpressionStatement", + "src": "590:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "547:5:17", + "nodeType": "YulIdentifier", + "src": "547:5:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "558:5:17", + "nodeType": "YulIdentifier", + "src": "558:5:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "573:3:17", + "nodeType": "YulLiteral", + "src": "573:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "578:1:17", + "nodeType": "YulLiteral", + "src": "578:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "569:3:17", + "nodeType": "YulIdentifier", + "src": "569:3:17" + }, + "nativeSrc": "569:11:17", + "nodeType": "YulFunctionCall", + "src": "569:11:17" + }, + { + "kind": "number", + "nativeSrc": "582:1:17", + "nodeType": "YulLiteral", + "src": "582:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "565:3:17", + "nodeType": "YulIdentifier", + "src": "565:3:17" + }, + "nativeSrc": "565:19:17", + "nodeType": "YulFunctionCall", + "src": "565:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "554:3:17", + "nodeType": "YulIdentifier", + "src": "554:3:17" + }, + "nativeSrc": "554:31:17", + "nodeType": "YulFunctionCall", + "src": "554:31:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "544:2:17", + "nodeType": "YulIdentifier", + "src": "544:2:17" + }, + "nativeSrc": "544:42:17", + "nodeType": "YulFunctionCall", + "src": "544:42:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "537:6:17", + "nodeType": "YulIdentifier", + "src": "537:6:17" + }, + "nativeSrc": "537:50:17", + "nodeType": "YulFunctionCall", + "src": "537:50:17" + }, + "nativeSrc": "534:70:17", + "nodeType": "YulIf", + "src": "534:70:17" + } + ] + }, + "name": "abi_decode_address", + "nativeSrc": "437:173:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "465:6:17", + "nodeType": "YulTypedName", + "src": "465:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "476:5:17", + "nodeType": "YulTypedName", + "src": "476:5:17", + "type": "" + } + ], + "src": "437:173:17" + }, + { + "body": { + "nativeSrc": "702:213:17", + "nodeType": "YulBlock", + "src": "702:213:17", + "statements": [ + { + "body": { + "nativeSrc": "748:16:17", + "nodeType": "YulBlock", + "src": "748:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "757:1:17", + "nodeType": "YulLiteral", + "src": "757:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "760:1:17", + "nodeType": "YulLiteral", + "src": "760:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "750:6:17", + "nodeType": "YulIdentifier", + "src": "750:6:17" + }, + "nativeSrc": "750:12:17", + "nodeType": "YulFunctionCall", + "src": "750:12:17" + }, + "nativeSrc": "750:12:17", + "nodeType": "YulExpressionStatement", + "src": "750:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "723:7:17", + "nodeType": "YulIdentifier", + "src": "723:7:17" + }, + { + "name": "headStart", + "nativeSrc": "732:9:17", + "nodeType": "YulIdentifier", + "src": "732:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "719:3:17", + "nodeType": "YulIdentifier", + "src": "719:3:17" + }, + "nativeSrc": "719:23:17", + "nodeType": "YulFunctionCall", + "src": "719:23:17" + }, + { + "kind": "number", + "nativeSrc": "744:2:17", + "nodeType": "YulLiteral", + "src": "744:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "715:3:17", + "nodeType": "YulIdentifier", + "src": "715:3:17" + }, + "nativeSrc": "715:32:17", + "nodeType": "YulFunctionCall", + "src": "715:32:17" + }, + "nativeSrc": "712:52:17", + "nodeType": "YulIf", + "src": "712:52:17" + }, + { + "nativeSrc": "773:39:17", + "nodeType": "YulAssignment", + "src": "773:39:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "802:9:17", + "nodeType": "YulIdentifier", + "src": "802:9:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "783:18:17", + "nodeType": "YulIdentifier", + "src": "783:18:17" + }, + "nativeSrc": "783:29:17", + "nodeType": "YulFunctionCall", + "src": "783:29:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "773:6:17", + "nodeType": "YulIdentifier", + "src": "773:6:17" + } + ] + }, + { + "nativeSrc": "821:14:17", + "nodeType": "YulVariableDeclaration", + "src": "821:14:17", + "value": { + "kind": "number", + "nativeSrc": "834:1:17", + "nodeType": "YulLiteral", + "src": "834:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "825:5:17", + "nodeType": "YulTypedName", + "src": "825:5:17", + "type": "" + } + ] + }, + { + "nativeSrc": "844:41:17", + "nodeType": "YulAssignment", + "src": "844:41:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "870:9:17", + "nodeType": "YulIdentifier", + "src": "870:9:17" + }, + { + "kind": "number", + "nativeSrc": "881:2:17", + "nodeType": "YulLiteral", + "src": "881:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "866:3:17", + "nodeType": "YulIdentifier", + "src": "866:3:17" + }, + "nativeSrc": "866:18:17", + "nodeType": "YulFunctionCall", + "src": "866:18:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "853:12:17", + "nodeType": "YulIdentifier", + "src": "853:12:17" + }, + "nativeSrc": "853:32:17", + "nodeType": "YulFunctionCall", + "src": "853:32:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "844:5:17", + "nodeType": "YulIdentifier", + "src": "844:5:17" + } + ] + }, + { + "nativeSrc": "894:15:17", + "nodeType": "YulAssignment", + "src": "894:15:17", + "value": { + "name": "value", + "nativeSrc": "904:5:17", + "nodeType": "YulIdentifier", + "src": "904:5:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "894:6:17", + "nodeType": "YulIdentifier", + "src": "894:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_uint256", + "nativeSrc": "615:300:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "660:9:17", + "nodeType": "YulTypedName", + "src": "660:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "671:7:17", + "nodeType": "YulTypedName", + "src": "671:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "683:6:17", + "nodeType": "YulTypedName", + "src": "683:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "691:6:17", + "nodeType": "YulTypedName", + "src": "691:6:17", + "type": "" + } + ], + "src": "615:300:17" + }, + { + "body": { + "nativeSrc": "1015:92:17", + "nodeType": "YulBlock", + "src": "1015:92:17", + "statements": [ + { + "nativeSrc": "1025:26:17", + "nodeType": "YulAssignment", + "src": "1025:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1037:9:17", + "nodeType": "YulIdentifier", + "src": "1037:9:17" + }, + { + "kind": "number", + "nativeSrc": "1048:2:17", + "nodeType": "YulLiteral", + "src": "1048:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1033:3:17", + "nodeType": "YulIdentifier", + "src": "1033:3:17" + }, + "nativeSrc": "1033:18:17", + "nodeType": "YulFunctionCall", + "src": "1033:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1025:4:17", + "nodeType": "YulIdentifier", + "src": "1025:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1067:9:17", + "nodeType": "YulIdentifier", + "src": "1067:9:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1092:6:17", + "nodeType": "YulIdentifier", + "src": "1092:6:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1085:6:17", + "nodeType": "YulIdentifier", + "src": "1085:6:17" + }, + "nativeSrc": "1085:14:17", + "nodeType": "YulFunctionCall", + "src": "1085:14:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1078:6:17", + "nodeType": "YulIdentifier", + "src": "1078:6:17" + }, + "nativeSrc": "1078:22:17", + "nodeType": "YulFunctionCall", + "src": "1078:22:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1060:6:17", + "nodeType": "YulIdentifier", + "src": "1060:6:17" + }, + "nativeSrc": "1060:41:17", + "nodeType": "YulFunctionCall", + "src": "1060:41:17" + }, + "nativeSrc": "1060:41:17", + "nodeType": "YulExpressionStatement", + "src": "1060:41:17" + } + ] + }, + "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", + "nativeSrc": "920:187:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "984:9:17", + "nodeType": "YulTypedName", + "src": "984:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "995:6:17", + "nodeType": "YulTypedName", + "src": "995:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1006:4:17", + "nodeType": "YulTypedName", + "src": "1006:4:17", + "type": "" + } + ], + "src": "920:187:17" + }, + { + "body": { + "nativeSrc": "1213:76:17", + "nodeType": "YulBlock", + "src": "1213:76:17", + "statements": [ + { + "nativeSrc": "1223:26:17", + "nodeType": "YulAssignment", + "src": "1223:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1235:9:17", + "nodeType": "YulIdentifier", + "src": "1235:9:17" + }, + { + "kind": "number", + "nativeSrc": "1246:2:17", + "nodeType": "YulLiteral", + "src": "1246:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1231:3:17", + "nodeType": "YulIdentifier", + "src": "1231:3:17" + }, + "nativeSrc": "1231:18:17", + "nodeType": "YulFunctionCall", + "src": "1231:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1223:4:17", + "nodeType": "YulIdentifier", + "src": "1223:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1265:9:17", + "nodeType": "YulIdentifier", + "src": "1265:9:17" + }, + { + "name": "value0", + "nativeSrc": "1276:6:17", + "nodeType": "YulIdentifier", + "src": "1276:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1258:6:17", + "nodeType": "YulIdentifier", + "src": "1258:6:17" + }, + "nativeSrc": "1258:25:17", + "nodeType": "YulFunctionCall", + "src": "1258:25:17" + }, + "nativeSrc": "1258:25:17", + "nodeType": "YulExpressionStatement", + "src": "1258:25:17" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nativeSrc": "1112:177:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1182:9:17", + "nodeType": "YulTypedName", + "src": "1182:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1193:6:17", + "nodeType": "YulTypedName", + "src": "1193:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1204:4:17", + "nodeType": "YulTypedName", + "src": "1204:4:17", + "type": "" + } + ], + "src": "1112:177:17" + }, + { + "body": { + "nativeSrc": "1398:270:17", + "nodeType": "YulBlock", + "src": "1398:270:17", + "statements": [ + { + "body": { + "nativeSrc": "1444:16:17", + "nodeType": "YulBlock", + "src": "1444:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1453:1:17", + "nodeType": "YulLiteral", + "src": "1453:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1456:1:17", + "nodeType": "YulLiteral", + "src": "1456:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1446:6:17", + "nodeType": "YulIdentifier", + "src": "1446:6:17" + }, + "nativeSrc": "1446:12:17", + "nodeType": "YulFunctionCall", + "src": "1446:12:17" + }, + "nativeSrc": "1446:12:17", + "nodeType": "YulExpressionStatement", + "src": "1446:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1419:7:17", + "nodeType": "YulIdentifier", + "src": "1419:7:17" + }, + { + "name": "headStart", + "nativeSrc": "1428:9:17", + "nodeType": "YulIdentifier", + "src": "1428:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1415:3:17", + "nodeType": "YulIdentifier", + "src": "1415:3:17" + }, + "nativeSrc": "1415:23:17", + "nodeType": "YulFunctionCall", + "src": "1415:23:17" + }, + { + "kind": "number", + "nativeSrc": "1440:2:17", + "nodeType": "YulLiteral", + "src": "1440:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1411:3:17", + "nodeType": "YulIdentifier", + "src": "1411:3:17" + }, + "nativeSrc": "1411:32:17", + "nodeType": "YulFunctionCall", + "src": "1411:32:17" + }, + "nativeSrc": "1408:52:17", + "nodeType": "YulIf", + "src": "1408:52:17" + }, + { + "nativeSrc": "1469:39:17", + "nodeType": "YulAssignment", + "src": "1469:39:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1498:9:17", + "nodeType": "YulIdentifier", + "src": "1498:9:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "1479:18:17", + "nodeType": "YulIdentifier", + "src": "1479:18:17" + }, + "nativeSrc": "1479:29:17", + "nodeType": "YulFunctionCall", + "src": "1479:29:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1469:6:17", + "nodeType": "YulIdentifier", + "src": "1469:6:17" + } + ] + }, + { + "nativeSrc": "1517:48:17", + "nodeType": "YulAssignment", + "src": "1517:48:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1550:9:17", + "nodeType": "YulIdentifier", + "src": "1550:9:17" + }, + { + "kind": "number", + "nativeSrc": "1561:2:17", + "nodeType": "YulLiteral", + "src": "1561:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1546:3:17", + "nodeType": "YulIdentifier", + "src": "1546:3:17" + }, + "nativeSrc": "1546:18:17", + "nodeType": "YulFunctionCall", + "src": "1546:18:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "1527:18:17", + "nodeType": "YulIdentifier", + "src": "1527:18:17" + }, + "nativeSrc": "1527:38:17", + "nodeType": "YulFunctionCall", + "src": "1527:38:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "1517:6:17", + "nodeType": "YulIdentifier", + "src": "1517:6:17" + } + ] + }, + { + "nativeSrc": "1574:14:17", + "nodeType": "YulVariableDeclaration", + "src": "1574:14:17", + "value": { + "kind": "number", + "nativeSrc": "1587:1:17", + "nodeType": "YulLiteral", + "src": "1587:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1578:5:17", + "nodeType": "YulTypedName", + "src": "1578:5:17", + "type": "" + } + ] + }, + { + "nativeSrc": "1597:41:17", + "nodeType": "YulAssignment", + "src": "1597:41:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1623:9:17", + "nodeType": "YulIdentifier", + "src": "1623:9:17" + }, + { + "kind": "number", + "nativeSrc": "1634:2:17", + "nodeType": "YulLiteral", + "src": "1634:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1619:3:17", + "nodeType": "YulIdentifier", + "src": "1619:3:17" + }, + "nativeSrc": "1619:18:17", + "nodeType": "YulFunctionCall", + "src": "1619:18:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1606:12:17", + "nodeType": "YulIdentifier", + "src": "1606:12:17" + }, + "nativeSrc": "1606:32:17", + "nodeType": "YulFunctionCall", + "src": "1606:32:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "1597:5:17", + "nodeType": "YulIdentifier", + "src": "1597:5:17" + } + ] + }, + { + "nativeSrc": "1647:15:17", + "nodeType": "YulAssignment", + "src": "1647:15:17", + "value": { + "name": "value", + "nativeSrc": "1657:5:17", + "nodeType": "YulIdentifier", + "src": "1657:5:17" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "1647:6:17", + "nodeType": "YulIdentifier", + "src": "1647:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_uint256", + "nativeSrc": "1294:374:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1348:9:17", + "nodeType": "YulTypedName", + "src": "1348:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1359:7:17", + "nodeType": "YulTypedName", + "src": "1359:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1371:6:17", + "nodeType": "YulTypedName", + "src": "1371:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1379:6:17", + "nodeType": "YulTypedName", + "src": "1379:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1387:6:17", + "nodeType": "YulTypedName", + "src": "1387:6:17", + "type": "" + } + ], + "src": "1294:374:17" + }, + { + "body": { + "nativeSrc": "1770:87:17", + "nodeType": "YulBlock", + "src": "1770:87:17", + "statements": [ + { + "nativeSrc": "1780:26:17", + "nodeType": "YulAssignment", + "src": "1780:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1792:9:17", + "nodeType": "YulIdentifier", + "src": "1792:9:17" + }, + { + "kind": "number", + "nativeSrc": "1803:2:17", + "nodeType": "YulLiteral", + "src": "1803:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1788:3:17", + "nodeType": "YulIdentifier", + "src": "1788:3:17" + }, + "nativeSrc": "1788:18:17", + "nodeType": "YulFunctionCall", + "src": "1788:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1780:4:17", + "nodeType": "YulIdentifier", + "src": "1780:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1822:9:17", + "nodeType": "YulIdentifier", + "src": "1822:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1837:6:17", + "nodeType": "YulIdentifier", + "src": "1837:6:17" + }, + { + "kind": "number", + "nativeSrc": "1845:4:17", + "nodeType": "YulLiteral", + "src": "1845:4:17", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1833:3:17", + "nodeType": "YulIdentifier", + "src": "1833:3:17" + }, + "nativeSrc": "1833:17:17", + "nodeType": "YulFunctionCall", + "src": "1833:17:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1815:6:17", + "nodeType": "YulIdentifier", + "src": "1815:6:17" + }, + "nativeSrc": "1815:36:17", + "nodeType": "YulFunctionCall", + "src": "1815:36:17" + }, + "nativeSrc": "1815:36:17", + "nodeType": "YulExpressionStatement", + "src": "1815:36:17" + } + ] + }, + "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed", + "nativeSrc": "1673:184:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1739:9:17", + "nodeType": "YulTypedName", + "src": "1739:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1750:6:17", + "nodeType": "YulTypedName", + "src": "1750:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1761:4:17", + "nodeType": "YulTypedName", + "src": "1761:4:17", + "type": "" + } + ], + "src": "1673:184:17" + }, + { + "body": { + "nativeSrc": "1932:116:17", + "nodeType": "YulBlock", + "src": "1932:116:17", + "statements": [ + { + "body": { + "nativeSrc": "1978:16:17", + "nodeType": "YulBlock", + "src": "1978:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1987:1:17", + "nodeType": "YulLiteral", + "src": "1987:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1990:1:17", + "nodeType": "YulLiteral", + "src": "1990:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1980:6:17", + "nodeType": "YulIdentifier", + "src": "1980:6:17" + }, + "nativeSrc": "1980:12:17", + "nodeType": "YulFunctionCall", + "src": "1980:12:17" + }, + "nativeSrc": "1980:12:17", + "nodeType": "YulExpressionStatement", + "src": "1980:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1953:7:17", + "nodeType": "YulIdentifier", + "src": "1953:7:17" + }, + { + "name": "headStart", + "nativeSrc": "1962:9:17", + "nodeType": "YulIdentifier", + "src": "1962:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1949:3:17", + "nodeType": "YulIdentifier", + "src": "1949:3:17" + }, + "nativeSrc": "1949:23:17", + "nodeType": "YulFunctionCall", + "src": "1949:23:17" + }, + { + "kind": "number", + "nativeSrc": "1974:2:17", + "nodeType": "YulLiteral", + "src": "1974:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1945:3:17", + "nodeType": "YulIdentifier", + "src": "1945:3:17" + }, + "nativeSrc": "1945:32:17", + "nodeType": "YulFunctionCall", + "src": "1945:32:17" + }, + "nativeSrc": "1942:52:17", + "nodeType": "YulIf", + "src": "1942:52:17" + }, + { + "nativeSrc": "2003:39:17", + "nodeType": "YulAssignment", + "src": "2003:39:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2032:9:17", + "nodeType": "YulIdentifier", + "src": "2032:9:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "2013:18:17", + "nodeType": "YulIdentifier", + "src": "2013:18:17" + }, + "nativeSrc": "2013:29:17", + "nodeType": "YulFunctionCall", + "src": "2013:29:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2003:6:17", + "nodeType": "YulIdentifier", + "src": "2003:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nativeSrc": "1862:186:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1898:9:17", + "nodeType": "YulTypedName", + "src": "1898:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1909:7:17", + "nodeType": "YulTypedName", + "src": "1909:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1921:6:17", + "nodeType": "YulTypedName", + "src": "1921:6:17", + "type": "" + } + ], + "src": "1862:186:17" + }, + { + "body": { + "nativeSrc": "2140:173:17", + "nodeType": "YulBlock", + "src": "2140:173:17", + "statements": [ + { + "body": { + "nativeSrc": "2186:16:17", + "nodeType": "YulBlock", + "src": "2186:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2195:1:17", + "nodeType": "YulLiteral", + "src": "2195:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2198:1:17", + "nodeType": "YulLiteral", + "src": "2198:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2188:6:17", + "nodeType": "YulIdentifier", + "src": "2188:6:17" + }, + "nativeSrc": "2188:12:17", + "nodeType": "YulFunctionCall", + "src": "2188:12:17" + }, + "nativeSrc": "2188:12:17", + "nodeType": "YulExpressionStatement", + "src": "2188:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2161:7:17", + "nodeType": "YulIdentifier", + "src": "2161:7:17" + }, + { + "name": "headStart", + "nativeSrc": "2170:9:17", + "nodeType": "YulIdentifier", + "src": "2170:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2157:3:17", + "nodeType": "YulIdentifier", + "src": "2157:3:17" + }, + "nativeSrc": "2157:23:17", + "nodeType": "YulFunctionCall", + "src": "2157:23:17" + }, + { + "kind": "number", + "nativeSrc": "2182:2:17", + "nodeType": "YulLiteral", + "src": "2182:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2153:3:17", + "nodeType": "YulIdentifier", + "src": "2153:3:17" + }, + "nativeSrc": "2153:32:17", + "nodeType": "YulFunctionCall", + "src": "2153:32:17" + }, + "nativeSrc": "2150:52:17", + "nodeType": "YulIf", + "src": "2150:52:17" + }, + { + "nativeSrc": "2211:39:17", + "nodeType": "YulAssignment", + "src": "2211:39:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2240:9:17", + "nodeType": "YulIdentifier", + "src": "2240:9:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "2221:18:17", + "nodeType": "YulIdentifier", + "src": "2221:18:17" + }, + "nativeSrc": "2221:29:17", + "nodeType": "YulFunctionCall", + "src": "2221:29:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2211:6:17", + "nodeType": "YulIdentifier", + "src": "2211:6:17" + } + ] + }, + { + "nativeSrc": "2259:48:17", + "nodeType": "YulAssignment", + "src": "2259:48:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2292:9:17", + "nodeType": "YulIdentifier", + "src": "2292:9:17" + }, + { + "kind": "number", + "nativeSrc": "2303:2:17", + "nodeType": "YulLiteral", + "src": "2303:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2288:3:17", + "nodeType": "YulIdentifier", + "src": "2288:3:17" + }, + "nativeSrc": "2288:18:17", + "nodeType": "YulFunctionCall", + "src": "2288:18:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "2269:18:17", + "nodeType": "YulIdentifier", + "src": "2269:18:17" + }, + "nativeSrc": "2269:38:17", + "nodeType": "YulFunctionCall", + "src": "2269:38:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "2259:6:17", + "nodeType": "YulIdentifier", + "src": "2259:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_address", + "nativeSrc": "2053:260:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2098:9:17", + "nodeType": "YulTypedName", + "src": "2098:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "2109:7:17", + "nodeType": "YulTypedName", + "src": "2109:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "2121:6:17", + "nodeType": "YulTypedName", + "src": "2121:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "2129:6:17", + "nodeType": "YulTypedName", + "src": "2129:6:17", + "type": "" + } + ], + "src": "2053:260:17" + }, + { + "body": { + "nativeSrc": "2373:325:17", + "nodeType": "YulBlock", + "src": "2373:325:17", + "statements": [ + { + "nativeSrc": "2383:22:17", + "nodeType": "YulAssignment", + "src": "2383:22:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2397:1:17", + "nodeType": "YulLiteral", + "src": "2397:1:17", + "type": "", + "value": "1" + }, + { + "name": "data", + "nativeSrc": "2400:4:17", + "nodeType": "YulIdentifier", + "src": "2400:4:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "2393:3:17", + "nodeType": "YulIdentifier", + "src": "2393:3:17" + }, + "nativeSrc": "2393:12:17", + "nodeType": "YulFunctionCall", + "src": "2393:12:17" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "2383:6:17", + "nodeType": "YulIdentifier", + "src": "2383:6:17" + } + ] + }, + { + "nativeSrc": "2414:38:17", + "nodeType": "YulVariableDeclaration", + "src": "2414:38:17", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "2444:4:17", + "nodeType": "YulIdentifier", + "src": "2444:4:17" + }, + { + "kind": "number", + "nativeSrc": "2450:1:17", + "nodeType": "YulLiteral", + "src": "2450:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2440:3:17", + "nodeType": "YulIdentifier", + "src": "2440:3:17" + }, + "nativeSrc": "2440:12:17", + "nodeType": "YulFunctionCall", + "src": "2440:12:17" + }, + "variables": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "2418:18:17", + "nodeType": "YulTypedName", + "src": "2418:18:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2491:31:17", + "nodeType": "YulBlock", + "src": "2491:31:17", + "statements": [ + { + "nativeSrc": "2493:27:17", + "nodeType": "YulAssignment", + "src": "2493:27:17", + "value": { + "arguments": [ + { + "name": "length", + "nativeSrc": "2507:6:17", + "nodeType": "YulIdentifier", + "src": "2507:6:17" + }, + { + "kind": "number", + "nativeSrc": "2515:4:17", + "nodeType": "YulLiteral", + "src": "2515:4:17", + "type": "", + "value": "0x7f" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2503:3:17", + "nodeType": "YulIdentifier", + "src": "2503:3:17" + }, + "nativeSrc": "2503:17:17", + "nodeType": "YulFunctionCall", + "src": "2503:17:17" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "2493:6:17", + "nodeType": "YulIdentifier", + "src": "2493:6:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "2471:18:17", + "nodeType": "YulIdentifier", + "src": "2471:18:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "2464:6:17", + "nodeType": "YulIdentifier", + "src": "2464:6:17" + }, + "nativeSrc": "2464:26:17", + "nodeType": "YulFunctionCall", + "src": "2464:26:17" + }, + "nativeSrc": "2461:61:17", + "nodeType": "YulIf", + "src": "2461:61:17" + }, + { + "body": { + "nativeSrc": "2581:111:17", + "nodeType": "YulBlock", + "src": "2581:111:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2602:1:17", + "nodeType": "YulLiteral", + "src": "2602:1:17", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2609:3:17", + "nodeType": "YulLiteral", + "src": "2609:3:17", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "2614:10:17", + "nodeType": "YulLiteral", + "src": "2614:10:17", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2605:3:17", + "nodeType": "YulIdentifier", + "src": "2605:3:17" + }, + "nativeSrc": "2605:20:17", + "nodeType": "YulFunctionCall", + "src": "2605:20:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2595:6:17", + "nodeType": "YulIdentifier", + "src": "2595:6:17" + }, + "nativeSrc": "2595:31:17", + "nodeType": "YulFunctionCall", + "src": "2595:31:17" + }, + "nativeSrc": "2595:31:17", + "nodeType": "YulExpressionStatement", + "src": "2595:31:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2646:1:17", + "nodeType": "YulLiteral", + "src": "2646:1:17", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "2649:4:17", + "nodeType": "YulLiteral", + "src": "2649:4:17", + "type": "", + "value": "0x22" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2639:6:17", + "nodeType": "YulIdentifier", + "src": "2639:6:17" + }, + "nativeSrc": "2639:15:17", + "nodeType": "YulFunctionCall", + "src": "2639:15:17" + }, + "nativeSrc": "2639:15:17", + "nodeType": "YulExpressionStatement", + "src": "2639:15:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2674:1:17", + "nodeType": "YulLiteral", + "src": "2674:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2677:4:17", + "nodeType": "YulLiteral", + "src": "2677:4:17", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2667:6:17", + "nodeType": "YulIdentifier", + "src": "2667:6:17" + }, + "nativeSrc": "2667:15:17", + "nodeType": "YulFunctionCall", + "src": "2667:15:17" + }, + "nativeSrc": "2667:15:17", + "nodeType": "YulExpressionStatement", + "src": "2667:15:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "2537:18:17", + "nodeType": "YulIdentifier", + "src": "2537:18:17" + }, + { + "arguments": [ + { + "name": "length", + "nativeSrc": "2560:6:17", + "nodeType": "YulIdentifier", + "src": "2560:6:17" + }, + { + "kind": "number", + "nativeSrc": "2568:2:17", + "nodeType": "YulLiteral", + "src": "2568:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "2557:2:17", + "nodeType": "YulIdentifier", + "src": "2557:2:17" + }, + "nativeSrc": "2557:14:17", + "nodeType": "YulFunctionCall", + "src": "2557:14:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "2534:2:17", + "nodeType": "YulIdentifier", + "src": "2534:2:17" + }, + "nativeSrc": "2534:38:17", + "nodeType": "YulFunctionCall", + "src": "2534:38:17" + }, + "nativeSrc": "2531:161:17", + "nodeType": "YulIf", + "src": "2531:161:17" + } + ] + }, + "name": "extract_byte_array_length", + "nativeSrc": "2318:380:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "data", + "nativeSrc": "2353:4:17", + "nodeType": "YulTypedName", + "src": "2353:4:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nativeSrc": "2362:6:17", + "nodeType": "YulTypedName", + "src": "2362:6:17", + "type": "" + } + ], + "src": "2318:380:17" + }, + { + "body": { + "nativeSrc": "2860:188:17", + "nodeType": "YulBlock", + "src": "2860:188:17", + "statements": [ + { + "nativeSrc": "2870:26:17", + "nodeType": "YulAssignment", + "src": "2870:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2882:9:17", + "nodeType": "YulIdentifier", + "src": "2882:9:17" + }, + { + "kind": "number", + "nativeSrc": "2893:2:17", + "nodeType": "YulLiteral", + "src": "2893:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2878:3:17", + "nodeType": "YulIdentifier", + "src": "2878:3:17" + }, + "nativeSrc": "2878:18:17", + "nodeType": "YulFunctionCall", + "src": "2878:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2870:4:17", + "nodeType": "YulIdentifier", + "src": "2870:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2912:9:17", + "nodeType": "YulIdentifier", + "src": "2912:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2927:6:17", + "nodeType": "YulIdentifier", + "src": "2927:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2943:3:17", + "nodeType": "YulLiteral", + "src": "2943:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2948:1:17", + "nodeType": "YulLiteral", + "src": "2948:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2939:3:17", + "nodeType": "YulIdentifier", + "src": "2939:3:17" + }, + "nativeSrc": "2939:11:17", + "nodeType": "YulFunctionCall", + "src": "2939:11:17" + }, + { + "kind": "number", + "nativeSrc": "2952:1:17", + "nodeType": "YulLiteral", + "src": "2952:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2935:3:17", + "nodeType": "YulIdentifier", + "src": "2935:3:17" + }, + "nativeSrc": "2935:19:17", + "nodeType": "YulFunctionCall", + "src": "2935:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2923:3:17", + "nodeType": "YulIdentifier", + "src": "2923:3:17" + }, + "nativeSrc": "2923:32:17", + "nodeType": "YulFunctionCall", + "src": "2923:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2905:6:17", + "nodeType": "YulIdentifier", + "src": "2905:6:17" + }, + "nativeSrc": "2905:51:17", + "nodeType": "YulFunctionCall", + "src": "2905:51:17" + }, + "nativeSrc": "2905:51:17", + "nodeType": "YulExpressionStatement", + "src": "2905:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2976:9:17", + "nodeType": "YulIdentifier", + "src": "2976:9:17" + }, + { + "kind": "number", + "nativeSrc": "2987:2:17", + "nodeType": "YulLiteral", + "src": "2987:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2972:3:17", + "nodeType": "YulIdentifier", + "src": "2972:3:17" + }, + "nativeSrc": "2972:18:17", + "nodeType": "YulFunctionCall", + "src": "2972:18:17" + }, + { + "name": "value1", + "nativeSrc": "2992:6:17", + "nodeType": "YulIdentifier", + "src": "2992:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2965:6:17", + "nodeType": "YulIdentifier", + "src": "2965:6:17" + }, + "nativeSrc": "2965:34:17", + "nodeType": "YulFunctionCall", + "src": "2965:34:17" + }, + "nativeSrc": "2965:34:17", + "nodeType": "YulExpressionStatement", + "src": "2965:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3019:9:17", + "nodeType": "YulIdentifier", + "src": "3019:9:17" + }, + { + "kind": "number", + "nativeSrc": "3030:2:17", + "nodeType": "YulLiteral", + "src": "3030:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3015:3:17", + "nodeType": "YulIdentifier", + "src": "3015:3:17" + }, + "nativeSrc": "3015:18:17", + "nodeType": "YulFunctionCall", + "src": "3015:18:17" + }, + { + "name": "value2", + "nativeSrc": "3035:6:17", + "nodeType": "YulIdentifier", + "src": "3035:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3008:6:17", + "nodeType": "YulIdentifier", + "src": "3008:6:17" + }, + "nativeSrc": "3008:34:17", + "nodeType": "YulFunctionCall", + "src": "3008:34:17" + }, + "nativeSrc": "3008:34:17", + "nodeType": "YulExpressionStatement", + "src": "3008:34:17" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "2703:345:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2813:9:17", + "nodeType": "YulTypedName", + "src": "2813:9:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "2824:6:17", + "nodeType": "YulTypedName", + "src": "2824:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "2832:6:17", + "nodeType": "YulTypedName", + "src": "2832:6:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2840:6:17", + "nodeType": "YulTypedName", + "src": "2840:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2851:4:17", + "nodeType": "YulTypedName", + "src": "2851:4:17", + "type": "" + } + ], + "src": "2703:345:17" + }, + { + "body": { + "nativeSrc": "3154:102:17", + "nodeType": "YulBlock", + "src": "3154:102:17", + "statements": [ + { + "nativeSrc": "3164:26:17", + "nodeType": "YulAssignment", + "src": "3164:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3176:9:17", + "nodeType": "YulIdentifier", + "src": "3176:9:17" + }, + { + "kind": "number", + "nativeSrc": "3187:2:17", + "nodeType": "YulLiteral", + "src": "3187:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3172:3:17", + "nodeType": "YulIdentifier", + "src": "3172:3:17" + }, + "nativeSrc": "3172:18:17", + "nodeType": "YulFunctionCall", + "src": "3172:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3164:4:17", + "nodeType": "YulIdentifier", + "src": "3164:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3206:9:17", + "nodeType": "YulIdentifier", + "src": "3206:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3221:6:17", + "nodeType": "YulIdentifier", + "src": "3221:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3237:3:17", + "nodeType": "YulLiteral", + "src": "3237:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "3242:1:17", + "nodeType": "YulLiteral", + "src": "3242:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3233:3:17", + "nodeType": "YulIdentifier", + "src": "3233:3:17" + }, + "nativeSrc": "3233:11:17", + "nodeType": "YulFunctionCall", + "src": "3233:11:17" + }, + { + "kind": "number", + "nativeSrc": "3246:1:17", + "nodeType": "YulLiteral", + "src": "3246:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3229:3:17", + "nodeType": "YulIdentifier", + "src": "3229:3:17" + }, + "nativeSrc": "3229:19:17", + "nodeType": "YulFunctionCall", + "src": "3229:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3217:3:17", + "nodeType": "YulIdentifier", + "src": "3217:3:17" + }, + "nativeSrc": "3217:32:17", + "nodeType": "YulFunctionCall", + "src": "3217:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3199:6:17", + "nodeType": "YulIdentifier", + "src": "3199:6:17" + }, + "nativeSrc": "3199:51:17", + "nodeType": "YulFunctionCall", + "src": "3199:51:17" + }, + "nativeSrc": "3199:51:17", + "nodeType": "YulExpressionStatement", + "src": "3199:51:17" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "3053:203:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3123:9:17", + "nodeType": "YulTypedName", + "src": "3123:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3134:6:17", + "nodeType": "YulTypedName", + "src": "3134:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3145:4:17", + "nodeType": "YulTypedName", + "src": "3145:4:17", + "type": "" + } + ], + "src": "3053:203:17" + }, + { + "body": { + "nativeSrc": "3309:174:17", + "nodeType": "YulBlock", + "src": "3309:174:17", + "statements": [ + { + "nativeSrc": "3319:16:17", + "nodeType": "YulAssignment", + "src": "3319:16:17", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "3330:1:17", + "nodeType": "YulIdentifier", + "src": "3330:1:17" + }, + { + "name": "y", + "nativeSrc": "3333:1:17", + "nodeType": "YulIdentifier", + "src": "3333:1:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3326:3:17", + "nodeType": "YulIdentifier", + "src": "3326:3:17" + }, + "nativeSrc": "3326:9:17", + "nodeType": "YulFunctionCall", + "src": "3326:9:17" + }, + "variableNames": [ + { + "name": "sum", + "nativeSrc": "3319:3:17", + "nodeType": "YulIdentifier", + "src": "3319:3:17" + } + ] + }, + { + "body": { + "nativeSrc": "3366:111:17", + "nodeType": "YulBlock", + "src": "3366:111:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3387:1:17", + "nodeType": "YulLiteral", + "src": "3387:1:17", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3394:3:17", + "nodeType": "YulLiteral", + "src": "3394:3:17", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "3399:10:17", + "nodeType": "YulLiteral", + "src": "3399:10:17", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3390:3:17", + "nodeType": "YulIdentifier", + "src": "3390:3:17" + }, + "nativeSrc": "3390:20:17", + "nodeType": "YulFunctionCall", + "src": "3390:20:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3380:6:17", + "nodeType": "YulIdentifier", + "src": "3380:6:17" + }, + "nativeSrc": "3380:31:17", + "nodeType": "YulFunctionCall", + "src": "3380:31:17" + }, + "nativeSrc": "3380:31:17", + "nodeType": "YulExpressionStatement", + "src": "3380:31:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3431:1:17", + "nodeType": "YulLiteral", + "src": "3431:1:17", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "3434:4:17", + "nodeType": "YulLiteral", + "src": "3434:4:17", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3424:6:17", + "nodeType": "YulIdentifier", + "src": "3424:6:17" + }, + "nativeSrc": "3424:15:17", + "nodeType": "YulFunctionCall", + "src": "3424:15:17" + }, + "nativeSrc": "3424:15:17", + "nodeType": "YulExpressionStatement", + "src": "3424:15:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3459:1:17", + "nodeType": "YulLiteral", + "src": "3459:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3462:4:17", + "nodeType": "YulLiteral", + "src": "3462:4:17", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3452:6:17", + "nodeType": "YulIdentifier", + "src": "3452:6:17" + }, + "nativeSrc": "3452:15:17", + "nodeType": "YulFunctionCall", + "src": "3452:15:17" + }, + "nativeSrc": "3452:15:17", + "nodeType": "YulExpressionStatement", + "src": "3452:15:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nativeSrc": "3350:1:17", + "nodeType": "YulIdentifier", + "src": "3350:1:17" + }, + { + "name": "sum", + "nativeSrc": "3353:3:17", + "nodeType": "YulIdentifier", + "src": "3353:3:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "3347:2:17", + "nodeType": "YulIdentifier", + "src": "3347:2:17" + }, + "nativeSrc": "3347:10:17", + "nodeType": "YulFunctionCall", + "src": "3347:10:17" + }, + "nativeSrc": "3344:133:17", + "nodeType": "YulIf", + "src": "3344:133:17" + } + ] + }, + "name": "checked_add_t_uint256", + "nativeSrc": "3261:222:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "3292:1:17", + "nodeType": "YulTypedName", + "src": "3292:1:17", + "type": "" + }, + { + "name": "y", + "nativeSrc": "3295:1:17", + "nodeType": "YulTypedName", + "src": "3295:1:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nativeSrc": "3301:3:17", + "nodeType": "YulTypedName", + "src": "3301:3:17", + "type": "" + } + ], + "src": "3261:222:17" + } + ] + }, + "contents": "{\n { }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n mcopy(add(headStart, 64), add(value0, 32), length)\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let value := 0\n value := calldataload(add(headStart, 32))\n value1 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n let value := 0\n value := calldataload(add(headStart, 64))\n value2 := value\n }\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n}", + "id": 17, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": { + "1907": [ + { + "length": 32, + "start": 268 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561000f575f5ffd5b506004361061009b575f3560e01c806340c10f191161006357806340c10f191461013657806370a082311461014b57806395d89b4114610173578063a9059cbb1461017b578063dd62ed3e1461018e575f5ffd5b806306fdde031461009f578063095ea7b3146100bd57806318160ddd146100e057806323b872dd146100f2578063313ce56714610105575b5f5ffd5b6100a76101c6565b6040516100b491906105d8565b60405180910390f35b6100d06100cb366004610628565b610256565b60405190151581526020016100b4565b6002545b6040519081526020016100b4565b6100d0610100366004610650565b61026f565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100b4565b610149610144366004610628565b610292565b005b6100e461015936600461068a565b6001600160a01b03165f9081526020819052604090205490565b6100a76102a0565b6100d0610189366004610628565b6102af565b6100e461019c3660046106aa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101d5906106db565b80601f0160208091040260200160405190810160405280929190818152602001828054610201906106db565b801561024c5780601f106102235761010080835404028352916020019161024c565b820191905f5260205f20905b81548152906001019060200180831161022f57829003601f168201915b5050505050905090565b5f336102638185856102bc565b60019150505b92915050565b5f3361027c8582856102ce565b61028785858561034f565b506001949350505050565b61029c82826103ac565b5050565b6060600480546101d5906106db565b5f3361026381858561034f565b6102c983838360016103e0565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610349578181101561033b57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61034984848484035f6103e0565b50505050565b6001600160a01b03831661037857604051634b637e8f60e11b81525f6004820152602401610332565b6001600160a01b0382166103a15760405163ec442f0560e01b81525f6004820152602401610332565b6102c98383836104b2565b6001600160a01b0382166103d55760405163ec442f0560e01b81525f6004820152602401610332565b61029c5f83836104b2565b6001600160a01b0384166104095760405163e602df0560e01b81525f6004820152602401610332565b6001600160a01b03831661043257604051634a1406b160e11b81525f6004820152602401610332565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561034957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104a491815260200190565b60405180910390a350505050565b6001600160a01b0383166104dc578060025f8282546104d19190610713565b9091555061054c9050565b6001600160a01b0383165f908152602081905260409020548181101561052e5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610332565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661056857600280548290039055610586565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105cb91815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610623575f5ffd5b919050565b5f5f60408385031215610639575f5ffd5b6106428361060d565b946020939093013593505050565b5f5f5f60608486031215610662575f5ffd5b61066b8461060d565b92506106796020850161060d565b929592945050506040919091013590565b5f6020828403121561069a575f5ffd5b6106a38261060d565b9392505050565b5f5f604083850312156106bb575f5ffd5b6106c48361060d565b91506106d26020840161060d565b90509250929050565b600181811c908216806106ef57607f821691505b60208210810361070d57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561026957634e487b7160e01b5f52601160045260245ffdfea2646970667358221220051c929eef2ca859049f293d34cdcbebf1dfa98589ada2fc7b817014e2c28bd864736f6c634300081c0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9B JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x63 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x173 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x18E JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x9F JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xE0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xF2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x105 JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0xA7 PUSH2 0x1C6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x5D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD0 PUSH2 0xCB CALLDATASIZE PUSH1 0x4 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x256 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH2 0xD0 PUSH2 0x100 CALLDATASIZE PUSH1 0x4 PUSH2 0x650 JUMP JUMPDEST PUSH2 0x26F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH2 0x149 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x292 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE4 PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x68A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xA7 PUSH2 0x2A0 JUMP JUMPDEST PUSH2 0xD0 PUSH2 0x189 CALLDATASIZE PUSH1 0x4 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST PUSH2 0xE4 PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x1D5 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x201 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP1 ISZERO PUSH2 0x24C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x223 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x24C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x22F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 CALLER PUSH2 0x263 DUP2 DUP6 DUP6 PUSH2 0x2BC JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 CALLER PUSH2 0x27C DUP6 DUP3 DUP6 PUSH2 0x2CE JUMP JUMPDEST PUSH2 0x287 DUP6 DUP6 DUP6 PUSH2 0x34F JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x29C DUP3 DUP3 PUSH2 0x3AC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x1D5 SWAP1 PUSH2 0x6DB JUMP JUMPDEST PUSH0 CALLER PUSH2 0x263 DUP2 DUP6 DUP6 PUSH2 0x34F JUMP JUMPDEST PUSH2 0x2C9 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x3E0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH0 NOT DUP2 LT ISZERO PUSH2 0x349 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x33B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x349 DUP5 DUP5 DUP5 DUP5 SUB PUSH0 PUSH2 0x3E0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x378 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH2 0x2C9 DUP4 DUP4 DUP4 PUSH2 0x4B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH2 0x29C PUSH0 DUP4 DUP4 PUSH2 0x4B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x409 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x432 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x349 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x4A4 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x4DC JUMPI DUP1 PUSH1 0x2 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x4D1 SWAP2 SWAP1 PUSH2 0x713 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x54C SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x52E JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x568 JUMPI PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x586 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x5CB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD PUSH1 0x40 DUP6 ADD MCOPY PUSH0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x623 JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x639 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x642 DUP4 PUSH2 0x60D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x662 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x66B DUP5 PUSH2 0x60D JUMP JUMPDEST SWAP3 POP PUSH2 0x679 PUSH1 0x20 DUP6 ADD PUSH2 0x60D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x69A JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x6A3 DUP3 PUSH2 0x60D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6BB JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x6C4 DUP4 PUSH2 0x60D JUMP JUMPDEST SWAP2 POP PUSH2 0x6D2 PUSH1 0x20 DUP5 ADD PUSH2 0x60D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x6EF JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x70D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x269 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SDIV SHR SWAP3 SWAP15 0xEF 0x2C 0xA8 MSIZE DIV SWAP16 0x29 RETURNDATASIZE CALLVALUE 0xCD 0xCB 0xEB CALL 0xDF 0xA9 DUP6 DUP10 0xAD LOG2 0xFC PUSH28 0x817014E2C28BD864736F6C634300081C003300000000000000000000 ", + "sourceMap": "128:408:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3902:186;;;;;;:::i;:::-;;:::i;:::-;;;1085:14:17;;1078:22;1060:41;;1048:2;1033:18;3902:186:4;920:187:17;2803:97:4;2881:12;;2803:97;;;1258:25:17;;;1246:2;1231:18;2803:97:4;1112:177:17;4680:244:4;;;;;;:::i;:::-;;:::i;349:94:15:-;;;1845:4:17;423:13:15;1833:17:17;1815:36;;1803:2;1788:18;349:94:15;1673:184:17;449:85:15;;;;;;:::i;:::-;;:::i;:::-;;2933:116:4;;;;;;:::i;:::-;-1:-1:-1;;;;;3024:18:4;2998:7;3024:18;;;;;;;;;;;;2933:116;1962:93;;;:::i;3244:178::-;;;;;;:::i;:::-;;:::i;3455:140::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3561:18:4;;;3535:7;3561:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3455:140;1760:89;1805:13;1837:5;1830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89;:::o;3902:186::-;3975:4;735:10:8;4029:31:4;735:10:8;4045:7:4;4054:5;4029:8;:31::i;:::-;4077:4;4070:11;;;3902:186;;;;;:::o;4680:244::-;4767:4;735:10:8;4823:37:4;4839:4;735:10:8;4854:5:4;4823:15;:37::i;:::-;4870:26;4880:4;4886:2;4890:5;4870:9;:26::i;:::-;-1:-1:-1;4913:4:4;;4680:244;-1:-1:-1;;;;4680:244:4:o;449:85:15:-;510:17;516:2;520:6;510:5;:17::i;:::-;449:85;;:::o;1962:93:4:-;2009:13;2041:7;2034:14;;;;;:::i;3244:178::-;3313:4;735:10:8;3367:27:4;735:10:8;3384:2:4;3388:5;3367:9;:27::i;8630:128::-;8714:37;8723:5;8730:7;8739:5;8746:4;8714:8;:37::i;:::-;8630:128;;;:::o;10321:476::-;-1:-1:-1;;;;;3561:18:4;;;10420:24;3561:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10486:36:4;;10482:309;;;10561:5;10542:16;:24;10538:130;;;10593:60;;-1:-1:-1;;;10593:60:4;;-1:-1:-1;;;;;2923:32:17;;10593:60:4;;;2905:51:17;2972:18;;;2965:34;;;3015:18;;;3008:34;;;2878:18;;10593:60:4;;;;;;;;10538:130;10709:57;10718:5;10725:7;10753:5;10734:16;:24;10760:5;10709:8;:57::i;:::-;10410:387;10321:476;;;:::o;5297:300::-;-1:-1:-1;;;;;5380:18:4;;5376:86;;5421:30;;-1:-1:-1;;;5421:30:4;;5448:1;5421:30;;;3199:51:17;3172:18;;5421:30:4;3053:203:17;5376:86:4;-1:-1:-1;;;;;5475:16:4;;5471:86;;5514:32;;-1:-1:-1;;;5514:32:4;;5543:1;5514:32;;;3199:51:17;3172:18;;5514:32:4;3053:203:17;5471:86:4;5566:24;5574:4;5580:2;5584:5;5566:7;:24::i;7362:208::-;-1:-1:-1;;;;;7432:21:4;;7428:91;;7476:32;;-1:-1:-1;;;7476:32:4;;7505:1;7476:32;;;3199:51:17;3172:18;;7476:32:4;3053:203:17;7428:91:4;7528:35;7544:1;7548:7;7557:5;7528:7;:35::i;9607:432::-;-1:-1:-1;;;;;9719:19:4;;9715:89;;9761:32;;-1:-1:-1;;;9761:32:4;;9790:1;9761:32;;;3199:51:17;3172:18;;9761:32:4;3053:203:17;9715:89:4;-1:-1:-1;;;;;9817:21:4;;9813:90;;9861:31;;-1:-1:-1;;;9861:31:4;;9889:1;9861:31;;;3199:51:17;3172:18;;9861:31:4;3053:203:17;9813:90:4;-1:-1:-1;;;;;9912:18:4;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;9957:76;;;;10007:7;-1:-1:-1;;;;;9991:31:4;10000:5;-1:-1:-1;;;;;9991:31:4;;10016:5;9991:31;;;;1258:25:17;;1246:2;1231:18;;1112:177;9991:31:4;;;;;;;;9607:432;;;;:::o;5912:1107::-;-1:-1:-1;;;;;6001:18:4;;5997:540;;6153:5;6137:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;5997:540:4;;-1:-1:-1;5997:540:4;;-1:-1:-1;;;;;6211:15:4;;6189:19;6211:15;;;;;;;;;;;6244:19;;;6240:115;;;6290:50;;-1:-1:-1;;;6290:50:4;;-1:-1:-1;;;;;2923:32:17;;6290:50:4;;;2905:51:17;2972:18;;;2965:34;;;3015:18;;;3008:34;;;2878:18;;6290:50:4;2703:345:17;6240:115:4;-1:-1:-1;;;;;6475:15:4;;:9;:15;;;;;;;;;;6493:19;;;;6475:37;;5997:540;-1:-1:-1;;;;;6551:16:4;;6547:425;;6714:12;:21;;;;;;;6547:425;;;-1:-1:-1;;;;;6925:13:4;;:9;:13;;;;;;;;;;:22;;;;;;6547:425;7002:2;-1:-1:-1;;;;;6987:25:4;6996:4;-1:-1:-1;;;;;6987:25:4;;7006:5;6987:25;;;;1258::17;;1246:2;1231:18;;1112:177;6987:25:4;;;;;;;;5912:1107;;;:::o;14:418:17:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:173::-;505:20;;-1:-1:-1;;;;;554:31:17;;544:42;;534:70;;600:1;597;590:12;534:70;437:173;;;:::o;615:300::-;683:6;691;744:2;732:9;723:7;719:23;715:32;712:52;;;760:1;757;750:12;712:52;783:29;802:9;783:29;:::i;:::-;773:39;881:2;866:18;;;;853:32;;-1:-1:-1;;;615:300:17:o;1294:374::-;1371:6;1379;1387;1440:2;1428:9;1419:7;1415:23;1411:32;1408:52;;;1456:1;1453;1446:12;1408:52;1479:29;1498:9;1479:29;:::i;:::-;1469:39;;1527:38;1561:2;1550:9;1546:18;1527:38;:::i;:::-;1294:374;;1517:48;;-1:-1:-1;;;1634:2:17;1619:18;;;;1606:32;;1294:374::o;1862:186::-;1921:6;1974:2;1962:9;1953:7;1949:23;1945:32;1942:52;;;1990:1;1987;1980:12;1942:52;2013:29;2032:9;2013:29;:::i;:::-;2003:39;1862:186;-1:-1:-1;;;1862:186:17:o;2053:260::-;2121:6;2129;2182:2;2170:9;2161:7;2157:23;2153:32;2150:52;;;2198:1;2195;2188:12;2150:52;2221:29;2240:9;2221:29;:::i;:::-;2211:39;;2269:38;2303:2;2292:9;2288:18;2269:38;:::i;:::-;2259:48;;2053:260;;;;;:::o;2318:380::-;2397:1;2393:12;;;;2440;;;2461:61;;2515:4;2507:6;2503:17;2493:27;;2461:61;2568:2;2560:6;2557:14;2537:18;2534:38;2531:161;;2614:10;2609:3;2605:20;2602:1;2595:31;2649:4;2646:1;2639:15;2677:4;2674:1;2667:15;2531:161;;2318:380;;;:::o;3261:222::-;3326:9;;;3347:10;;;3344:133;;;3399:10;3394:3;3390:20;3387:1;3380:31;3434:4;3431:1;3424:15;3462:4;3459:1;3452:15" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "mint(address,uint256)": "40c10f19", + "name()": "06fdde03", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":[{\"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\":[],\"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\":{\"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\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"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\":\"Returns the value of tokens owned by `account`.\"},\"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\":\"Returns the value of tokens in existence.\"},\"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}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. 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\":{\"contracts/mocks/MockERC20.sol\":\"MockERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x669464167428061ee0f8618b73b3ee90aff8405683e7ddde8cd77dadaa1afe29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0dda78587a7358b4fdf6b9fca0fde5a5e34930f36d5268a16028627fc0170195\",\"dweb:/ipfs/QmQ1b6cCceDRWNxti9HifsTCzmVP25Haxs1bWugm52vTqH\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/mocks/MockERC20.sol\":{\"keccak256\":\"0xbc3e055371853c1afb88cee3d7dc89fa409819a9540996d68fac4e32a7f37e39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d2c375962db4809a050ca5f498a5f7fb48fdeb40eaaed67d3b5e8d74e4d097c\",\"dweb:/ipfs/QmfPskvVXW7xSMW1Qvw9tyhDmiPn11fBGd5ogQHgxC62eR\"]}},\"version\":1}" + } + }, + "contracts/mocks/MockTokenMessengerV2.sol": { + "MockTokenMessengerV2": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "burnToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "maxFee", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "minFinalityThreshold", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "hookData", + "type": "bytes" + } + ], + "name": "DepositForBurn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "maxFee", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "minFinalityThreshold", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "hookData", + "type": "bytes" + } + ], + "name": "depositForBurnWithHook", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "lastBurnCall", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "burnToken", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "maxFee", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "minFinalityThreshold", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "hookData", + "type": "bytes" + }, + { + "internalType": "address", + "name": "depositor", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reenter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reenterData", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reenterTarget", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "setReenter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "6080604052348015600e575f5ffd5b50610aa38061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806302bcc1dd14610064578063599d38f314610079578063779b432d1461009f578063a0fe97e3146100b2578063cc6e8454146100cf578063e150ef49146100ff575b5f5ffd5b6100776100723660046105e6565b610114565b005b61008161014b565b60405161009699989796959493929190610663565b60405180910390f35b6100776100ad3660046106e7565b61021f565b6009546100bf9060ff1681565b6040519015158152602001610096565b6009546100e79061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610096565b610107610453565b604051610096919061077f565b600980546001600160a01b038516610100026001600160a81b0319909116176001179055600a610145828483610830565b50505050565b5f805460015460025460035460045460055460065460078054979863ffffffff9788169896976001600160a01b039096169694959394939092169261018f906107ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101bb906107ac565b80156102065780601f106101dd57610100808354040283529160200191610206565b820191905f5260205f20905b8154815290600101906020018083116101e957829003601f168201915b505050600890930154919250506001600160a01b031689565b60095460ff16156102ad575f5f600960019054906101000a90046001600160a01b03166001600160a01b0316600a60405161025a91906108ea565b5f604051808303815f865af19150503d805f8114610293576040519150601f19603f3d011682016040523d82523d5f602084013e610298565b606091505b5091509150816102aa57805160208201fd5b50505b6102c26001600160a01b03871633308c6104df565b6040518061012001604052808a81526020018963ffffffff168152602001888152602001876001600160a01b031681526020018681526020018581526020018463ffffffff16815260200183838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050336020938401525082518155908201516001805463ffffffff1990811663ffffffff9384161790915560408401516002556060840151600380546001600160a01b0319166001600160a01b03909216919091179055608084015160045560a084015160055560c084015160068054909216921691909117905560e08201516007906103ce908261095b565b506101009190910151600890910180546001600160a01b0319166001600160a01b0392831617905560405163ffffffff8516913391908916907fd6257a7e0a72caa2353e59a6f79cbc5221c3fb8e486c6c05e4f7844c4f967d6890610440908e908d908f908d908d908c908c90610a16565b60405180910390a4505050505050505050565b600a8054610460906107ac565b80601f016020809104026020016040519081016040528092919081815260200182805461048c906107ac565b80156104d75780601f106104ae576101008083540402835291602001916104d7565b820191905f5260205f20905b8154815290600101906020018083116104ba57829003601f168201915b505050505081565b6104ed848484846001610519565b61014557604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316610575578383151615610569573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b80356001600160a01b038116811461059c575f5ffd5b919050565b5f5f83601f8401126105b1575f5ffd5b50813567ffffffffffffffff8111156105c8575f5ffd5b6020830191508360208285010111156105df575f5ffd5b9250929050565b5f5f5f604084860312156105f8575f5ffd5b61060184610586565b9250602084013567ffffffffffffffff81111561061c575f5ffd5b610628868287016105a1565b9497909650939450505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b89815263ffffffff8916602082015287604082015260018060a01b03871660608201528560808201528460a082015263ffffffff841660c082015261012060e08201525f6106b5610120830185610635565b905060018060a01b0383166101008301529a9950505050505050505050565b803563ffffffff8116811461059c575f5ffd5b5f5f5f5f5f5f5f5f5f6101008a8c031215610700575f5ffd5b8935985061071060208b016106d4565b975060408a0135965061072560608b01610586565b955060808a0135945060a08a0135935061074160c08b016106d4565b925060e08a013567ffffffffffffffff81111561075c575f5ffd5b6107688c828d016105a1565b915080935050809150509295985092959850929598565b602081525f6107916020830184610635565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806107c057607f821691505b6020821081036107de57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561082b57805f5260205f20601f840160051c810160208510156108095750805b601f840160051c820191505b81811015610828575f8155600101610815565b50505b505050565b67ffffffffffffffff83111561084857610848610798565b61085c8361085683546107ac565b836107e4565b5f601f84116001811461088d575f85156108765750838201355b5f19600387901b1c1916600186901b178355610828565b5f83815260208120601f198716915b828110156108bc578685013582556020948501946001909201910161089c565b50868210156108d8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f5f83546108f7816107ac565b60018216801561090e576001811461092357610950565b60ff1983168652811515820286019350610950565b865f5260205f205f5b838110156109485781548882015260019091019060200161092c565b505081860193505b509195945050505050565b815167ffffffffffffffff81111561097557610975610798565b6109898161098384546107ac565b846107e4565b6020601f8211600181146109bb575f83156109a45750848201515b5f19600385901b1c1916600184901b178455610828565b5f84815260208120601f198516915b828110156109ea57878501518255602094850194600190920191016109ca565b5084821015610a0757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b87815286602082015263ffffffff8616604082015284606082015283608082015260c060a08201528160c0820152818360e08301375f81830160e090810191909152601f909201601f19160101969550505050505056fea26469706673582212207cd7fedb045a23761a0223da3be1467fe126cebbebfc718cce24b063c155abc164736f6c634300081c0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH2 0xAA3 DUP1 PUSH2 0x1C PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x60 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2BCC1DD EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x599D38F3 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x779B432D EQ PUSH2 0x9F JUMPI DUP1 PUSH4 0xA0FE97E3 EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0xCC6E8454 EQ PUSH2 0xCF JUMPI DUP1 PUSH4 0xE150EF49 EQ PUSH2 0xFF JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x5E6 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x81 PUSH2 0x14B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x96 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x6E7 JUMP JUMPDEST PUSH2 0x21F JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0xBF SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x96 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0xE7 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x96 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x453 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x77F JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x100 MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP2 AND OR PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0xA PUSH2 0x145 DUP3 DUP5 DUP4 PUSH2 0x830 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH1 0x7 DUP1 SLOAD SWAP8 SWAP9 PUSH4 0xFFFFFFFF SWAP8 DUP9 AND SWAP9 SWAP7 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP7 SWAP5 SWAP6 SWAP4 SWAP5 SWAP4 SWAP1 SWAP3 AND SWAP3 PUSH2 0x18F SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1BB SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x206 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x206 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1E9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x8 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AD JUMPI PUSH0 PUSH0 PUSH1 0x9 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA PUSH1 0x40 MLOAD PUSH2 0x25A SWAP2 SWAP1 PUSH2 0x8EA JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x293 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x298 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2AA JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x2C2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND CALLER ADDRESS DUP13 PUSH2 0x4DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP CALLER PUSH1 0x20 SWAP4 DUP5 ADD MSTORE POP DUP3 MLOAD DUP2 SSTORE SWAP1 DUP3 ADD MLOAD PUSH1 0x1 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT SWAP1 DUP2 AND PUSH4 0xFFFFFFFF SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x2 SSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x4 SSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0x5 SSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x6 DUP1 SLOAD SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x7 SWAP1 PUSH2 0x3CE SWAP1 DUP3 PUSH2 0x95B JUMP JUMPDEST POP PUSH2 0x100 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x8 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF DUP6 AND SWAP2 CALLER SWAP2 SWAP1 DUP10 AND SWAP1 PUSH32 0xD6257A7E0A72CAA2353E59A6F79CBC5221C3FB8E486C6C05E4F7844C4F967D68 SWAP1 PUSH2 0x440 SWAP1 DUP15 SWAP1 DUP14 SWAP1 DUP16 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP13 SWAP1 DUP13 SWAP1 PUSH2 0xA16 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH2 0x460 SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x48C SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4D7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x4D7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4BA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0x4ED DUP5 DUP5 DUP5 DUP5 PUSH1 0x1 PUSH2 0x519 JUMP JUMPDEST PUSH2 0x145 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 MSTORE DUP7 AND PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE SWAP2 PUSH1 0x20 DUP4 PUSH1 0x64 DUP2 DUP1 DUP13 GAS CALL SWAP3 POP PUSH1 0x1 PUSH0 MLOAD EQ DUP4 AND PUSH2 0x575 JUMPI DUP4 DUP4 ISZERO AND ISZERO PUSH2 0x569 JUMPI RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST PUSH0 DUP9 EXTCODESIZE GT RETURNDATASIZE ISZERO AND DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x40 MSTORE POP PUSH0 PUSH1 0x60 MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x59C JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x5B1 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5C8 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5DF JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5F8 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x601 DUP5 PUSH2 0x586 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x61C JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x628 DUP7 DUP3 DUP8 ADD PUSH2 0x5A1 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD MCOPY PUSH0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP10 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE DUP8 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x60 DUP3 ADD MSTORE DUP6 PUSH1 0x80 DUP3 ADD MSTORE DUP5 PUSH1 0xA0 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x120 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x6B5 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x635 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x100 DUP4 ADD MSTORE SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x59C JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH2 0x100 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x700 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP10 CALLDATALOAD SWAP9 POP PUSH2 0x710 PUSH1 0x20 DUP12 ADD PUSH2 0x6D4 JUMP JUMPDEST SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP7 POP PUSH2 0x725 PUSH1 0x60 DUP12 ADD PUSH2 0x586 JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH2 0x741 PUSH1 0xC0 DUP12 ADD PUSH2 0x6D4 JUMP JUMPDEST SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x75C JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x768 DUP13 DUP3 DUP14 ADD PUSH2 0x5A1 JUMP JUMPDEST SWAP2 POP DUP1 SWAP4 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH0 PUSH2 0x791 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x635 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x7C0 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x7DE JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x82B JUMPI DUP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x809 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x828 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x815 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x848 JUMPI PUSH2 0x848 PUSH2 0x798 JUMP JUMPDEST PUSH2 0x85C DUP4 PUSH2 0x856 DUP4 SLOAD PUSH2 0x7AC JUMP JUMPDEST DUP4 PUSH2 0x7E4 JUMP JUMPDEST PUSH0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x88D JUMPI PUSH0 DUP6 ISZERO PUSH2 0x876 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x828 JUMP JUMPDEST PUSH0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP8 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x8BC JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x89C JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x8D8 JUMPI PUSH0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH0 PUSH0 DUP4 SLOAD PUSH2 0x8F7 DUP2 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x1 DUP3 AND DUP1 ISZERO PUSH2 0x90E JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x923 JUMPI PUSH2 0x950 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE DUP2 ISZERO ISZERO DUP3 MUL DUP7 ADD SWAP4 POP PUSH2 0x950 JUMP JUMPDEST DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x948 JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x92C JUMP JUMPDEST POP POP DUP2 DUP7 ADD SWAP4 POP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x975 JUMPI PUSH2 0x975 PUSH2 0x798 JUMP JUMPDEST PUSH2 0x989 DUP2 PUSH2 0x983 DUP5 SLOAD PUSH2 0x7AC JUMP JUMPDEST DUP5 PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x9BB JUMPI PUSH0 DUP4 ISZERO PUSH2 0x9A4 JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x828 JUMP JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9EA JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x9CA JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0xA07 JUMPI DUP7 DUP5 ADD MLOAD PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST DUP8 DUP2 MSTORE DUP7 PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP7 AND PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE DUP2 PUSH1 0xC0 DUP3 ADD MSTORE DUP2 DUP4 PUSH1 0xE0 DUP4 ADD CALLDATACOPY PUSH0 DUP2 DUP4 ADD PUSH1 0xE0 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND ADD ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0xD7FEDB045A23761A0223DA3BE1467FE126CEBBEBFC718CCE24B063C155 0xAB 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ", + "sourceMap": "213:2296:16:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@_safeTransferFrom_1276": { + "entryPoint": 1305, + "id": 1276, + "parameterSlots": 5, + "returnSlots": 1 + }, + "@depositForBurnWithHook_2084": { + "entryPoint": 543, + "id": 2084, + "parameterSlots": 9, + "returnSlots": 0 + }, + "@lastBurnCall_1980": { + "entryPoint": 331, + "id": 1980, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@reenter_1982": { + "entryPoint": null, + "id": 1982, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@reenterData_1986": { + "entryPoint": 1107, + "id": 1986, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@reenterTarget_1984": { + "entryPoint": null, + "id": 1984, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@safeTransferFrom_925": { + "entryPoint": 1247, + "id": 925, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@setReenter_2104": { + "entryPoint": 276, + "id": 2104, + "parameterSlots": 3, + "returnSlots": 0 + }, + "abi_decode_address": { + "entryPoint": 1414, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_bytes_calldata": { + "entryPoint": 1441, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { + "entryPoint": 1510, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_uint256t_uint32t_bytes32t_addresst_bytes32t_uint256t_uint32t_bytes_calldata_ptr": { + "entryPoint": 1767, + "id": null, + "parameterSlots": 2, + "returnSlots": 9 + }, + "abi_decode_uint32": { + "entryPoint": 1748, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_bytes": { + "entryPoint": 1589, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_bytes_storage__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { + "entryPoint": 2282, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 1919, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_bytes32_t_uint32_t_bytes32_t_uint256_t_bytes_calldata_ptr__to_t_uint256_t_bytes32_t_uint32_t_bytes32_t_uint256_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 2582, + "id": null, + "parameterSlots": 8, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr_t_address__to_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr_t_address__fromStack_reversed": { + "entryPoint": 1635, + "id": null, + "parameterSlots": 10, + "returnSlots": 1 + }, + "array_dataslot_bytes_storage": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "clean_up_bytearray_end_slots_bytes_storage": { + "entryPoint": 2020, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "copy_byte_array_to_storage_from_t_bytes_calldata_ptr_to_t_bytes_storage": { + "entryPoint": 2096, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage": { + "entryPoint": 2395, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "extract_byte_array_length": { + "entryPoint": 1964, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "extract_used_part_and_set_length_of_short_byte_array": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "panic_error_0x41": { + "entryPoint": 1944, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:9506:17", + "nodeType": "YulBlock", + "src": "0:9506:17", + "statements": [ + { + "nativeSrc": "6:3:17", + "nodeType": "YulBlock", + "src": "6:3:17", + "statements": [] + }, + { + "body": { + "nativeSrc": "63:124:17", + "nodeType": "YulBlock", + "src": "63:124:17", + "statements": [ + { + "nativeSrc": "73:29:17", + "nodeType": "YulAssignment", + "src": "73:29:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "95:6:17", + "nodeType": "YulIdentifier", + "src": "95:6:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "82:12:17", + "nodeType": "YulIdentifier", + "src": "82:12:17" + }, + "nativeSrc": "82:20:17", + "nodeType": "YulFunctionCall", + "src": "82:20:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "73:5:17", + "nodeType": "YulIdentifier", + "src": "73:5:17" + } + ] + }, + { + "body": { + "nativeSrc": "165:16:17", + "nodeType": "YulBlock", + "src": "165:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "174:1:17", + "nodeType": "YulLiteral", + "src": "174:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "177:1:17", + "nodeType": "YulLiteral", + "src": "177:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "167:6:17", + "nodeType": "YulIdentifier", + "src": "167:6:17" + }, + "nativeSrc": "167:12:17", + "nodeType": "YulFunctionCall", + "src": "167:12:17" + }, + "nativeSrc": "167:12:17", + "nodeType": "YulExpressionStatement", + "src": "167:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "124:5:17", + "nodeType": "YulIdentifier", + "src": "124:5:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "135:5:17", + "nodeType": "YulIdentifier", + "src": "135:5:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "150:3:17", + "nodeType": "YulLiteral", + "src": "150:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "155:1:17", + "nodeType": "YulLiteral", + "src": "155:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "146:3:17", + "nodeType": "YulIdentifier", + "src": "146:3:17" + }, + "nativeSrc": "146:11:17", + "nodeType": "YulFunctionCall", + "src": "146:11:17" + }, + { + "kind": "number", + "nativeSrc": "159:1:17", + "nodeType": "YulLiteral", + "src": "159:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "142:3:17", + "nodeType": "YulIdentifier", + "src": "142:3:17" + }, + "nativeSrc": "142:19:17", + "nodeType": "YulFunctionCall", + "src": "142:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "131:3:17", + "nodeType": "YulIdentifier", + "src": "131:3:17" + }, + "nativeSrc": "131:31:17", + "nodeType": "YulFunctionCall", + "src": "131:31:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "121:2:17", + "nodeType": "YulIdentifier", + "src": "121:2:17" + }, + "nativeSrc": "121:42:17", + "nodeType": "YulFunctionCall", + "src": "121:42:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "114:6:17", + "nodeType": "YulIdentifier", + "src": "114:6:17" + }, + "nativeSrc": "114:50:17", + "nodeType": "YulFunctionCall", + "src": "114:50:17" + }, + "nativeSrc": "111:70:17", + "nodeType": "YulIf", + "src": "111:70:17" + } + ] + }, + "name": "abi_decode_address", + "nativeSrc": "14:173:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "42:6:17", + "nodeType": "YulTypedName", + "src": "42:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "53:5:17", + "nodeType": "YulTypedName", + "src": "53:5:17", + "type": "" + } + ], + "src": "14:173:17" + }, + { + "body": { + "nativeSrc": "264:275:17", + "nodeType": "YulBlock", + "src": "264:275:17", + "statements": [ + { + "body": { + "nativeSrc": "313:16:17", + "nodeType": "YulBlock", + "src": "313:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "322:1:17", + "nodeType": "YulLiteral", + "src": "322:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "325:1:17", + "nodeType": "YulLiteral", + "src": "325:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "315:6:17", + "nodeType": "YulIdentifier", + "src": "315:6:17" + }, + "nativeSrc": "315:12:17", + "nodeType": "YulFunctionCall", + "src": "315:12:17" + }, + "nativeSrc": "315:12:17", + "nodeType": "YulExpressionStatement", + "src": "315:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "292:6:17", + "nodeType": "YulIdentifier", + "src": "292:6:17" + }, + { + "kind": "number", + "nativeSrc": "300:4:17", + "nodeType": "YulLiteral", + "src": "300:4:17", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "288:3:17", + "nodeType": "YulIdentifier", + "src": "288:3:17" + }, + "nativeSrc": "288:17:17", + "nodeType": "YulFunctionCall", + "src": "288:17:17" + }, + { + "name": "end", + "nativeSrc": "307:3:17", + "nodeType": "YulIdentifier", + "src": "307:3:17" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "284:3:17", + "nodeType": "YulIdentifier", + "src": "284:3:17" + }, + "nativeSrc": "284:27:17", + "nodeType": "YulFunctionCall", + "src": "284:27:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "277:6:17", + "nodeType": "YulIdentifier", + "src": "277:6:17" + }, + "nativeSrc": "277:35:17", + "nodeType": "YulFunctionCall", + "src": "277:35:17" + }, + "nativeSrc": "274:55:17", + "nodeType": "YulIf", + "src": "274:55:17" + }, + { + "nativeSrc": "338:30:17", + "nodeType": "YulAssignment", + "src": "338:30:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "361:6:17", + "nodeType": "YulIdentifier", + "src": "361:6:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "348:12:17", + "nodeType": "YulIdentifier", + "src": "348:12:17" + }, + "nativeSrc": "348:20:17", + "nodeType": "YulFunctionCall", + "src": "348:20:17" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "338:6:17", + "nodeType": "YulIdentifier", + "src": "338:6:17" + } + ] + }, + { + "body": { + "nativeSrc": "411:16:17", + "nodeType": "YulBlock", + "src": "411:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "420:1:17", + "nodeType": "YulLiteral", + "src": "420:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "423:1:17", + "nodeType": "YulLiteral", + "src": "423:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "413:6:17", + "nodeType": "YulIdentifier", + "src": "413:6:17" + }, + "nativeSrc": "413:12:17", + "nodeType": "YulFunctionCall", + "src": "413:12:17" + }, + "nativeSrc": "413:12:17", + "nodeType": "YulExpressionStatement", + "src": "413:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "383:6:17", + "nodeType": "YulIdentifier", + "src": "383:6:17" + }, + { + "kind": "number", + "nativeSrc": "391:18:17", + "nodeType": "YulLiteral", + "src": "391:18:17", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "380:2:17", + "nodeType": "YulIdentifier", + "src": "380:2:17" + }, + "nativeSrc": "380:30:17", + "nodeType": "YulFunctionCall", + "src": "380:30:17" + }, + "nativeSrc": "377:50:17", + "nodeType": "YulIf", + "src": "377:50:17" + }, + { + "nativeSrc": "436:29:17", + "nodeType": "YulAssignment", + "src": "436:29:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "452:6:17", + "nodeType": "YulIdentifier", + "src": "452:6:17" + }, + { + "kind": "number", + "nativeSrc": "460:4:17", + "nodeType": "YulLiteral", + "src": "460:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "448:3:17", + "nodeType": "YulIdentifier", + "src": "448:3:17" + }, + "nativeSrc": "448:17:17", + "nodeType": "YulFunctionCall", + "src": "448:17:17" + }, + "variableNames": [ + { + "name": "arrayPos", + "nativeSrc": "436:8:17", + "nodeType": "YulIdentifier", + "src": "436:8:17" + } + ] + }, + { + "body": { + "nativeSrc": "517:16:17", + "nodeType": "YulBlock", + "src": "517:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "526:1:17", + "nodeType": "YulLiteral", + "src": "526:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "529:1:17", + "nodeType": "YulLiteral", + "src": "529:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "519:6:17", + "nodeType": "YulIdentifier", + "src": "519:6:17" + }, + "nativeSrc": "519:12:17", + "nodeType": "YulFunctionCall", + "src": "519:12:17" + }, + "nativeSrc": "519:12:17", + "nodeType": "YulExpressionStatement", + "src": "519:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "488:6:17", + "nodeType": "YulIdentifier", + "src": "488:6:17" + }, + { + "name": "length", + "nativeSrc": "496:6:17", + "nodeType": "YulIdentifier", + "src": "496:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "484:3:17", + "nodeType": "YulIdentifier", + "src": "484:3:17" + }, + "nativeSrc": "484:19:17", + "nodeType": "YulFunctionCall", + "src": "484:19:17" + }, + { + "kind": "number", + "nativeSrc": "505:4:17", + "nodeType": "YulLiteral", + "src": "505:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "480:3:17", + "nodeType": "YulIdentifier", + "src": "480:3:17" + }, + "nativeSrc": "480:30:17", + "nodeType": "YulFunctionCall", + "src": "480:30:17" + }, + { + "name": "end", + "nativeSrc": "512:3:17", + "nodeType": "YulIdentifier", + "src": "512:3:17" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "477:2:17", + "nodeType": "YulIdentifier", + "src": "477:2:17" + }, + "nativeSrc": "477:39:17", + "nodeType": "YulFunctionCall", + "src": "477:39:17" + }, + "nativeSrc": "474:59:17", + "nodeType": "YulIf", + "src": "474:59:17" + } + ] + }, + "name": "abi_decode_bytes_calldata", + "nativeSrc": "192:347:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "227:6:17", + "nodeType": "YulTypedName", + "src": "227:6:17", + "type": "" + }, + { + "name": "end", + "nativeSrc": "235:3:17", + "nodeType": "YulTypedName", + "src": "235:3:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "arrayPos", + "nativeSrc": "243:8:17", + "nodeType": "YulTypedName", + "src": "243:8:17", + "type": "" + }, + { + "name": "length", + "nativeSrc": "253:6:17", + "nodeType": "YulTypedName", + "src": "253:6:17", + "type": "" + } + ], + "src": "192:347:17" + }, + { + "body": { + "nativeSrc": "650:377:17", + "nodeType": "YulBlock", + "src": "650:377:17", + "statements": [ + { + "body": { + "nativeSrc": "696:16:17", + "nodeType": "YulBlock", + "src": "696:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "705:1:17", + "nodeType": "YulLiteral", + "src": "705:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "708:1:17", + "nodeType": "YulLiteral", + "src": "708:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "698:6:17", + "nodeType": "YulIdentifier", + "src": "698:6:17" + }, + "nativeSrc": "698:12:17", + "nodeType": "YulFunctionCall", + "src": "698:12:17" + }, + "nativeSrc": "698:12:17", + "nodeType": "YulExpressionStatement", + "src": "698:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "671:7:17", + "nodeType": "YulIdentifier", + "src": "671:7:17" + }, + { + "name": "headStart", + "nativeSrc": "680:9:17", + "nodeType": "YulIdentifier", + "src": "680:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "667:3:17", + "nodeType": "YulIdentifier", + "src": "667:3:17" + }, + "nativeSrc": "667:23:17", + "nodeType": "YulFunctionCall", + "src": "667:23:17" + }, + { + "kind": "number", + "nativeSrc": "692:2:17", + "nodeType": "YulLiteral", + "src": "692:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "663:3:17", + "nodeType": "YulIdentifier", + "src": "663:3:17" + }, + "nativeSrc": "663:32:17", + "nodeType": "YulFunctionCall", + "src": "663:32:17" + }, + "nativeSrc": "660:52:17", + "nodeType": "YulIf", + "src": "660:52:17" + }, + { + "nativeSrc": "721:39:17", + "nodeType": "YulAssignment", + "src": "721:39:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "750:9:17", + "nodeType": "YulIdentifier", + "src": "750:9:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "731:18:17", + "nodeType": "YulIdentifier", + "src": "731:18:17" + }, + "nativeSrc": "731:29:17", + "nodeType": "YulFunctionCall", + "src": "731:29:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "721:6:17", + "nodeType": "YulIdentifier", + "src": "721:6:17" + } + ] + }, + { + "nativeSrc": "769:46:17", + "nodeType": "YulVariableDeclaration", + "src": "769:46:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "800:9:17", + "nodeType": "YulIdentifier", + "src": "800:9:17" + }, + { + "kind": "number", + "nativeSrc": "811:2:17", + "nodeType": "YulLiteral", + "src": "811:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "796:3:17", + "nodeType": "YulIdentifier", + "src": "796:3:17" + }, + "nativeSrc": "796:18:17", + "nodeType": "YulFunctionCall", + "src": "796:18:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "783:12:17", + "nodeType": "YulIdentifier", + "src": "783:12:17" + }, + "nativeSrc": "783:32:17", + "nodeType": "YulFunctionCall", + "src": "783:32:17" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "773:6:17", + "nodeType": "YulTypedName", + "src": "773:6:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "858:16:17", + "nodeType": "YulBlock", + "src": "858:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "867:1:17", + "nodeType": "YulLiteral", + "src": "867:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "870:1:17", + "nodeType": "YulLiteral", + "src": "870:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "860:6:17", + "nodeType": "YulIdentifier", + "src": "860:6:17" + }, + "nativeSrc": "860:12:17", + "nodeType": "YulFunctionCall", + "src": "860:12:17" + }, + "nativeSrc": "860:12:17", + "nodeType": "YulExpressionStatement", + "src": "860:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "830:6:17", + "nodeType": "YulIdentifier", + "src": "830:6:17" + }, + { + "kind": "number", + "nativeSrc": "838:18:17", + "nodeType": "YulLiteral", + "src": "838:18:17", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "827:2:17", + "nodeType": "YulIdentifier", + "src": "827:2:17" + }, + "nativeSrc": "827:30:17", + "nodeType": "YulFunctionCall", + "src": "827:30:17" + }, + "nativeSrc": "824:50:17", + "nodeType": "YulIf", + "src": "824:50:17" + }, + { + "nativeSrc": "883:84:17", + "nodeType": "YulVariableDeclaration", + "src": "883:84:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "939:9:17", + "nodeType": "YulIdentifier", + "src": "939:9:17" + }, + { + "name": "offset", + "nativeSrc": "950:6:17", + "nodeType": "YulIdentifier", + "src": "950:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "935:3:17", + "nodeType": "YulIdentifier", + "src": "935:3:17" + }, + "nativeSrc": "935:22:17", + "nodeType": "YulFunctionCall", + "src": "935:22:17" + }, + { + "name": "dataEnd", + "nativeSrc": "959:7:17", + "nodeType": "YulIdentifier", + "src": "959:7:17" + } + ], + "functionName": { + "name": "abi_decode_bytes_calldata", + "nativeSrc": "909:25:17", + "nodeType": "YulIdentifier", + "src": "909:25:17" + }, + "nativeSrc": "909:58:17", + "nodeType": "YulFunctionCall", + "src": "909:58:17" + }, + "variables": [ + { + "name": "value1_1", + "nativeSrc": "887:8:17", + "nodeType": "YulTypedName", + "src": "887:8:17", + "type": "" + }, + { + "name": "value2_1", + "nativeSrc": "897:8:17", + "nodeType": "YulTypedName", + "src": "897:8:17", + "type": "" + } + ] + }, + { + "nativeSrc": "976:18:17", + "nodeType": "YulAssignment", + "src": "976:18:17", + "value": { + "name": "value1_1", + "nativeSrc": "986:8:17", + "nodeType": "YulIdentifier", + "src": "986:8:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "976:6:17", + "nodeType": "YulIdentifier", + "src": "976:6:17" + } + ] + }, + { + "nativeSrc": "1003:18:17", + "nodeType": "YulAssignment", + "src": "1003:18:17", + "value": { + "name": "value2_1", + "nativeSrc": "1013:8:17", + "nodeType": "YulIdentifier", + "src": "1013:8:17" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "1003:6:17", + "nodeType": "YulIdentifier", + "src": "1003:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", + "nativeSrc": "544:483:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "600:9:17", + "nodeType": "YulTypedName", + "src": "600:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "611:7:17", + "nodeType": "YulTypedName", + "src": "611:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "623:6:17", + "nodeType": "YulTypedName", + "src": "623:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "631:6:17", + "nodeType": "YulTypedName", + "src": "631:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "639:6:17", + "nodeType": "YulTypedName", + "src": "639:6:17", + "type": "" + } + ], + "src": "544:483:17" + }, + { + "body": { + "nativeSrc": "1081:239:17", + "nodeType": "YulBlock", + "src": "1081:239:17", + "statements": [ + { + "nativeSrc": "1091:26:17", + "nodeType": "YulVariableDeclaration", + "src": "1091:26:17", + "value": { + "arguments": [ + { + "name": "value", + "nativeSrc": "1111:5:17", + "nodeType": "YulIdentifier", + "src": "1111:5:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1105:5:17", + "nodeType": "YulIdentifier", + "src": "1105:5:17" + }, + "nativeSrc": "1105:12:17", + "nodeType": "YulFunctionCall", + "src": "1105:12:17" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "1095:6:17", + "nodeType": "YulTypedName", + "src": "1095:6:17", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "1133:3:17", + "nodeType": "YulIdentifier", + "src": "1133:3:17" + }, + { + "name": "length", + "nativeSrc": "1138:6:17", + "nodeType": "YulIdentifier", + "src": "1138:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1126:6:17", + "nodeType": "YulIdentifier", + "src": "1126:6:17" + }, + "nativeSrc": "1126:19:17", + "nodeType": "YulFunctionCall", + "src": "1126:19:17" + }, + "nativeSrc": "1126:19:17", + "nodeType": "YulExpressionStatement", + "src": "1126:19:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "1164:3:17", + "nodeType": "YulIdentifier", + "src": "1164:3:17" + }, + { + "kind": "number", + "nativeSrc": "1169:4:17", + "nodeType": "YulLiteral", + "src": "1169:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1160:3:17", + "nodeType": "YulIdentifier", + "src": "1160:3:17" + }, + "nativeSrc": "1160:14:17", + "nodeType": "YulFunctionCall", + "src": "1160:14:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1180:5:17", + "nodeType": "YulIdentifier", + "src": "1180:5:17" + }, + { + "kind": "number", + "nativeSrc": "1187:4:17", + "nodeType": "YulLiteral", + "src": "1187:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1176:3:17", + "nodeType": "YulIdentifier", + "src": "1176:3:17" + }, + "nativeSrc": "1176:16:17", + "nodeType": "YulFunctionCall", + "src": "1176:16:17" + }, + { + "name": "length", + "nativeSrc": "1194:6:17", + "nodeType": "YulIdentifier", + "src": "1194:6:17" + } + ], + "functionName": { + "name": "mcopy", + "nativeSrc": "1154:5:17", + "nodeType": "YulIdentifier", + "src": "1154:5:17" + }, + "nativeSrc": "1154:47:17", + "nodeType": "YulFunctionCall", + "src": "1154:47:17" + }, + "nativeSrc": "1154:47:17", + "nodeType": "YulExpressionStatement", + "src": "1154:47:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "1225:3:17", + "nodeType": "YulIdentifier", + "src": "1225:3:17" + }, + { + "name": "length", + "nativeSrc": "1230:6:17", + "nodeType": "YulIdentifier", + "src": "1230:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1221:3:17", + "nodeType": "YulIdentifier", + "src": "1221:3:17" + }, + "nativeSrc": "1221:16:17", + "nodeType": "YulFunctionCall", + "src": "1221:16:17" + }, + { + "kind": "number", + "nativeSrc": "1239:4:17", + "nodeType": "YulLiteral", + "src": "1239:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1217:3:17", + "nodeType": "YulIdentifier", + "src": "1217:3:17" + }, + "nativeSrc": "1217:27:17", + "nodeType": "YulFunctionCall", + "src": "1217:27:17" + }, + { + "kind": "number", + "nativeSrc": "1246:1:17", + "nodeType": "YulLiteral", + "src": "1246:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1210:6:17", + "nodeType": "YulIdentifier", + "src": "1210:6:17" + }, + "nativeSrc": "1210:38:17", + "nodeType": "YulFunctionCall", + "src": "1210:38:17" + }, + "nativeSrc": "1210:38:17", + "nodeType": "YulExpressionStatement", + "src": "1210:38:17" + }, + { + "nativeSrc": "1257:57:17", + "nodeType": "YulAssignment", + "src": "1257:57:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "1272:3:17", + "nodeType": "YulIdentifier", + "src": "1272:3:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "1285:6:17", + "nodeType": "YulIdentifier", + "src": "1285:6:17" + }, + { + "kind": "number", + "nativeSrc": "1293:2:17", + "nodeType": "YulLiteral", + "src": "1293:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1281:3:17", + "nodeType": "YulIdentifier", + "src": "1281:3:17" + }, + "nativeSrc": "1281:15:17", + "nodeType": "YulFunctionCall", + "src": "1281:15:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1302:2:17", + "nodeType": "YulLiteral", + "src": "1302:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "1298:3:17", + "nodeType": "YulIdentifier", + "src": "1298:3:17" + }, + "nativeSrc": "1298:7:17", + "nodeType": "YulFunctionCall", + "src": "1298:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1277:3:17", + "nodeType": "YulIdentifier", + "src": "1277:3:17" + }, + "nativeSrc": "1277:29:17", + "nodeType": "YulFunctionCall", + "src": "1277:29:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1268:3:17", + "nodeType": "YulIdentifier", + "src": "1268:3:17" + }, + "nativeSrc": "1268:39:17", + "nodeType": "YulFunctionCall", + "src": "1268:39:17" + }, + { + "kind": "number", + "nativeSrc": "1309:4:17", + "nodeType": "YulLiteral", + "src": "1309:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1264:3:17", + "nodeType": "YulIdentifier", + "src": "1264:3:17" + }, + "nativeSrc": "1264:50:17", + "nodeType": "YulFunctionCall", + "src": "1264:50:17" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "1257:3:17", + "nodeType": "YulIdentifier", + "src": "1257:3:17" + } + ] + } + ] + }, + "name": "abi_encode_bytes", + "nativeSrc": "1032:288:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "1058:5:17", + "nodeType": "YulTypedName", + "src": "1058:5:17", + "type": "" + }, + { + "name": "pos", + "nativeSrc": "1065:3:17", + "nodeType": "YulTypedName", + "src": "1065:3:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "1073:3:17", + "nodeType": "YulTypedName", + "src": "1073:3:17", + "type": "" + } + ], + "src": "1032:288:17" + }, + { + "body": { + "nativeSrc": "1664:535:17", + "nodeType": "YulBlock", + "src": "1664:535:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1681:9:17", + "nodeType": "YulIdentifier", + "src": "1681:9:17" + }, + { + "name": "value0", + "nativeSrc": "1692:6:17", + "nodeType": "YulIdentifier", + "src": "1692:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1674:6:17", + "nodeType": "YulIdentifier", + "src": "1674:6:17" + }, + "nativeSrc": "1674:25:17", + "nodeType": "YulFunctionCall", + "src": "1674:25:17" + }, + "nativeSrc": "1674:25:17", + "nodeType": "YulExpressionStatement", + "src": "1674:25:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1719:9:17", + "nodeType": "YulIdentifier", + "src": "1719:9:17" + }, + { + "kind": "number", + "nativeSrc": "1730:2:17", + "nodeType": "YulLiteral", + "src": "1730:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1715:3:17", + "nodeType": "YulIdentifier", + "src": "1715:3:17" + }, + "nativeSrc": "1715:18:17", + "nodeType": "YulFunctionCall", + "src": "1715:18:17" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "1739:6:17", + "nodeType": "YulIdentifier", + "src": "1739:6:17" + }, + { + "kind": "number", + "nativeSrc": "1747:10:17", + "nodeType": "YulLiteral", + "src": "1747:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1735:3:17", + "nodeType": "YulIdentifier", + "src": "1735:3:17" + }, + "nativeSrc": "1735:23:17", + "nodeType": "YulFunctionCall", + "src": "1735:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1708:6:17", + "nodeType": "YulIdentifier", + "src": "1708:6:17" + }, + "nativeSrc": "1708:51:17", + "nodeType": "YulFunctionCall", + "src": "1708:51:17" + }, + "nativeSrc": "1708:51:17", + "nodeType": "YulExpressionStatement", + "src": "1708:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1779:9:17", + "nodeType": "YulIdentifier", + "src": "1779:9:17" + }, + { + "kind": "number", + "nativeSrc": "1790:2:17", + "nodeType": "YulLiteral", + "src": "1790:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1775:3:17", + "nodeType": "YulIdentifier", + "src": "1775:3:17" + }, + "nativeSrc": "1775:18:17", + "nodeType": "YulFunctionCall", + "src": "1775:18:17" + }, + { + "name": "value2", + "nativeSrc": "1795:6:17", + "nodeType": "YulIdentifier", + "src": "1795:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1768:6:17", + "nodeType": "YulIdentifier", + "src": "1768:6:17" + }, + "nativeSrc": "1768:34:17", + "nodeType": "YulFunctionCall", + "src": "1768:34:17" + }, + "nativeSrc": "1768:34:17", + "nodeType": "YulExpressionStatement", + "src": "1768:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1822:9:17", + "nodeType": "YulIdentifier", + "src": "1822:9:17" + }, + { + "kind": "number", + "nativeSrc": "1833:2:17", + "nodeType": "YulLiteral", + "src": "1833:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1818:3:17", + "nodeType": "YulIdentifier", + "src": "1818:3:17" + }, + "nativeSrc": "1818:18:17", + "nodeType": "YulFunctionCall", + "src": "1818:18:17" + }, + { + "arguments": [ + { + "name": "value3", + "nativeSrc": "1842:6:17", + "nodeType": "YulIdentifier", + "src": "1842:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1858:3:17", + "nodeType": "YulLiteral", + "src": "1858:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1863:1:17", + "nodeType": "YulLiteral", + "src": "1863:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1854:3:17", + "nodeType": "YulIdentifier", + "src": "1854:3:17" + }, + "nativeSrc": "1854:11:17", + "nodeType": "YulFunctionCall", + "src": "1854:11:17" + }, + { + "kind": "number", + "nativeSrc": "1867:1:17", + "nodeType": "YulLiteral", + "src": "1867:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1850:3:17", + "nodeType": "YulIdentifier", + "src": "1850:3:17" + }, + "nativeSrc": "1850:19:17", + "nodeType": "YulFunctionCall", + "src": "1850:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1838:3:17", + "nodeType": "YulIdentifier", + "src": "1838:3:17" + }, + "nativeSrc": "1838:32:17", + "nodeType": "YulFunctionCall", + "src": "1838:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1811:6:17", + "nodeType": "YulIdentifier", + "src": "1811:6:17" + }, + "nativeSrc": "1811:60:17", + "nodeType": "YulFunctionCall", + "src": "1811:60:17" + }, + "nativeSrc": "1811:60:17", + "nodeType": "YulExpressionStatement", + "src": "1811:60:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1891:9:17", + "nodeType": "YulIdentifier", + "src": "1891:9:17" + }, + { + "kind": "number", + "nativeSrc": "1902:3:17", + "nodeType": "YulLiteral", + "src": "1902:3:17", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1887:3:17", + "nodeType": "YulIdentifier", + "src": "1887:3:17" + }, + "nativeSrc": "1887:19:17", + "nodeType": "YulFunctionCall", + "src": "1887:19:17" + }, + { + "name": "value4", + "nativeSrc": "1908:6:17", + "nodeType": "YulIdentifier", + "src": "1908:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1880:6:17", + "nodeType": "YulIdentifier", + "src": "1880:6:17" + }, + "nativeSrc": "1880:35:17", + "nodeType": "YulFunctionCall", + "src": "1880:35:17" + }, + "nativeSrc": "1880:35:17", + "nodeType": "YulExpressionStatement", + "src": "1880:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1935:9:17", + "nodeType": "YulIdentifier", + "src": "1935:9:17" + }, + { + "kind": "number", + "nativeSrc": "1946:3:17", + "nodeType": "YulLiteral", + "src": "1946:3:17", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1931:3:17", + "nodeType": "YulIdentifier", + "src": "1931:3:17" + }, + "nativeSrc": "1931:19:17", + "nodeType": "YulFunctionCall", + "src": "1931:19:17" + }, + { + "name": "value5", + "nativeSrc": "1952:6:17", + "nodeType": "YulIdentifier", + "src": "1952:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1924:6:17", + "nodeType": "YulIdentifier", + "src": "1924:6:17" + }, + "nativeSrc": "1924:35:17", + "nodeType": "YulFunctionCall", + "src": "1924:35:17" + }, + "nativeSrc": "1924:35:17", + "nodeType": "YulExpressionStatement", + "src": "1924:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1979:9:17", + "nodeType": "YulIdentifier", + "src": "1979:9:17" + }, + { + "kind": "number", + "nativeSrc": "1990:3:17", + "nodeType": "YulLiteral", + "src": "1990:3:17", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1975:3:17", + "nodeType": "YulIdentifier", + "src": "1975:3:17" + }, + "nativeSrc": "1975:19:17", + "nodeType": "YulFunctionCall", + "src": "1975:19:17" + }, + { + "arguments": [ + { + "name": "value6", + "nativeSrc": "2000:6:17", + "nodeType": "YulIdentifier", + "src": "2000:6:17" + }, + { + "kind": "number", + "nativeSrc": "2008:10:17", + "nodeType": "YulLiteral", + "src": "2008:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1996:3:17", + "nodeType": "YulIdentifier", + "src": "1996:3:17" + }, + "nativeSrc": "1996:23:17", + "nodeType": "YulFunctionCall", + "src": "1996:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1968:6:17", + "nodeType": "YulIdentifier", + "src": "1968:6:17" + }, + "nativeSrc": "1968:52:17", + "nodeType": "YulFunctionCall", + "src": "1968:52:17" + }, + "nativeSrc": "1968:52:17", + "nodeType": "YulExpressionStatement", + "src": "1968:52:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2040:9:17", + "nodeType": "YulIdentifier", + "src": "2040:9:17" + }, + { + "kind": "number", + "nativeSrc": "2051:3:17", + "nodeType": "YulLiteral", + "src": "2051:3:17", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2036:3:17", + "nodeType": "YulIdentifier", + "src": "2036:3:17" + }, + "nativeSrc": "2036:19:17", + "nodeType": "YulFunctionCall", + "src": "2036:19:17" + }, + { + "kind": "number", + "nativeSrc": "2057:3:17", + "nodeType": "YulLiteral", + "src": "2057:3:17", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2029:6:17", + "nodeType": "YulIdentifier", + "src": "2029:6:17" + }, + "nativeSrc": "2029:32:17", + "nodeType": "YulFunctionCall", + "src": "2029:32:17" + }, + "nativeSrc": "2029:32:17", + "nodeType": "YulExpressionStatement", + "src": "2029:32:17" + }, + { + "nativeSrc": "2070:53:17", + "nodeType": "YulAssignment", + "src": "2070:53:17", + "value": { + "arguments": [ + { + "name": "value7", + "nativeSrc": "2095:6:17", + "nodeType": "YulIdentifier", + "src": "2095:6:17" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2107:9:17", + "nodeType": "YulIdentifier", + "src": "2107:9:17" + }, + { + "kind": "number", + "nativeSrc": "2118:3:17", + "nodeType": "YulLiteral", + "src": "2118:3:17", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2103:3:17", + "nodeType": "YulIdentifier", + "src": "2103:3:17" + }, + "nativeSrc": "2103:19:17", + "nodeType": "YulFunctionCall", + "src": "2103:19:17" + } + ], + "functionName": { + "name": "abi_encode_bytes", + "nativeSrc": "2078:16:17", + "nodeType": "YulIdentifier", + "src": "2078:16:17" + }, + "nativeSrc": "2078:45:17", + "nodeType": "YulFunctionCall", + "src": "2078:45:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2070:4:17", + "nodeType": "YulIdentifier", + "src": "2070:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2143:9:17", + "nodeType": "YulIdentifier", + "src": "2143:9:17" + }, + { + "kind": "number", + "nativeSrc": "2154:3:17", + "nodeType": "YulLiteral", + "src": "2154:3:17", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2139:3:17", + "nodeType": "YulIdentifier", + "src": "2139:3:17" + }, + "nativeSrc": "2139:19:17", + "nodeType": "YulFunctionCall", + "src": "2139:19:17" + }, + { + "arguments": [ + { + "name": "value8", + "nativeSrc": "2164:6:17", + "nodeType": "YulIdentifier", + "src": "2164:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2180:3:17", + "nodeType": "YulLiteral", + "src": "2180:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2185:1:17", + "nodeType": "YulLiteral", + "src": "2185:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2176:3:17", + "nodeType": "YulIdentifier", + "src": "2176:3:17" + }, + "nativeSrc": "2176:11:17", + "nodeType": "YulFunctionCall", + "src": "2176:11:17" + }, + { + "kind": "number", + "nativeSrc": "2189:1:17", + "nodeType": "YulLiteral", + "src": "2189:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2172:3:17", + "nodeType": "YulIdentifier", + "src": "2172:3:17" + }, + "nativeSrc": "2172:19:17", + "nodeType": "YulFunctionCall", + "src": "2172:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2160:3:17", + "nodeType": "YulIdentifier", + "src": "2160:3:17" + }, + "nativeSrc": "2160:32:17", + "nodeType": "YulFunctionCall", + "src": "2160:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2132:6:17", + "nodeType": "YulIdentifier", + "src": "2132:6:17" + }, + "nativeSrc": "2132:61:17", + "nodeType": "YulFunctionCall", + "src": "2132:61:17" + }, + "nativeSrc": "2132:61:17", + "nodeType": "YulExpressionStatement", + "src": "2132:61:17" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr_t_address__to_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr_t_address__fromStack_reversed", + "nativeSrc": "1325:874:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1569:9:17", + "nodeType": "YulTypedName", + "src": "1569:9:17", + "type": "" + }, + { + "name": "value8", + "nativeSrc": "1580:6:17", + "nodeType": "YulTypedName", + "src": "1580:6:17", + "type": "" + }, + { + "name": "value7", + "nativeSrc": "1588:6:17", + "nodeType": "YulTypedName", + "src": "1588:6:17", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "1596:6:17", + "nodeType": "YulTypedName", + "src": "1596:6:17", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "1604:6:17", + "nodeType": "YulTypedName", + "src": "1604:6:17", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "1612:6:17", + "nodeType": "YulTypedName", + "src": "1612:6:17", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "1620:6:17", + "nodeType": "YulTypedName", + "src": "1620:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1628:6:17", + "nodeType": "YulTypedName", + "src": "1628:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1636:6:17", + "nodeType": "YulTypedName", + "src": "1636:6:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1644:6:17", + "nodeType": "YulTypedName", + "src": "1644:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1655:4:17", + "nodeType": "YulTypedName", + "src": "1655:4:17", + "type": "" + } + ], + "src": "1325:874:17" + }, + { + "body": { + "nativeSrc": "2252:115:17", + "nodeType": "YulBlock", + "src": "2252:115:17", + "statements": [ + { + "nativeSrc": "2262:29:17", + "nodeType": "YulAssignment", + "src": "2262:29:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "2284:6:17", + "nodeType": "YulIdentifier", + "src": "2284:6:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2271:12:17", + "nodeType": "YulIdentifier", + "src": "2271:12:17" + }, + "nativeSrc": "2271:20:17", + "nodeType": "YulFunctionCall", + "src": "2271:20:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "2262:5:17", + "nodeType": "YulIdentifier", + "src": "2262:5:17" + } + ] + }, + { + "body": { + "nativeSrc": "2345:16:17", + "nodeType": "YulBlock", + "src": "2345:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2354:1:17", + "nodeType": "YulLiteral", + "src": "2354:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2357:1:17", + "nodeType": "YulLiteral", + "src": "2357:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2347:6:17", + "nodeType": "YulIdentifier", + "src": "2347:6:17" + }, + "nativeSrc": "2347:12:17", + "nodeType": "YulFunctionCall", + "src": "2347:12:17" + }, + "nativeSrc": "2347:12:17", + "nodeType": "YulExpressionStatement", + "src": "2347:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "2313:5:17", + "nodeType": "YulIdentifier", + "src": "2313:5:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "2324:5:17", + "nodeType": "YulIdentifier", + "src": "2324:5:17" + }, + { + "kind": "number", + "nativeSrc": "2331:10:17", + "nodeType": "YulLiteral", + "src": "2331:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2320:3:17", + "nodeType": "YulIdentifier", + "src": "2320:3:17" + }, + "nativeSrc": "2320:22:17", + "nodeType": "YulFunctionCall", + "src": "2320:22:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "2310:2:17", + "nodeType": "YulIdentifier", + "src": "2310:2:17" + }, + "nativeSrc": "2310:33:17", + "nodeType": "YulFunctionCall", + "src": "2310:33:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "2303:6:17", + "nodeType": "YulIdentifier", + "src": "2303:6:17" + }, + "nativeSrc": "2303:41:17", + "nodeType": "YulFunctionCall", + "src": "2303:41:17" + }, + "nativeSrc": "2300:61:17", + "nodeType": "YulIf", + "src": "2300:61:17" + } + ] + }, + "name": "abi_decode_uint32", + "nativeSrc": "2204:163:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "2231:6:17", + "nodeType": "YulTypedName", + "src": "2231:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "2242:5:17", + "nodeType": "YulTypedName", + "src": "2242:5:17", + "type": "" + } + ], + "src": "2204:163:17" + }, + { + "body": { + "nativeSrc": "2578:900:17", + "nodeType": "YulBlock", + "src": "2578:900:17", + "statements": [ + { + "body": { + "nativeSrc": "2625:16:17", + "nodeType": "YulBlock", + "src": "2625:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2634:1:17", + "nodeType": "YulLiteral", + "src": "2634:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2637:1:17", + "nodeType": "YulLiteral", + "src": "2637:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2627:6:17", + "nodeType": "YulIdentifier", + "src": "2627:6:17" + }, + "nativeSrc": "2627:12:17", + "nodeType": "YulFunctionCall", + "src": "2627:12:17" + }, + "nativeSrc": "2627:12:17", + "nodeType": "YulExpressionStatement", + "src": "2627:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2599:7:17", + "nodeType": "YulIdentifier", + "src": "2599:7:17" + }, + { + "name": "headStart", + "nativeSrc": "2608:9:17", + "nodeType": "YulIdentifier", + "src": "2608:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2595:3:17", + "nodeType": "YulIdentifier", + "src": "2595:3:17" + }, + "nativeSrc": "2595:23:17", + "nodeType": "YulFunctionCall", + "src": "2595:23:17" + }, + { + "kind": "number", + "nativeSrc": "2620:3:17", + "nodeType": "YulLiteral", + "src": "2620:3:17", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2591:3:17", + "nodeType": "YulIdentifier", + "src": "2591:3:17" + }, + "nativeSrc": "2591:33:17", + "nodeType": "YulFunctionCall", + "src": "2591:33:17" + }, + "nativeSrc": "2588:53:17", + "nodeType": "YulIf", + "src": "2588:53:17" + }, + { + "nativeSrc": "2650:14:17", + "nodeType": "YulVariableDeclaration", + "src": "2650:14:17", + "value": { + "kind": "number", + "nativeSrc": "2663:1:17", + "nodeType": "YulLiteral", + "src": "2663:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "2654:5:17", + "nodeType": "YulTypedName", + "src": "2654:5:17", + "type": "" + } + ] + }, + { + "nativeSrc": "2673:32:17", + "nodeType": "YulAssignment", + "src": "2673:32:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2695:9:17", + "nodeType": "YulIdentifier", + "src": "2695:9:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2682:12:17", + "nodeType": "YulIdentifier", + "src": "2682:12:17" + }, + "nativeSrc": "2682:23:17", + "nodeType": "YulFunctionCall", + "src": "2682:23:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "2673:5:17", + "nodeType": "YulIdentifier", + "src": "2673:5:17" + } + ] + }, + { + "nativeSrc": "2714:15:17", + "nodeType": "YulAssignment", + "src": "2714:15:17", + "value": { + "name": "value", + "nativeSrc": "2724:5:17", + "nodeType": "YulIdentifier", + "src": "2724:5:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2714:6:17", + "nodeType": "YulIdentifier", + "src": "2714:6:17" + } + ] + }, + { + "nativeSrc": "2738:47:17", + "nodeType": "YulAssignment", + "src": "2738:47:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2770:9:17", + "nodeType": "YulIdentifier", + "src": "2770:9:17" + }, + { + "kind": "number", + "nativeSrc": "2781:2:17", + "nodeType": "YulLiteral", + "src": "2781:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2766:3:17", + "nodeType": "YulIdentifier", + "src": "2766:3:17" + }, + "nativeSrc": "2766:18:17", + "nodeType": "YulFunctionCall", + "src": "2766:18:17" + } + ], + "functionName": { + "name": "abi_decode_uint32", + "nativeSrc": "2748:17:17", + "nodeType": "YulIdentifier", + "src": "2748:17:17" + }, + "nativeSrc": "2748:37:17", + "nodeType": "YulFunctionCall", + "src": "2748:37:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "2738:6:17", + "nodeType": "YulIdentifier", + "src": "2738:6:17" + } + ] + }, + { + "nativeSrc": "2794:16:17", + "nodeType": "YulVariableDeclaration", + "src": "2794:16:17", + "value": { + "kind": "number", + "nativeSrc": "2809:1:17", + "nodeType": "YulLiteral", + "src": "2809:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "2798:7:17", + "nodeType": "YulTypedName", + "src": "2798:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "2819:43:17", + "nodeType": "YulAssignment", + "src": "2819:43:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2847:9:17", + "nodeType": "YulIdentifier", + "src": "2847:9:17" + }, + { + "kind": "number", + "nativeSrc": "2858:2:17", + "nodeType": "YulLiteral", + "src": "2858:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2843:3:17", + "nodeType": "YulIdentifier", + "src": "2843:3:17" + }, + "nativeSrc": "2843:18:17", + "nodeType": "YulFunctionCall", + "src": "2843:18:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2830:12:17", + "nodeType": "YulIdentifier", + "src": "2830:12:17" + }, + "nativeSrc": "2830:32:17", + "nodeType": "YulFunctionCall", + "src": "2830:32:17" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "2819:7:17", + "nodeType": "YulIdentifier", + "src": "2819:7:17" + } + ] + }, + { + "nativeSrc": "2871:17:17", + "nodeType": "YulAssignment", + "src": "2871:17:17", + "value": { + "name": "value_1", + "nativeSrc": "2881:7:17", + "nodeType": "YulIdentifier", + "src": "2881:7:17" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "2871:6:17", + "nodeType": "YulIdentifier", + "src": "2871:6:17" + } + ] + }, + { + "nativeSrc": "2897:48:17", + "nodeType": "YulAssignment", + "src": "2897:48:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2930:9:17", + "nodeType": "YulIdentifier", + "src": "2930:9:17" + }, + { + "kind": "number", + "nativeSrc": "2941:2:17", + "nodeType": "YulLiteral", + "src": "2941:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2926:3:17", + "nodeType": "YulIdentifier", + "src": "2926:3:17" + }, + "nativeSrc": "2926:18:17", + "nodeType": "YulFunctionCall", + "src": "2926:18:17" + } + ], + "functionName": { + "name": "abi_decode_address", + "nativeSrc": "2907:18:17", + "nodeType": "YulIdentifier", + "src": "2907:18:17" + }, + "nativeSrc": "2907:38:17", + "nodeType": "YulFunctionCall", + "src": "2907:38:17" + }, + "variableNames": [ + { + "name": "value3", + "nativeSrc": "2897:6:17", + "nodeType": "YulIdentifier", + "src": "2897:6:17" + } + ] + }, + { + "nativeSrc": "2954:16:17", + "nodeType": "YulVariableDeclaration", + "src": "2954:16:17", + "value": { + "kind": "number", + "nativeSrc": "2969:1:17", + "nodeType": "YulLiteral", + "src": "2969:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "2958:7:17", + "nodeType": "YulTypedName", + "src": "2958:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "2979:44:17", + "nodeType": "YulAssignment", + "src": "2979:44:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3007:9:17", + "nodeType": "YulIdentifier", + "src": "3007:9:17" + }, + { + "kind": "number", + "nativeSrc": "3018:3:17", + "nodeType": "YulLiteral", + "src": "3018:3:17", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3003:3:17", + "nodeType": "YulIdentifier", + "src": "3003:3:17" + }, + "nativeSrc": "3003:19:17", + "nodeType": "YulFunctionCall", + "src": "3003:19:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2990:12:17", + "nodeType": "YulIdentifier", + "src": "2990:12:17" + }, + "nativeSrc": "2990:33:17", + "nodeType": "YulFunctionCall", + "src": "2990:33:17" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "2979:7:17", + "nodeType": "YulIdentifier", + "src": "2979:7:17" + } + ] + }, + { + "nativeSrc": "3032:17:17", + "nodeType": "YulAssignment", + "src": "3032:17:17", + "value": { + "name": "value_2", + "nativeSrc": "3042:7:17", + "nodeType": "YulIdentifier", + "src": "3042:7:17" + }, + "variableNames": [ + { + "name": "value4", + "nativeSrc": "3032:6:17", + "nodeType": "YulIdentifier", + "src": "3032:6:17" + } + ] + }, + { + "nativeSrc": "3058:16:17", + "nodeType": "YulVariableDeclaration", + "src": "3058:16:17", + "value": { + "kind": "number", + "nativeSrc": "3073:1:17", + "nodeType": "YulLiteral", + "src": "3073:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "3062:7:17", + "nodeType": "YulTypedName", + "src": "3062:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "3083:44:17", + "nodeType": "YulAssignment", + "src": "3083:44:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3111:9:17", + "nodeType": "YulIdentifier", + "src": "3111:9:17" + }, + { + "kind": "number", + "nativeSrc": "3122:3:17", + "nodeType": "YulLiteral", + "src": "3122:3:17", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3107:3:17", + "nodeType": "YulIdentifier", + "src": "3107:3:17" + }, + "nativeSrc": "3107:19:17", + "nodeType": "YulFunctionCall", + "src": "3107:19:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "3094:12:17", + "nodeType": "YulIdentifier", + "src": "3094:12:17" + }, + "nativeSrc": "3094:33:17", + "nodeType": "YulFunctionCall", + "src": "3094:33:17" + }, + "variableNames": [ + { + "name": "value_3", + "nativeSrc": "3083:7:17", + "nodeType": "YulIdentifier", + "src": "3083:7:17" + } + ] + }, + { + "nativeSrc": "3136:17:17", + "nodeType": "YulAssignment", + "src": "3136:17:17", + "value": { + "name": "value_3", + "nativeSrc": "3146:7:17", + "nodeType": "YulIdentifier", + "src": "3146:7:17" + }, + "variableNames": [ + { + "name": "value5", + "nativeSrc": "3136:6:17", + "nodeType": "YulIdentifier", + "src": "3136:6:17" + } + ] + }, + { + "nativeSrc": "3162:48:17", + "nodeType": "YulAssignment", + "src": "3162:48:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3194:9:17", + "nodeType": "YulIdentifier", + "src": "3194:9:17" + }, + { + "kind": "number", + "nativeSrc": "3205:3:17", + "nodeType": "YulLiteral", + "src": "3205:3:17", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3190:3:17", + "nodeType": "YulIdentifier", + "src": "3190:3:17" + }, + "nativeSrc": "3190:19:17", + "nodeType": "YulFunctionCall", + "src": "3190:19:17" + } + ], + "functionName": { + "name": "abi_decode_uint32", + "nativeSrc": "3172:17:17", + "nodeType": "YulIdentifier", + "src": "3172:17:17" + }, + "nativeSrc": "3172:38:17", + "nodeType": "YulFunctionCall", + "src": "3172:38:17" + }, + "variableNames": [ + { + "name": "value6", + "nativeSrc": "3162:6:17", + "nodeType": "YulIdentifier", + "src": "3162:6:17" + } + ] + }, + { + "nativeSrc": "3219:47:17", + "nodeType": "YulVariableDeclaration", + "src": "3219:47:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3250:9:17", + "nodeType": "YulIdentifier", + "src": "3250:9:17" + }, + { + "kind": "number", + "nativeSrc": "3261:3:17", + "nodeType": "YulLiteral", + "src": "3261:3:17", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3246:3:17", + "nodeType": "YulIdentifier", + "src": "3246:3:17" + }, + "nativeSrc": "3246:19:17", + "nodeType": "YulFunctionCall", + "src": "3246:19:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "3233:12:17", + "nodeType": "YulIdentifier", + "src": "3233:12:17" + }, + "nativeSrc": "3233:33:17", + "nodeType": "YulFunctionCall", + "src": "3233:33:17" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "3223:6:17", + "nodeType": "YulTypedName", + "src": "3223:6:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3309:16:17", + "nodeType": "YulBlock", + "src": "3309:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3318:1:17", + "nodeType": "YulLiteral", + "src": "3318:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3321:1:17", + "nodeType": "YulLiteral", + "src": "3321:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3311:6:17", + "nodeType": "YulIdentifier", + "src": "3311:6:17" + }, + "nativeSrc": "3311:12:17", + "nodeType": "YulFunctionCall", + "src": "3311:12:17" + }, + "nativeSrc": "3311:12:17", + "nodeType": "YulExpressionStatement", + "src": "3311:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "3281:6:17", + "nodeType": "YulIdentifier", + "src": "3281:6:17" + }, + { + "kind": "number", + "nativeSrc": "3289:18:17", + "nodeType": "YulLiteral", + "src": "3289:18:17", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "3278:2:17", + "nodeType": "YulIdentifier", + "src": "3278:2:17" + }, + "nativeSrc": "3278:30:17", + "nodeType": "YulFunctionCall", + "src": "3278:30:17" + }, + "nativeSrc": "3275:50:17", + "nodeType": "YulIf", + "src": "3275:50:17" + }, + { + "nativeSrc": "3334:84:17", + "nodeType": "YulVariableDeclaration", + "src": "3334:84:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3390:9:17", + "nodeType": "YulIdentifier", + "src": "3390:9:17" + }, + { + "name": "offset", + "nativeSrc": "3401:6:17", + "nodeType": "YulIdentifier", + "src": "3401:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3386:3:17", + "nodeType": "YulIdentifier", + "src": "3386:3:17" + }, + "nativeSrc": "3386:22:17", + "nodeType": "YulFunctionCall", + "src": "3386:22:17" + }, + { + "name": "dataEnd", + "nativeSrc": "3410:7:17", + "nodeType": "YulIdentifier", + "src": "3410:7:17" + } + ], + "functionName": { + "name": "abi_decode_bytes_calldata", + "nativeSrc": "3360:25:17", + "nodeType": "YulIdentifier", + "src": "3360:25:17" + }, + "nativeSrc": "3360:58:17", + "nodeType": "YulFunctionCall", + "src": "3360:58:17" + }, + "variables": [ + { + "name": "value7_1", + "nativeSrc": "3338:8:17", + "nodeType": "YulTypedName", + "src": "3338:8:17", + "type": "" + }, + { + "name": "value8_1", + "nativeSrc": "3348:8:17", + "nodeType": "YulTypedName", + "src": "3348:8:17", + "type": "" + } + ] + }, + { + "nativeSrc": "3427:18:17", + "nodeType": "YulAssignment", + "src": "3427:18:17", + "value": { + "name": "value7_1", + "nativeSrc": "3437:8:17", + "nodeType": "YulIdentifier", + "src": "3437:8:17" + }, + "variableNames": [ + { + "name": "value7", + "nativeSrc": "3427:6:17", + "nodeType": "YulIdentifier", + "src": "3427:6:17" + } + ] + }, + { + "nativeSrc": "3454:18:17", + "nodeType": "YulAssignment", + "src": "3454:18:17", + "value": { + "name": "value8_1", + "nativeSrc": "3464:8:17", + "nodeType": "YulIdentifier", + "src": "3464:8:17" + }, + "variableNames": [ + { + "name": "value8", + "nativeSrc": "3454:6:17", + "nodeType": "YulIdentifier", + "src": "3454:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint32t_bytes32t_addresst_bytes32t_uint256t_uint32t_bytes_calldata_ptr", + "nativeSrc": "2372:1106:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2480:9:17", + "nodeType": "YulTypedName", + "src": "2480:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "2491:7:17", + "nodeType": "YulTypedName", + "src": "2491:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "2503:6:17", + "nodeType": "YulTypedName", + "src": "2503:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "2511:6:17", + "nodeType": "YulTypedName", + "src": "2511:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "2519:6:17", + "nodeType": "YulTypedName", + "src": "2519:6:17", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "2527:6:17", + "nodeType": "YulTypedName", + "src": "2527:6:17", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "2535:6:17", + "nodeType": "YulTypedName", + "src": "2535:6:17", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "2543:6:17", + "nodeType": "YulTypedName", + "src": "2543:6:17", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "2551:6:17", + "nodeType": "YulTypedName", + "src": "2551:6:17", + "type": "" + }, + { + "name": "value7", + "nativeSrc": "2559:6:17", + "nodeType": "YulTypedName", + "src": "2559:6:17", + "type": "" + }, + { + "name": "value8", + "nativeSrc": "2567:6:17", + "nodeType": "YulTypedName", + "src": "2567:6:17", + "type": "" + } + ], + "src": "2372:1106:17" + }, + { + "body": { + "nativeSrc": "3578:92:17", + "nodeType": "YulBlock", + "src": "3578:92:17", + "statements": [ + { + "nativeSrc": "3588:26:17", + "nodeType": "YulAssignment", + "src": "3588:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3600:9:17", + "nodeType": "YulIdentifier", + "src": "3600:9:17" + }, + { + "kind": "number", + "nativeSrc": "3611:2:17", + "nodeType": "YulLiteral", + "src": "3611:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3596:3:17", + "nodeType": "YulIdentifier", + "src": "3596:3:17" + }, + "nativeSrc": "3596:18:17", + "nodeType": "YulFunctionCall", + "src": "3596:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3588:4:17", + "nodeType": "YulIdentifier", + "src": "3588:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3630:9:17", + "nodeType": "YulIdentifier", + "src": "3630:9:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3655:6:17", + "nodeType": "YulIdentifier", + "src": "3655:6:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3648:6:17", + "nodeType": "YulIdentifier", + "src": "3648:6:17" + }, + "nativeSrc": "3648:14:17", + "nodeType": "YulFunctionCall", + "src": "3648:14:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3641:6:17", + "nodeType": "YulIdentifier", + "src": "3641:6:17" + }, + "nativeSrc": "3641:22:17", + "nodeType": "YulFunctionCall", + "src": "3641:22:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3623:6:17", + "nodeType": "YulIdentifier", + "src": "3623:6:17" + }, + "nativeSrc": "3623:41:17", + "nodeType": "YulFunctionCall", + "src": "3623:41:17" + }, + "nativeSrc": "3623:41:17", + "nodeType": "YulExpressionStatement", + "src": "3623:41:17" + } + ] + }, + "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", + "nativeSrc": "3483:187:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3547:9:17", + "nodeType": "YulTypedName", + "src": "3547:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3558:6:17", + "nodeType": "YulTypedName", + "src": "3558:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3569:4:17", + "nodeType": "YulTypedName", + "src": "3569:4:17", + "type": "" + } + ], + "src": "3483:187:17" + }, + { + "body": { + "nativeSrc": "3776:102:17", + "nodeType": "YulBlock", + "src": "3776:102:17", + "statements": [ + { + "nativeSrc": "3786:26:17", + "nodeType": "YulAssignment", + "src": "3786:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3798:9:17", + "nodeType": "YulIdentifier", + "src": "3798:9:17" + }, + { + "kind": "number", + "nativeSrc": "3809:2:17", + "nodeType": "YulLiteral", + "src": "3809:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3794:3:17", + "nodeType": "YulIdentifier", + "src": "3794:3:17" + }, + "nativeSrc": "3794:18:17", + "nodeType": "YulFunctionCall", + "src": "3794:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3786:4:17", + "nodeType": "YulIdentifier", + "src": "3786:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3828:9:17", + "nodeType": "YulIdentifier", + "src": "3828:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3843:6:17", + "nodeType": "YulIdentifier", + "src": "3843:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3859:3:17", + "nodeType": "YulLiteral", + "src": "3859:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "3864:1:17", + "nodeType": "YulLiteral", + "src": "3864:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3855:3:17", + "nodeType": "YulIdentifier", + "src": "3855:3:17" + }, + "nativeSrc": "3855:11:17", + "nodeType": "YulFunctionCall", + "src": "3855:11:17" + }, + { + "kind": "number", + "nativeSrc": "3868:1:17", + "nodeType": "YulLiteral", + "src": "3868:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3851:3:17", + "nodeType": "YulIdentifier", + "src": "3851:3:17" + }, + "nativeSrc": "3851:19:17", + "nodeType": "YulFunctionCall", + "src": "3851:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3839:3:17", + "nodeType": "YulIdentifier", + "src": "3839:3:17" + }, + "nativeSrc": "3839:32:17", + "nodeType": "YulFunctionCall", + "src": "3839:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3821:6:17", + "nodeType": "YulIdentifier", + "src": "3821:6:17" + }, + "nativeSrc": "3821:51:17", + "nodeType": "YulFunctionCall", + "src": "3821:51:17" + }, + "nativeSrc": "3821:51:17", + "nodeType": "YulExpressionStatement", + "src": "3821:51:17" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "3675:203:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3745:9:17", + "nodeType": "YulTypedName", + "src": "3745:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3756:6:17", + "nodeType": "YulTypedName", + "src": "3756:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3767:4:17", + "nodeType": "YulTypedName", + "src": "3767:4:17", + "type": "" + } + ], + "src": "3675:203:17" + }, + { + "body": { + "nativeSrc": "4002:98:17", + "nodeType": "YulBlock", + "src": "4002:98:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4019:9:17", + "nodeType": "YulIdentifier", + "src": "4019:9:17" + }, + { + "kind": "number", + "nativeSrc": "4030:2:17", + "nodeType": "YulLiteral", + "src": "4030:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4012:6:17", + "nodeType": "YulIdentifier", + "src": "4012:6:17" + }, + "nativeSrc": "4012:21:17", + "nodeType": "YulFunctionCall", + "src": "4012:21:17" + }, + "nativeSrc": "4012:21:17", + "nodeType": "YulExpressionStatement", + "src": "4012:21:17" + }, + { + "nativeSrc": "4042:52:17", + "nodeType": "YulAssignment", + "src": "4042:52:17", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "4067:6:17", + "nodeType": "YulIdentifier", + "src": "4067:6:17" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4079:9:17", + "nodeType": "YulIdentifier", + "src": "4079:9:17" + }, + { + "kind": "number", + "nativeSrc": "4090:2:17", + "nodeType": "YulLiteral", + "src": "4090:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4075:3:17", + "nodeType": "YulIdentifier", + "src": "4075:3:17" + }, + "nativeSrc": "4075:18:17", + "nodeType": "YulFunctionCall", + "src": "4075:18:17" + } + ], + "functionName": { + "name": "abi_encode_bytes", + "nativeSrc": "4050:16:17", + "nodeType": "YulIdentifier", + "src": "4050:16:17" + }, + "nativeSrc": "4050:44:17", + "nodeType": "YulFunctionCall", + "src": "4050:44:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4042:4:17", + "nodeType": "YulIdentifier", + "src": "4042:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "3883:217:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3971:9:17", + "nodeType": "YulTypedName", + "src": "3971:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3982:6:17", + "nodeType": "YulTypedName", + "src": "3982:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3993:4:17", + "nodeType": "YulTypedName", + "src": "3993:4:17", + "type": "" + } + ], + "src": "3883:217:17" + }, + { + "body": { + "nativeSrc": "4137:95:17", + "nodeType": "YulBlock", + "src": "4137:95:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4154:1:17", + "nodeType": "YulLiteral", + "src": "4154:1:17", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4161:3:17", + "nodeType": "YulLiteral", + "src": "4161:3:17", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "4166:10:17", + "nodeType": "YulLiteral", + "src": "4166:10:17", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4157:3:17", + "nodeType": "YulIdentifier", + "src": "4157:3:17" + }, + "nativeSrc": "4157:20:17", + "nodeType": "YulFunctionCall", + "src": "4157:20:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4147:6:17", + "nodeType": "YulIdentifier", + "src": "4147:6:17" + }, + "nativeSrc": "4147:31:17", + "nodeType": "YulFunctionCall", + "src": "4147:31:17" + }, + "nativeSrc": "4147:31:17", + "nodeType": "YulExpressionStatement", + "src": "4147:31:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4194:1:17", + "nodeType": "YulLiteral", + "src": "4194:1:17", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "4197:4:17", + "nodeType": "YulLiteral", + "src": "4197:4:17", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4187:6:17", + "nodeType": "YulIdentifier", + "src": "4187:6:17" + }, + "nativeSrc": "4187:15:17", + "nodeType": "YulFunctionCall", + "src": "4187:15:17" + }, + "nativeSrc": "4187:15:17", + "nodeType": "YulExpressionStatement", + "src": "4187:15:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4218:1:17", + "nodeType": "YulLiteral", + "src": "4218:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "4221:4:17", + "nodeType": "YulLiteral", + "src": "4221:4:17", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "4211:6:17", + "nodeType": "YulIdentifier", + "src": "4211:6:17" + }, + "nativeSrc": "4211:15:17", + "nodeType": "YulFunctionCall", + "src": "4211:15:17" + }, + "nativeSrc": "4211:15:17", + "nodeType": "YulExpressionStatement", + "src": "4211:15:17" + } + ] + }, + "name": "panic_error_0x41", + "nativeSrc": "4105:127:17", + "nodeType": "YulFunctionDefinition", + "src": "4105:127:17" + }, + { + "body": { + "nativeSrc": "4292:325:17", + "nodeType": "YulBlock", + "src": "4292:325:17", + "statements": [ + { + "nativeSrc": "4302:22:17", + "nodeType": "YulAssignment", + "src": "4302:22:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4316:1:17", + "nodeType": "YulLiteral", + "src": "4316:1:17", + "type": "", + "value": "1" + }, + { + "name": "data", + "nativeSrc": "4319:4:17", + "nodeType": "YulIdentifier", + "src": "4319:4:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "4312:3:17", + "nodeType": "YulIdentifier", + "src": "4312:3:17" + }, + "nativeSrc": "4312:12:17", + "nodeType": "YulFunctionCall", + "src": "4312:12:17" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "4302:6:17", + "nodeType": "YulIdentifier", + "src": "4302:6:17" + } + ] + }, + { + "nativeSrc": "4333:38:17", + "nodeType": "YulVariableDeclaration", + "src": "4333:38:17", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "4363:4:17", + "nodeType": "YulIdentifier", + "src": "4363:4:17" + }, + { + "kind": "number", + "nativeSrc": "4369:1:17", + "nodeType": "YulLiteral", + "src": "4369:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4359:3:17", + "nodeType": "YulIdentifier", + "src": "4359:3:17" + }, + "nativeSrc": "4359:12:17", + "nodeType": "YulFunctionCall", + "src": "4359:12:17" + }, + "variables": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "4337:18:17", + "nodeType": "YulTypedName", + "src": "4337:18:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "4410:31:17", + "nodeType": "YulBlock", + "src": "4410:31:17", + "statements": [ + { + "nativeSrc": "4412:27:17", + "nodeType": "YulAssignment", + "src": "4412:27:17", + "value": { + "arguments": [ + { + "name": "length", + "nativeSrc": "4426:6:17", + "nodeType": "YulIdentifier", + "src": "4426:6:17" + }, + { + "kind": "number", + "nativeSrc": "4434:4:17", + "nodeType": "YulLiteral", + "src": "4434:4:17", + "type": "", + "value": "0x7f" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4422:3:17", + "nodeType": "YulIdentifier", + "src": "4422:3:17" + }, + "nativeSrc": "4422:17:17", + "nodeType": "YulFunctionCall", + "src": "4422:17:17" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "4412:6:17", + "nodeType": "YulIdentifier", + "src": "4412:6:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "4390:18:17", + "nodeType": "YulIdentifier", + "src": "4390:18:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "4383:6:17", + "nodeType": "YulIdentifier", + "src": "4383:6:17" + }, + "nativeSrc": "4383:26:17", + "nodeType": "YulFunctionCall", + "src": "4383:26:17" + }, + "nativeSrc": "4380:61:17", + "nodeType": "YulIf", + "src": "4380:61:17" + }, + { + "body": { + "nativeSrc": "4500:111:17", + "nodeType": "YulBlock", + "src": "4500:111:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4521:1:17", + "nodeType": "YulLiteral", + "src": "4521:1:17", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4528:3:17", + "nodeType": "YulLiteral", + "src": "4528:3:17", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "4533:10:17", + "nodeType": "YulLiteral", + "src": "4533:10:17", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4524:3:17", + "nodeType": "YulIdentifier", + "src": "4524:3:17" + }, + "nativeSrc": "4524:20:17", + "nodeType": "YulFunctionCall", + "src": "4524:20:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4514:6:17", + "nodeType": "YulIdentifier", + "src": "4514:6:17" + }, + "nativeSrc": "4514:31:17", + "nodeType": "YulFunctionCall", + "src": "4514:31:17" + }, + "nativeSrc": "4514:31:17", + "nodeType": "YulExpressionStatement", + "src": "4514:31:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4565:1:17", + "nodeType": "YulLiteral", + "src": "4565:1:17", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "4568:4:17", + "nodeType": "YulLiteral", + "src": "4568:4:17", + "type": "", + "value": "0x22" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4558:6:17", + "nodeType": "YulIdentifier", + "src": "4558:6:17" + }, + "nativeSrc": "4558:15:17", + "nodeType": "YulFunctionCall", + "src": "4558:15:17" + }, + "nativeSrc": "4558:15:17", + "nodeType": "YulExpressionStatement", + "src": "4558:15:17" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4593:1:17", + "nodeType": "YulLiteral", + "src": "4593:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "4596:4:17", + "nodeType": "YulLiteral", + "src": "4596:4:17", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "4586:6:17", + "nodeType": "YulIdentifier", + "src": "4586:6:17" + }, + "nativeSrc": "4586:15:17", + "nodeType": "YulFunctionCall", + "src": "4586:15:17" + }, + "nativeSrc": "4586:15:17", + "nodeType": "YulExpressionStatement", + "src": "4586:15:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "4456:18:17", + "nodeType": "YulIdentifier", + "src": "4456:18:17" + }, + { + "arguments": [ + { + "name": "length", + "nativeSrc": "4479:6:17", + "nodeType": "YulIdentifier", + "src": "4479:6:17" + }, + { + "kind": "number", + "nativeSrc": "4487:2:17", + "nodeType": "YulLiteral", + "src": "4487:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "4476:2:17", + "nodeType": "YulIdentifier", + "src": "4476:2:17" + }, + "nativeSrc": "4476:14:17", + "nodeType": "YulFunctionCall", + "src": "4476:14:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "4453:2:17", + "nodeType": "YulIdentifier", + "src": "4453:2:17" + }, + "nativeSrc": "4453:38:17", + "nodeType": "YulFunctionCall", + "src": "4453:38:17" + }, + "nativeSrc": "4450:161:17", + "nodeType": "YulIf", + "src": "4450:161:17" + } + ] + }, + "name": "extract_byte_array_length", + "nativeSrc": "4237:380:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "data", + "nativeSrc": "4272:4:17", + "nodeType": "YulTypedName", + "src": "4272:4:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nativeSrc": "4281:6:17", + "nodeType": "YulTypedName", + "src": "4281:6:17", + "type": "" + } + ], + "src": "4237:380:17" + }, + { + "body": { + "nativeSrc": "4677:65:17", + "nodeType": "YulBlock", + "src": "4677:65:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4694:1:17", + "nodeType": "YulLiteral", + "src": "4694:1:17", + "type": "", + "value": "0" + }, + { + "name": "ptr", + "nativeSrc": "4697:3:17", + "nodeType": "YulIdentifier", + "src": "4697:3:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4687:6:17", + "nodeType": "YulIdentifier", + "src": "4687:6:17" + }, + "nativeSrc": "4687:14:17", + "nodeType": "YulFunctionCall", + "src": "4687:14:17" + }, + "nativeSrc": "4687:14:17", + "nodeType": "YulExpressionStatement", + "src": "4687:14:17" + }, + { + "nativeSrc": "4710:26:17", + "nodeType": "YulAssignment", + "src": "4710:26:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4728:1:17", + "nodeType": "YulLiteral", + "src": "4728:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "4731:4:17", + "nodeType": "YulLiteral", + "src": "4731:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "4718:9:17", + "nodeType": "YulIdentifier", + "src": "4718:9:17" + }, + "nativeSrc": "4718:18:17", + "nodeType": "YulFunctionCall", + "src": "4718:18:17" + }, + "variableNames": [ + { + "name": "data", + "nativeSrc": "4710:4:17", + "nodeType": "YulIdentifier", + "src": "4710:4:17" + } + ] + } + ] + }, + "name": "array_dataslot_bytes_storage", + "nativeSrc": "4622:120:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "ptr", + "nativeSrc": "4660:3:17", + "nodeType": "YulTypedName", + "src": "4660:3:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "data", + "nativeSrc": "4668:4:17", + "nodeType": "YulTypedName", + "src": "4668:4:17", + "type": "" + } + ], + "src": "4622:120:17" + }, + { + "body": { + "nativeSrc": "4827:437:17", + "nodeType": "YulBlock", + "src": "4827:437:17", + "statements": [ + { + "body": { + "nativeSrc": "4860:398:17", + "nodeType": "YulBlock", + "src": "4860:398:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4881:1:17", + "nodeType": "YulLiteral", + "src": "4881:1:17", + "type": "", + "value": "0" + }, + { + "name": "array", + "nativeSrc": "4884:5:17", + "nodeType": "YulIdentifier", + "src": "4884:5:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4874:6:17", + "nodeType": "YulIdentifier", + "src": "4874:6:17" + }, + "nativeSrc": "4874:16:17", + "nodeType": "YulFunctionCall", + "src": "4874:16:17" + }, + "nativeSrc": "4874:16:17", + "nodeType": "YulExpressionStatement", + "src": "4874:16:17" + }, + { + "nativeSrc": "4903:30:17", + "nodeType": "YulVariableDeclaration", + "src": "4903:30:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4925:1:17", + "nodeType": "YulLiteral", + "src": "4925:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "4928:4:17", + "nodeType": "YulLiteral", + "src": "4928:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "4915:9:17", + "nodeType": "YulIdentifier", + "src": "4915:9:17" + }, + "nativeSrc": "4915:18:17", + "nodeType": "YulFunctionCall", + "src": "4915:18:17" + }, + "variables": [ + { + "name": "data", + "nativeSrc": "4907:4:17", + "nodeType": "YulTypedName", + "src": "4907:4:17", + "type": "" + } + ] + }, + { + "nativeSrc": "4946:57:17", + "nodeType": "YulVariableDeclaration", + "src": "4946:57:17", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "4969:4:17", + "nodeType": "YulIdentifier", + "src": "4969:4:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4979:1:17", + "nodeType": "YulLiteral", + "src": "4979:1:17", + "type": "", + "value": "5" + }, + { + "arguments": [ + { + "name": "startIndex", + "nativeSrc": "4986:10:17", + "nodeType": "YulIdentifier", + "src": "4986:10:17" + }, + { + "kind": "number", + "nativeSrc": "4998:2:17", + "nodeType": "YulLiteral", + "src": "4998:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4982:3:17", + "nodeType": "YulIdentifier", + "src": "4982:3:17" + }, + "nativeSrc": "4982:19:17", + "nodeType": "YulFunctionCall", + "src": "4982:19:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "4975:3:17", + "nodeType": "YulIdentifier", + "src": "4975:3:17" + }, + "nativeSrc": "4975:27:17", + "nodeType": "YulFunctionCall", + "src": "4975:27:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4965:3:17", + "nodeType": "YulIdentifier", + "src": "4965:3:17" + }, + "nativeSrc": "4965:38:17", + "nodeType": "YulFunctionCall", + "src": "4965:38:17" + }, + "variables": [ + { + "name": "deleteStart", + "nativeSrc": "4950:11:17", + "nodeType": "YulTypedName", + "src": "4950:11:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5040:23:17", + "nodeType": "YulBlock", + "src": "5040:23:17", + "statements": [ + { + "nativeSrc": "5042:19:17", + "nodeType": "YulAssignment", + "src": "5042:19:17", + "value": { + "name": "data", + "nativeSrc": "5057:4:17", + "nodeType": "YulIdentifier", + "src": "5057:4:17" + }, + "variableNames": [ + { + "name": "deleteStart", + "nativeSrc": "5042:11:17", + "nodeType": "YulIdentifier", + "src": "5042:11:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "startIndex", + "nativeSrc": "5022:10:17", + "nodeType": "YulIdentifier", + "src": "5022:10:17" + }, + { + "kind": "number", + "nativeSrc": "5034:4:17", + "nodeType": "YulLiteral", + "src": "5034:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "5019:2:17", + "nodeType": "YulIdentifier", + "src": "5019:2:17" + }, + "nativeSrc": "5019:20:17", + "nodeType": "YulFunctionCall", + "src": "5019:20:17" + }, + "nativeSrc": "5016:47:17", + "nodeType": "YulIf", + "src": "5016:47:17" + }, + { + "nativeSrc": "5076:41:17", + "nodeType": "YulVariableDeclaration", + "src": "5076:41:17", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "5090:4:17", + "nodeType": "YulIdentifier", + "src": "5090:4:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5100:1:17", + "nodeType": "YulLiteral", + "src": "5100:1:17", + "type": "", + "value": "5" + }, + { + "arguments": [ + { + "name": "len", + "nativeSrc": "5107:3:17", + "nodeType": "YulIdentifier", + "src": "5107:3:17" + }, + { + "kind": "number", + "nativeSrc": "5112:2:17", + "nodeType": "YulLiteral", + "src": "5112:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5103:3:17", + "nodeType": "YulIdentifier", + "src": "5103:3:17" + }, + "nativeSrc": "5103:12:17", + "nodeType": "YulFunctionCall", + "src": "5103:12:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "5096:3:17", + "nodeType": "YulIdentifier", + "src": "5096:3:17" + }, + "nativeSrc": "5096:20:17", + "nodeType": "YulFunctionCall", + "src": "5096:20:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5086:3:17", + "nodeType": "YulIdentifier", + "src": "5086:3:17" + }, + "nativeSrc": "5086:31:17", + "nodeType": "YulFunctionCall", + "src": "5086:31:17" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "5080:2:17", + "nodeType": "YulTypedName", + "src": "5080:2:17", + "type": "" + } + ] + }, + { + "nativeSrc": "5130:24:17", + "nodeType": "YulVariableDeclaration", + "src": "5130:24:17", + "value": { + "name": "deleteStart", + "nativeSrc": "5143:11:17", + "nodeType": "YulIdentifier", + "src": "5143:11:17" + }, + "variables": [ + { + "name": "start", + "nativeSrc": "5134:5:17", + "nodeType": "YulTypedName", + "src": "5134:5:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5228:20:17", + "nodeType": "YulBlock", + "src": "5228:20:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "start", + "nativeSrc": "5237:5:17", + "nodeType": "YulIdentifier", + "src": "5237:5:17" + }, + { + "kind": "number", + "nativeSrc": "5244:1:17", + "nodeType": "YulLiteral", + "src": "5244:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "5230:6:17", + "nodeType": "YulIdentifier", + "src": "5230:6:17" + }, + "nativeSrc": "5230:16:17", + "nodeType": "YulFunctionCall", + "src": "5230:16:17" + }, + "nativeSrc": "5230:16:17", + "nodeType": "YulExpressionStatement", + "src": "5230:16:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "start", + "nativeSrc": "5178:5:17", + "nodeType": "YulIdentifier", + "src": "5178:5:17" + }, + { + "name": "_1", + "nativeSrc": "5185:2:17", + "nodeType": "YulIdentifier", + "src": "5185:2:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "5175:2:17", + "nodeType": "YulIdentifier", + "src": "5175:2:17" + }, + "nativeSrc": "5175:13:17", + "nodeType": "YulFunctionCall", + "src": "5175:13:17" + }, + "nativeSrc": "5167:81:17", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "5189:26:17", + "nodeType": "YulBlock", + "src": "5189:26:17", + "statements": [ + { + "nativeSrc": "5191:22:17", + "nodeType": "YulAssignment", + "src": "5191:22:17", + "value": { + "arguments": [ + { + "name": "start", + "nativeSrc": "5204:5:17", + "nodeType": "YulIdentifier", + "src": "5204:5:17" + }, + { + "kind": "number", + "nativeSrc": "5211:1:17", + "nodeType": "YulLiteral", + "src": "5211:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5200:3:17", + "nodeType": "YulIdentifier", + "src": "5200:3:17" + }, + "nativeSrc": "5200:13:17", + "nodeType": "YulFunctionCall", + "src": "5200:13:17" + }, + "variableNames": [ + { + "name": "start", + "nativeSrc": "5191:5:17", + "nodeType": "YulIdentifier", + "src": "5191:5:17" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "5171:3:17", + "nodeType": "YulBlock", + "src": "5171:3:17", + "statements": [] + }, + "src": "5167:81:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "len", + "nativeSrc": "4843:3:17", + "nodeType": "YulIdentifier", + "src": "4843:3:17" + }, + { + "kind": "number", + "nativeSrc": "4848:2:17", + "nodeType": "YulLiteral", + "src": "4848:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "4840:2:17", + "nodeType": "YulIdentifier", + "src": "4840:2:17" + }, + "nativeSrc": "4840:11:17", + "nodeType": "YulFunctionCall", + "src": "4840:11:17" + }, + "nativeSrc": "4837:421:17", + "nodeType": "YulIf", + "src": "4837:421:17" + } + ] + }, + "name": "clean_up_bytearray_end_slots_bytes_storage", + "nativeSrc": "4747:517:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "array", + "nativeSrc": "4799:5:17", + "nodeType": "YulTypedName", + "src": "4799:5:17", + "type": "" + }, + { + "name": "len", + "nativeSrc": "4806:3:17", + "nodeType": "YulTypedName", + "src": "4806:3:17", + "type": "" + }, + { + "name": "startIndex", + "nativeSrc": "4811:10:17", + "nodeType": "YulTypedName", + "src": "4811:10:17", + "type": "" + } + ], + "src": "4747:517:17" + }, + { + "body": { + "nativeSrc": "5354:81:17", + "nodeType": "YulBlock", + "src": "5354:81:17", + "statements": [ + { + "nativeSrc": "5364:65:17", + "nodeType": "YulAssignment", + "src": "5364:65:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "data", + "nativeSrc": "5379:4:17", + "nodeType": "YulIdentifier", + "src": "5379:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5397:1:17", + "nodeType": "YulLiteral", + "src": "5397:1:17", + "type": "", + "value": "3" + }, + { + "name": "len", + "nativeSrc": "5400:3:17", + "nodeType": "YulIdentifier", + "src": "5400:3:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5393:3:17", + "nodeType": "YulIdentifier", + "src": "5393:3:17" + }, + "nativeSrc": "5393:11:17", + "nodeType": "YulFunctionCall", + "src": "5393:11:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5410:1:17", + "nodeType": "YulLiteral", + "src": "5410:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "5406:3:17", + "nodeType": "YulIdentifier", + "src": "5406:3:17" + }, + "nativeSrc": "5406:6:17", + "nodeType": "YulFunctionCall", + "src": "5406:6:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "5389:3:17", + "nodeType": "YulIdentifier", + "src": "5389:3:17" + }, + "nativeSrc": "5389:24:17", + "nodeType": "YulFunctionCall", + "src": "5389:24:17" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "5385:3:17", + "nodeType": "YulIdentifier", + "src": "5385:3:17" + }, + "nativeSrc": "5385:29:17", + "nodeType": "YulFunctionCall", + "src": "5385:29:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5375:3:17", + "nodeType": "YulIdentifier", + "src": "5375:3:17" + }, + "nativeSrc": "5375:40:17", + "nodeType": "YulFunctionCall", + "src": "5375:40:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5421:1:17", + "nodeType": "YulLiteral", + "src": "5421:1:17", + "type": "", + "value": "1" + }, + { + "name": "len", + "nativeSrc": "5424:3:17", + "nodeType": "YulIdentifier", + "src": "5424:3:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5417:3:17", + "nodeType": "YulIdentifier", + "src": "5417:3:17" + }, + "nativeSrc": "5417:11:17", + "nodeType": "YulFunctionCall", + "src": "5417:11:17" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "5372:2:17", + "nodeType": "YulIdentifier", + "src": "5372:2:17" + }, + "nativeSrc": "5372:57:17", + "nodeType": "YulFunctionCall", + "src": "5372:57:17" + }, + "variableNames": [ + { + "name": "used", + "nativeSrc": "5364:4:17", + "nodeType": "YulIdentifier", + "src": "5364:4:17" + } + ] + } + ] + }, + "name": "extract_used_part_and_set_length_of_short_byte_array", + "nativeSrc": "5269:166:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "data", + "nativeSrc": "5331:4:17", + "nodeType": "YulTypedName", + "src": "5331:4:17", + "type": "" + }, + { + "name": "len", + "nativeSrc": "5337:3:17", + "nodeType": "YulTypedName", + "src": "5337:3:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "used", + "nativeSrc": "5345:4:17", + "nodeType": "YulTypedName", + "src": "5345:4:17", + "type": "" + } + ], + "src": "5269:166:17" + }, + { + "body": { + "nativeSrc": "5541:1093:17", + "nodeType": "YulBlock", + "src": "5541:1093:17", + "statements": [ + { + "body": { + "nativeSrc": "5582:22:17", + "nodeType": "YulBlock", + "src": "5582:22:17", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "5584:16:17", + "nodeType": "YulIdentifier", + "src": "5584:16:17" + }, + "nativeSrc": "5584:18:17", + "nodeType": "YulFunctionCall", + "src": "5584:18:17" + }, + "nativeSrc": "5584:18:17", + "nodeType": "YulExpressionStatement", + "src": "5584:18:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "len", + "nativeSrc": "5557:3:17", + "nodeType": "YulIdentifier", + "src": "5557:3:17" + }, + { + "kind": "number", + "nativeSrc": "5562:18:17", + "nodeType": "YulLiteral", + "src": "5562:18:17", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "5554:2:17", + "nodeType": "YulIdentifier", + "src": "5554:2:17" + }, + "nativeSrc": "5554:27:17", + "nodeType": "YulFunctionCall", + "src": "5554:27:17" + }, + "nativeSrc": "5551:53:17", + "nodeType": "YulIf", + "src": "5551:53:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "5656:4:17", + "nodeType": "YulIdentifier", + "src": "5656:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "slot", + "nativeSrc": "5694:4:17", + "nodeType": "YulIdentifier", + "src": "5694:4:17" + } + ], + "functionName": { + "name": "sload", + "nativeSrc": "5688:5:17", + "nodeType": "YulIdentifier", + "src": "5688:5:17" + }, + "nativeSrc": "5688:11:17", + "nodeType": "YulFunctionCall", + "src": "5688:11:17" + } + ], + "functionName": { + "name": "extract_byte_array_length", + "nativeSrc": "5662:25:17", + "nodeType": "YulIdentifier", + "src": "5662:25:17" + }, + "nativeSrc": "5662:38:17", + "nodeType": "YulFunctionCall", + "src": "5662:38:17" + }, + { + "name": "len", + "nativeSrc": "5702:3:17", + "nodeType": "YulIdentifier", + "src": "5702:3:17" + } + ], + "functionName": { + "name": "clean_up_bytearray_end_slots_bytes_storage", + "nativeSrc": "5613:42:17", + "nodeType": "YulIdentifier", + "src": "5613:42:17" + }, + "nativeSrc": "5613:93:17", + "nodeType": "YulFunctionCall", + "src": "5613:93:17" + }, + "nativeSrc": "5613:93:17", + "nodeType": "YulExpressionStatement", + "src": "5613:93:17" + }, + { + "nativeSrc": "5715:18:17", + "nodeType": "YulVariableDeclaration", + "src": "5715:18:17", + "value": { + "kind": "number", + "nativeSrc": "5732:1:17", + "nodeType": "YulLiteral", + "src": "5732:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "srcOffset", + "nativeSrc": "5719:9:17", + "nodeType": "YulTypedName", + "src": "5719:9:17", + "type": "" + } + ] + }, + { + "cases": [ + { + "body": { + "nativeSrc": "5776:600:17", + "nodeType": "YulBlock", + "src": "5776:600:17", + "statements": [ + { + "nativeSrc": "5790:32:17", + "nodeType": "YulVariableDeclaration", + "src": "5790:32:17", + "value": { + "arguments": [ + { + "name": "len", + "nativeSrc": "5809:3:17", + "nodeType": "YulIdentifier", + "src": "5809:3:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5818:2:17", + "nodeType": "YulLiteral", + "src": "5818:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "5814:3:17", + "nodeType": "YulIdentifier", + "src": "5814:3:17" + }, + "nativeSrc": "5814:7:17", + "nodeType": "YulFunctionCall", + "src": "5814:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5805:3:17", + "nodeType": "YulIdentifier", + "src": "5805:3:17" + }, + "nativeSrc": "5805:17:17", + "nodeType": "YulFunctionCall", + "src": "5805:17:17" + }, + "variables": [ + { + "name": "loopEnd", + "nativeSrc": "5794:7:17", + "nodeType": "YulTypedName", + "src": "5794:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "5835:48:17", + "nodeType": "YulVariableDeclaration", + "src": "5835:48:17", + "value": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "5878:4:17", + "nodeType": "YulIdentifier", + "src": "5878:4:17" + } + ], + "functionName": { + "name": "array_dataslot_bytes_storage", + "nativeSrc": "5849:28:17", + "nodeType": "YulIdentifier", + "src": "5849:28:17" + }, + "nativeSrc": "5849:34:17", + "nodeType": "YulFunctionCall", + "src": "5849:34:17" + }, + "variables": [ + { + "name": "dstPtr", + "nativeSrc": "5839:6:17", + "nodeType": "YulTypedName", + "src": "5839:6:17", + "type": "" + } + ] + }, + { + "nativeSrc": "5896:10:17", + "nodeType": "YulVariableDeclaration", + "src": "5896:10:17", + "value": { + "kind": "number", + "nativeSrc": "5905:1:17", + "nodeType": "YulLiteral", + "src": "5905:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "5900:1:17", + "nodeType": "YulTypedName", + "src": "5900:1:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5976:172:17", + "nodeType": "YulBlock", + "src": "5976:172:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "6001:6:17", + "nodeType": "YulIdentifier", + "src": "6001:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "6026:3:17", + "nodeType": "YulIdentifier", + "src": "6026:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "6031:9:17", + "nodeType": "YulIdentifier", + "src": "6031:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6022:3:17", + "nodeType": "YulIdentifier", + "src": "6022:3:17" + }, + "nativeSrc": "6022:19:17", + "nodeType": "YulFunctionCall", + "src": "6022:19:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "6009:12:17", + "nodeType": "YulIdentifier", + "src": "6009:12:17" + }, + "nativeSrc": "6009:33:17", + "nodeType": "YulFunctionCall", + "src": "6009:33:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "5994:6:17", + "nodeType": "YulIdentifier", + "src": "5994:6:17" + }, + "nativeSrc": "5994:49:17", + "nodeType": "YulFunctionCall", + "src": "5994:49:17" + }, + "nativeSrc": "5994:49:17", + "nodeType": "YulExpressionStatement", + "src": "5994:49:17" + }, + { + "nativeSrc": "6060:24:17", + "nodeType": "YulAssignment", + "src": "6060:24:17", + "value": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "6074:6:17", + "nodeType": "YulIdentifier", + "src": "6074:6:17" + }, + { + "kind": "number", + "nativeSrc": "6082:1:17", + "nodeType": "YulLiteral", + "src": "6082:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6070:3:17", + "nodeType": "YulIdentifier", + "src": "6070:3:17" + }, + "nativeSrc": "6070:14:17", + "nodeType": "YulFunctionCall", + "src": "6070:14:17" + }, + "variableNames": [ + { + "name": "dstPtr", + "nativeSrc": "6060:6:17", + "nodeType": "YulIdentifier", + "src": "6060:6:17" + } + ] + }, + { + "nativeSrc": "6101:33:17", + "nodeType": "YulAssignment", + "src": "6101:33:17", + "value": { + "arguments": [ + { + "name": "srcOffset", + "nativeSrc": "6118:9:17", + "nodeType": "YulIdentifier", + "src": "6118:9:17" + }, + { + "kind": "number", + "nativeSrc": "6129:4:17", + "nodeType": "YulLiteral", + "src": "6129:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6114:3:17", + "nodeType": "YulIdentifier", + "src": "6114:3:17" + }, + "nativeSrc": "6114:20:17", + "nodeType": "YulFunctionCall", + "src": "6114:20:17" + }, + "variableNames": [ + { + "name": "srcOffset", + "nativeSrc": "6101:9:17", + "nodeType": "YulIdentifier", + "src": "6101:9:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "5930:1:17", + "nodeType": "YulIdentifier", + "src": "5930:1:17" + }, + { + "name": "loopEnd", + "nativeSrc": "5933:7:17", + "nodeType": "YulIdentifier", + "src": "5933:7:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "5927:2:17", + "nodeType": "YulIdentifier", + "src": "5927:2:17" + }, + "nativeSrc": "5927:14:17", + "nodeType": "YulFunctionCall", + "src": "5927:14:17" + }, + "nativeSrc": "5919:229:17", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "5942:21:17", + "nodeType": "YulBlock", + "src": "5942:21:17", + "statements": [ + { + "nativeSrc": "5944:17:17", + "nodeType": "YulAssignment", + "src": "5944:17:17", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "5953:1:17", + "nodeType": "YulIdentifier", + "src": "5953:1:17" + }, + { + "kind": "number", + "nativeSrc": "5956:4:17", + "nodeType": "YulLiteral", + "src": "5956:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5949:3:17", + "nodeType": "YulIdentifier", + "src": "5949:3:17" + }, + "nativeSrc": "5949:12:17", + "nodeType": "YulFunctionCall", + "src": "5949:12:17" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "5944:1:17", + "nodeType": "YulIdentifier", + "src": "5944:1:17" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "5923:3:17", + "nodeType": "YulBlock", + "src": "5923:3:17", + "statements": [] + }, + "src": "5919:229:17" + }, + { + "body": { + "nativeSrc": "6193:127:17", + "nodeType": "YulBlock", + "src": "6193:127:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "6218:6:17", + "nodeType": "YulIdentifier", + "src": "6218:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "6247:3:17", + "nodeType": "YulIdentifier", + "src": "6247:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "6252:9:17", + "nodeType": "YulIdentifier", + "src": "6252:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6243:3:17", + "nodeType": "YulIdentifier", + "src": "6243:3:17" + }, + "nativeSrc": "6243:19:17", + "nodeType": "YulFunctionCall", + "src": "6243:19:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "6230:12:17", + "nodeType": "YulIdentifier", + "src": "6230:12:17" + }, + "nativeSrc": "6230:33:17", + "nodeType": "YulFunctionCall", + "src": "6230:33:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6281:1:17", + "nodeType": "YulLiteral", + "src": "6281:1:17", + "type": "", + "value": "3" + }, + { + "name": "len", + "nativeSrc": "6284:3:17", + "nodeType": "YulIdentifier", + "src": "6284:3:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "6277:3:17", + "nodeType": "YulIdentifier", + "src": "6277:3:17" + }, + "nativeSrc": "6277:11:17", + "nodeType": "YulFunctionCall", + "src": "6277:11:17" + }, + { + "kind": "number", + "nativeSrc": "6290:3:17", + "nodeType": "YulLiteral", + "src": "6290:3:17", + "type": "", + "value": "248" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "6273:3:17", + "nodeType": "YulIdentifier", + "src": "6273:3:17" + }, + "nativeSrc": "6273:21:17", + "nodeType": "YulFunctionCall", + "src": "6273:21:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6300:1:17", + "nodeType": "YulLiteral", + "src": "6300:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "6296:3:17", + "nodeType": "YulIdentifier", + "src": "6296:3:17" + }, + "nativeSrc": "6296:6:17", + "nodeType": "YulFunctionCall", + "src": "6296:6:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "6269:3:17", + "nodeType": "YulIdentifier", + "src": "6269:3:17" + }, + "nativeSrc": "6269:34:17", + "nodeType": "YulFunctionCall", + "src": "6269:34:17" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "6265:3:17", + "nodeType": "YulIdentifier", + "src": "6265:3:17" + }, + "nativeSrc": "6265:39:17", + "nodeType": "YulFunctionCall", + "src": "6265:39:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "6226:3:17", + "nodeType": "YulIdentifier", + "src": "6226:3:17" + }, + "nativeSrc": "6226:79:17", + "nodeType": "YulFunctionCall", + "src": "6226:79:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "6211:6:17", + "nodeType": "YulIdentifier", + "src": "6211:6:17" + }, + "nativeSrc": "6211:95:17", + "nodeType": "YulFunctionCall", + "src": "6211:95:17" + }, + "nativeSrc": "6211:95:17", + "nodeType": "YulExpressionStatement", + "src": "6211:95:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "loopEnd", + "nativeSrc": "6167:7:17", + "nodeType": "YulIdentifier", + "src": "6167:7:17" + }, + { + "name": "len", + "nativeSrc": "6176:3:17", + "nodeType": "YulIdentifier", + "src": "6176:3:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "6164:2:17", + "nodeType": "YulIdentifier", + "src": "6164:2:17" + }, + "nativeSrc": "6164:16:17", + "nodeType": "YulFunctionCall", + "src": "6164:16:17" + }, + "nativeSrc": "6161:159:17", + "nodeType": "YulIf", + "src": "6161:159:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "6340:4:17", + "nodeType": "YulIdentifier", + "src": "6340:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6354:1:17", + "nodeType": "YulLiteral", + "src": "6354:1:17", + "type": "", + "value": "1" + }, + { + "name": "len", + "nativeSrc": "6357:3:17", + "nodeType": "YulIdentifier", + "src": "6357:3:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "6350:3:17", + "nodeType": "YulIdentifier", + "src": "6350:3:17" + }, + "nativeSrc": "6350:11:17", + "nodeType": "YulFunctionCall", + "src": "6350:11:17" + }, + { + "kind": "number", + "nativeSrc": "6363:1:17", + "nodeType": "YulLiteral", + "src": "6363:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6346:3:17", + "nodeType": "YulIdentifier", + "src": "6346:3:17" + }, + "nativeSrc": "6346:19:17", + "nodeType": "YulFunctionCall", + "src": "6346:19:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "6333:6:17", + "nodeType": "YulIdentifier", + "src": "6333:6:17" + }, + "nativeSrc": "6333:33:17", + "nodeType": "YulFunctionCall", + "src": "6333:33:17" + }, + "nativeSrc": "6333:33:17", + "nodeType": "YulExpressionStatement", + "src": "6333:33:17" + } + ] + }, + "nativeSrc": "5769:607:17", + "nodeType": "YulCase", + "src": "5769:607:17", + "value": { + "kind": "number", + "nativeSrc": "5774:1:17", + "nodeType": "YulLiteral", + "src": "5774:1:17", + "type": "", + "value": "1" + } + }, + { + "body": { + "nativeSrc": "6393:235:17", + "nodeType": "YulBlock", + "src": "6393:235:17", + "statements": [ + { + "nativeSrc": "6407:14:17", + "nodeType": "YulVariableDeclaration", + "src": "6407:14:17", + "value": { + "kind": "number", + "nativeSrc": "6420:1:17", + "nodeType": "YulLiteral", + "src": "6420:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "6411:5:17", + "nodeType": "YulTypedName", + "src": "6411:5:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "6453:74:17", + "nodeType": "YulBlock", + "src": "6453:74:17", + "statements": [ + { + "nativeSrc": "6471:42:17", + "nodeType": "YulAssignment", + "src": "6471:42:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "6497:3:17", + "nodeType": "YulIdentifier", + "src": "6497:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "6502:9:17", + "nodeType": "YulIdentifier", + "src": "6502:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6493:3:17", + "nodeType": "YulIdentifier", + "src": "6493:3:17" + }, + "nativeSrc": "6493:19:17", + "nodeType": "YulFunctionCall", + "src": "6493:19:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "6480:12:17", + "nodeType": "YulIdentifier", + "src": "6480:12:17" + }, + "nativeSrc": "6480:33:17", + "nodeType": "YulFunctionCall", + "src": "6480:33:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "6471:5:17", + "nodeType": "YulIdentifier", + "src": "6471:5:17" + } + ] + } + ] + }, + "condition": { + "name": "len", + "nativeSrc": "6437:3:17", + "nodeType": "YulIdentifier", + "src": "6437:3:17" + }, + "nativeSrc": "6434:93:17", + "nodeType": "YulIf", + "src": "6434:93:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "6547:4:17", + "nodeType": "YulIdentifier", + "src": "6547:4:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "6606:5:17", + "nodeType": "YulIdentifier", + "src": "6606:5:17" + }, + { + "name": "len", + "nativeSrc": "6613:3:17", + "nodeType": "YulIdentifier", + "src": "6613:3:17" + } + ], + "functionName": { + "name": "extract_used_part_and_set_length_of_short_byte_array", + "nativeSrc": "6553:52:17", + "nodeType": "YulIdentifier", + "src": "6553:52:17" + }, + "nativeSrc": "6553:64:17", + "nodeType": "YulFunctionCall", + "src": "6553:64:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "6540:6:17", + "nodeType": "YulIdentifier", + "src": "6540:6:17" + }, + "nativeSrc": "6540:78:17", + "nodeType": "YulFunctionCall", + "src": "6540:78:17" + }, + "nativeSrc": "6540:78:17", + "nodeType": "YulExpressionStatement", + "src": "6540:78:17" + } + ] + }, + "nativeSrc": "6385:243:17", + "nodeType": "YulCase", + "src": "6385:243:17", + "value": "default" + } + ], + "expression": { + "arguments": [ + { + "name": "len", + "nativeSrc": "5752:3:17", + "nodeType": "YulIdentifier", + "src": "5752:3:17" + }, + { + "kind": "number", + "nativeSrc": "5757:2:17", + "nodeType": "YulLiteral", + "src": "5757:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "5749:2:17", + "nodeType": "YulIdentifier", + "src": "5749:2:17" + }, + "nativeSrc": "5749:11:17", + "nodeType": "YulFunctionCall", + "src": "5749:11:17" + }, + "nativeSrc": "5742:886:17", + "nodeType": "YulSwitch", + "src": "5742:886:17" + } + ] + }, + "name": "copy_byte_array_to_storage_from_t_bytes_calldata_ptr_to_t_bytes_storage", + "nativeSrc": "5440:1194:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "slot", + "nativeSrc": "5521:4:17", + "nodeType": "YulTypedName", + "src": "5521:4:17", + "type": "" + }, + { + "name": "src", + "nativeSrc": "5527:3:17", + "nodeType": "YulTypedName", + "src": "5527:3:17", + "type": "" + }, + { + "name": "len", + "nativeSrc": "5532:3:17", + "nodeType": "YulTypedName", + "src": "5532:3:17", + "type": "" + } + ], + "src": "5440:1194:17" + }, + { + "body": { + "nativeSrc": "6773:661:17", + "nodeType": "YulBlock", + "src": "6773:661:17", + "statements": [ + { + "nativeSrc": "6783:12:17", + "nodeType": "YulVariableDeclaration", + "src": "6783:12:17", + "value": { + "kind": "number", + "nativeSrc": "6794:1:17", + "nodeType": "YulLiteral", + "src": "6794:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "ret", + "nativeSrc": "6787:3:17", + "nodeType": "YulTypedName", + "src": "6787:3:17", + "type": "" + } + ] + }, + { + "nativeSrc": "6804:30:17", + "nodeType": "YulVariableDeclaration", + "src": "6804:30:17", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "6827:6:17", + "nodeType": "YulIdentifier", + "src": "6827:6:17" + } + ], + "functionName": { + "name": "sload", + "nativeSrc": "6821:5:17", + "nodeType": "YulIdentifier", + "src": "6821:5:17" + }, + "nativeSrc": "6821:13:17", + "nodeType": "YulFunctionCall", + "src": "6821:13:17" + }, + "variables": [ + { + "name": "slotValue", + "nativeSrc": "6808:9:17", + "nodeType": "YulTypedName", + "src": "6808:9:17", + "type": "" + } + ] + }, + { + "nativeSrc": "6843:50:17", + "nodeType": "YulVariableDeclaration", + "src": "6843:50:17", + "value": { + "arguments": [ + { + "name": "slotValue", + "nativeSrc": "6883:9:17", + "nodeType": "YulIdentifier", + "src": "6883:9:17" + } + ], + "functionName": { + "name": "extract_byte_array_length", + "nativeSrc": "6857:25:17", + "nodeType": "YulIdentifier", + "src": "6857:25:17" + }, + "nativeSrc": "6857:36:17", + "nodeType": "YulFunctionCall", + "src": "6857:36:17" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "6847:6:17", + "nodeType": "YulTypedName", + "src": "6847:6:17", + "type": "" + } + ] + }, + { + "cases": [ + { + "body": { + "nativeSrc": "6942:126:17", + "nodeType": "YulBlock", + "src": "6942:126:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "6963:3:17", + "nodeType": "YulIdentifier", + "src": "6963:3:17" + }, + { + "arguments": [ + { + "name": "slotValue", + "nativeSrc": "6972:9:17", + "nodeType": "YulIdentifier", + "src": "6972:9:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6987:3:17", + "nodeType": "YulLiteral", + "src": "6987:3:17", + "type": "", + "value": "255" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "6983:3:17", + "nodeType": "YulIdentifier", + "src": "6983:3:17" + }, + "nativeSrc": "6983:8:17", + "nodeType": "YulFunctionCall", + "src": "6983:8:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "6968:3:17", + "nodeType": "YulIdentifier", + "src": "6968:3:17" + }, + "nativeSrc": "6968:24:17", + "nodeType": "YulFunctionCall", + "src": "6968:24:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6956:6:17", + "nodeType": "YulIdentifier", + "src": "6956:6:17" + }, + "nativeSrc": "6956:37:17", + "nodeType": "YulFunctionCall", + "src": "6956:37:17" + }, + "nativeSrc": "6956:37:17", + "nodeType": "YulExpressionStatement", + "src": "6956:37:17" + }, + { + "nativeSrc": "7006:52:17", + "nodeType": "YulAssignment", + "src": "7006:52:17", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "7017:3:17", + "nodeType": "YulIdentifier", + "src": "7017:3:17" + }, + { + "arguments": [ + { + "name": "length", + "nativeSrc": "7026:6:17", + "nodeType": "YulIdentifier", + "src": "7026:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "7048:6:17", + "nodeType": "YulIdentifier", + "src": "7048:6:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "7041:6:17", + "nodeType": "YulIdentifier", + "src": "7041:6:17" + }, + "nativeSrc": "7041:14:17", + "nodeType": "YulFunctionCall", + "src": "7041:14:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "7034:6:17", + "nodeType": "YulIdentifier", + "src": "7034:6:17" + }, + "nativeSrc": "7034:22:17", + "nodeType": "YulFunctionCall", + "src": "7034:22:17" + } + ], + "functionName": { + "name": "mul", + "nativeSrc": "7022:3:17", + "nodeType": "YulIdentifier", + "src": "7022:3:17" + }, + "nativeSrc": "7022:35:17", + "nodeType": "YulFunctionCall", + "src": "7022:35:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7013:3:17", + "nodeType": "YulIdentifier", + "src": "7013:3:17" + }, + "nativeSrc": "7013:45:17", + "nodeType": "YulFunctionCall", + "src": "7013:45:17" + }, + "variableNames": [ + { + "name": "ret", + "nativeSrc": "7006:3:17", + "nodeType": "YulIdentifier", + "src": "7006:3:17" + } + ] + } + ] + }, + "nativeSrc": "6935:133:17", + "nodeType": "YulCase", + "src": "6935:133:17", + "value": { + "kind": "number", + "nativeSrc": "6940:1:17", + "nodeType": "YulLiteral", + "src": "6940:1:17", + "type": "", + "value": "0" + } + }, + { + "body": { + "nativeSrc": "7084:325:17", + "nodeType": "YulBlock", + "src": "7084:325:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7105:1:17", + "nodeType": "YulLiteral", + "src": "7105:1:17", + "type": "", + "value": "0" + }, + { + "name": "value0", + "nativeSrc": "7108:6:17", + "nodeType": "YulIdentifier", + "src": "7108:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7098:6:17", + "nodeType": "YulIdentifier", + "src": "7098:6:17" + }, + "nativeSrc": "7098:17:17", + "nodeType": "YulFunctionCall", + "src": "7098:17:17" + }, + "nativeSrc": "7098:17:17", + "nodeType": "YulExpressionStatement", + "src": "7098:17:17" + }, + { + "nativeSrc": "7128:33:17", + "nodeType": "YulVariableDeclaration", + "src": "7128:33:17", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7153:1:17", + "nodeType": "YulLiteral", + "src": "7153:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "7156:4:17", + "nodeType": "YulLiteral", + "src": "7156:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "7143:9:17", + "nodeType": "YulIdentifier", + "src": "7143:9:17" + }, + "nativeSrc": "7143:18:17", + "nodeType": "YulFunctionCall", + "src": "7143:18:17" + }, + "variables": [ + { + "name": "dataPos", + "nativeSrc": "7132:7:17", + "nodeType": "YulTypedName", + "src": "7132:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "7174:10:17", + "nodeType": "YulVariableDeclaration", + "src": "7174:10:17", + "value": { + "kind": "number", + "nativeSrc": "7183:1:17", + "nodeType": "YulLiteral", + "src": "7183:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "7178:1:17", + "nodeType": "YulTypedName", + "src": "7178:1:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "7253:110:17", + "nodeType": "YulBlock", + "src": "7253:110:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "7282:3:17", + "nodeType": "YulIdentifier", + "src": "7282:3:17" + }, + { + "name": "i", + "nativeSrc": "7287:1:17", + "nodeType": "YulIdentifier", + "src": "7287:1:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7278:3:17", + "nodeType": "YulIdentifier", + "src": "7278:3:17" + }, + "nativeSrc": "7278:11:17", + "nodeType": "YulFunctionCall", + "src": "7278:11:17" + }, + { + "arguments": [ + { + "name": "dataPos", + "nativeSrc": "7297:7:17", + "nodeType": "YulIdentifier", + "src": "7297:7:17" + } + ], + "functionName": { + "name": "sload", + "nativeSrc": "7291:5:17", + "nodeType": "YulIdentifier", + "src": "7291:5:17" + }, + "nativeSrc": "7291:14:17", + "nodeType": "YulFunctionCall", + "src": "7291:14:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7271:6:17", + "nodeType": "YulIdentifier", + "src": "7271:6:17" + }, + "nativeSrc": "7271:35:17", + "nodeType": "YulFunctionCall", + "src": "7271:35:17" + }, + "nativeSrc": "7271:35:17", + "nodeType": "YulExpressionStatement", + "src": "7271:35:17" + }, + { + "nativeSrc": "7323:26:17", + "nodeType": "YulAssignment", + "src": "7323:26:17", + "value": { + "arguments": [ + { + "name": "dataPos", + "nativeSrc": "7338:7:17", + "nodeType": "YulIdentifier", + "src": "7338:7:17" + }, + { + "kind": "number", + "nativeSrc": "7347:1:17", + "nodeType": "YulLiteral", + "src": "7347:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7334:3:17", + "nodeType": "YulIdentifier", + "src": "7334:3:17" + }, + "nativeSrc": "7334:15:17", + "nodeType": "YulFunctionCall", + "src": "7334:15:17" + }, + "variableNames": [ + { + "name": "dataPos", + "nativeSrc": "7323:7:17", + "nodeType": "YulIdentifier", + "src": "7323:7:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "7208:1:17", + "nodeType": "YulIdentifier", + "src": "7208:1:17" + }, + { + "name": "length", + "nativeSrc": "7211:6:17", + "nodeType": "YulIdentifier", + "src": "7211:6:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "7205:2:17", + "nodeType": "YulIdentifier", + "src": "7205:2:17" + }, + "nativeSrc": "7205:13:17", + "nodeType": "YulFunctionCall", + "src": "7205:13:17" + }, + "nativeSrc": "7197:166:17", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "7219:21:17", + "nodeType": "YulBlock", + "src": "7219:21:17", + "statements": [ + { + "nativeSrc": "7221:17:17", + "nodeType": "YulAssignment", + "src": "7221:17:17", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "7230:1:17", + "nodeType": "YulIdentifier", + "src": "7230:1:17" + }, + { + "kind": "number", + "nativeSrc": "7233:4:17", + "nodeType": "YulLiteral", + "src": "7233:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7226:3:17", + "nodeType": "YulIdentifier", + "src": "7226:3:17" + }, + "nativeSrc": "7226:12:17", + "nodeType": "YulFunctionCall", + "src": "7226:12:17" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "7221:1:17", + "nodeType": "YulIdentifier", + "src": "7221:1:17" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "7201:3:17", + "nodeType": "YulBlock", + "src": "7201:3:17", + "statements": [] + }, + "src": "7197:166:17" + }, + { + "nativeSrc": "7376:23:17", + "nodeType": "YulAssignment", + "src": "7376:23:17", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "7387:3:17", + "nodeType": "YulIdentifier", + "src": "7387:3:17" + }, + { + "name": "length", + "nativeSrc": "7392:6:17", + "nodeType": "YulIdentifier", + "src": "7392:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7383:3:17", + "nodeType": "YulIdentifier", + "src": "7383:3:17" + }, + "nativeSrc": "7383:16:17", + "nodeType": "YulFunctionCall", + "src": "7383:16:17" + }, + "variableNames": [ + { + "name": "ret", + "nativeSrc": "7376:3:17", + "nodeType": "YulIdentifier", + "src": "7376:3:17" + } + ] + } + ] + }, + "nativeSrc": "7077:332:17", + "nodeType": "YulCase", + "src": "7077:332:17", + "value": { + "kind": "number", + "nativeSrc": "7082:1:17", + "nodeType": "YulLiteral", + "src": "7082:1:17", + "type": "", + "value": "1" + } + } + ], + "expression": { + "arguments": [ + { + "name": "slotValue", + "nativeSrc": "6913:9:17", + "nodeType": "YulIdentifier", + "src": "6913:9:17" + }, + { + "kind": "number", + "nativeSrc": "6924:1:17", + "nodeType": "YulLiteral", + "src": "6924:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "6909:3:17", + "nodeType": "YulIdentifier", + "src": "6909:3:17" + }, + "nativeSrc": "6909:17:17", + "nodeType": "YulFunctionCall", + "src": "6909:17:17" + }, + "nativeSrc": "6902:507:17", + "nodeType": "YulSwitch", + "src": "6902:507:17" + }, + { + "nativeSrc": "7418:10:17", + "nodeType": "YulAssignment", + "src": "7418:10:17", + "value": { + "name": "ret", + "nativeSrc": "7425:3:17", + "nodeType": "YulIdentifier", + "src": "7425:3:17" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "7418:3:17", + "nodeType": "YulIdentifier", + "src": "7418:3:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_storage__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "6639:795:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "6749:3:17", + "nodeType": "YulTypedName", + "src": "6749:3:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "6754:6:17", + "nodeType": "YulTypedName", + "src": "6754:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "6765:3:17", + "nodeType": "YulTypedName", + "src": "6765:3:17", + "type": "" + } + ], + "src": "6639:795:17" + }, + { + "body": { + "nativeSrc": "7533:1201:17", + "nodeType": "YulBlock", + "src": "7533:1201:17", + "statements": [ + { + "nativeSrc": "7543:24:17", + "nodeType": "YulVariableDeclaration", + "src": "7543:24:17", + "value": { + "arguments": [ + { + "name": "src", + "nativeSrc": "7563:3:17", + "nodeType": "YulIdentifier", + "src": "7563:3:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "7557:5:17", + "nodeType": "YulIdentifier", + "src": "7557:5:17" + }, + "nativeSrc": "7557:10:17", + "nodeType": "YulFunctionCall", + "src": "7557:10:17" + }, + "variables": [ + { + "name": "newLen", + "nativeSrc": "7547:6:17", + "nodeType": "YulTypedName", + "src": "7547:6:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "7610:22:17", + "nodeType": "YulBlock", + "src": "7610:22:17", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "7612:16:17", + "nodeType": "YulIdentifier", + "src": "7612:16:17" + }, + "nativeSrc": "7612:18:17", + "nodeType": "YulFunctionCall", + "src": "7612:18:17" + }, + "nativeSrc": "7612:18:17", + "nodeType": "YulExpressionStatement", + "src": "7612:18:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "7582:6:17", + "nodeType": "YulIdentifier", + "src": "7582:6:17" + }, + { + "kind": "number", + "nativeSrc": "7590:18:17", + "nodeType": "YulLiteral", + "src": "7590:18:17", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "7579:2:17", + "nodeType": "YulIdentifier", + "src": "7579:2:17" + }, + "nativeSrc": "7579:30:17", + "nodeType": "YulFunctionCall", + "src": "7579:30:17" + }, + "nativeSrc": "7576:56:17", + "nodeType": "YulIf", + "src": "7576:56:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "7684:4:17", + "nodeType": "YulIdentifier", + "src": "7684:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "slot", + "nativeSrc": "7722:4:17", + "nodeType": "YulIdentifier", + "src": "7722:4:17" + } + ], + "functionName": { + "name": "sload", + "nativeSrc": "7716:5:17", + "nodeType": "YulIdentifier", + "src": "7716:5:17" + }, + "nativeSrc": "7716:11:17", + "nodeType": "YulFunctionCall", + "src": "7716:11:17" + } + ], + "functionName": { + "name": "extract_byte_array_length", + "nativeSrc": "7690:25:17", + "nodeType": "YulIdentifier", + "src": "7690:25:17" + }, + "nativeSrc": "7690:38:17", + "nodeType": "YulFunctionCall", + "src": "7690:38:17" + }, + { + "name": "newLen", + "nativeSrc": "7730:6:17", + "nodeType": "YulIdentifier", + "src": "7730:6:17" + } + ], + "functionName": { + "name": "clean_up_bytearray_end_slots_bytes_storage", + "nativeSrc": "7641:42:17", + "nodeType": "YulIdentifier", + "src": "7641:42:17" + }, + "nativeSrc": "7641:96:17", + "nodeType": "YulFunctionCall", + "src": "7641:96:17" + }, + "nativeSrc": "7641:96:17", + "nodeType": "YulExpressionStatement", + "src": "7641:96:17" + }, + { + "nativeSrc": "7746:18:17", + "nodeType": "YulVariableDeclaration", + "src": "7746:18:17", + "value": { + "kind": "number", + "nativeSrc": "7763:1:17", + "nodeType": "YulLiteral", + "src": "7763:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "srcOffset", + "nativeSrc": "7750:9:17", + "nodeType": "YulTypedName", + "src": "7750:9:17", + "type": "" + } + ] + }, + { + "nativeSrc": "7773:17:17", + "nodeType": "YulAssignment", + "src": "7773:17:17", + "value": { + "kind": "number", + "nativeSrc": "7786:4:17", + "nodeType": "YulLiteral", + "src": "7786:4:17", + "type": "", + "value": "0x20" + }, + "variableNames": [ + { + "name": "srcOffset", + "nativeSrc": "7773:9:17", + "nodeType": "YulIdentifier", + "src": "7773:9:17" + } + ] + }, + { + "cases": [ + { + "body": { + "nativeSrc": "7836:641:17", + "nodeType": "YulBlock", + "src": "7836:641:17", + "statements": [ + { + "nativeSrc": "7850:35:17", + "nodeType": "YulVariableDeclaration", + "src": "7850:35:17", + "value": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "7869:6:17", + "nodeType": "YulIdentifier", + "src": "7869:6:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7881:2:17", + "nodeType": "YulLiteral", + "src": "7881:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "7877:3:17", + "nodeType": "YulIdentifier", + "src": "7877:3:17" + }, + "nativeSrc": "7877:7:17", + "nodeType": "YulFunctionCall", + "src": "7877:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "7865:3:17", + "nodeType": "YulIdentifier", + "src": "7865:3:17" + }, + "nativeSrc": "7865:20:17", + "nodeType": "YulFunctionCall", + "src": "7865:20:17" + }, + "variables": [ + { + "name": "loopEnd", + "nativeSrc": "7854:7:17", + "nodeType": "YulTypedName", + "src": "7854:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "7898:48:17", + "nodeType": "YulVariableDeclaration", + "src": "7898:48:17", + "value": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "7941:4:17", + "nodeType": "YulIdentifier", + "src": "7941:4:17" + } + ], + "functionName": { + "name": "array_dataslot_bytes_storage", + "nativeSrc": "7912:28:17", + "nodeType": "YulIdentifier", + "src": "7912:28:17" + }, + "nativeSrc": "7912:34:17", + "nodeType": "YulFunctionCall", + "src": "7912:34:17" + }, + "variables": [ + { + "name": "dstPtr", + "nativeSrc": "7902:6:17", + "nodeType": "YulTypedName", + "src": "7902:6:17", + "type": "" + } + ] + }, + { + "nativeSrc": "7959:10:17", + "nodeType": "YulVariableDeclaration", + "src": "7959:10:17", + "value": { + "kind": "number", + "nativeSrc": "7968:1:17", + "nodeType": "YulLiteral", + "src": "7968:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "7963:1:17", + "nodeType": "YulTypedName", + "src": "7963:1:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "8039:165:17", + "nodeType": "YulBlock", + "src": "8039:165:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "8064:6:17", + "nodeType": "YulIdentifier", + "src": "8064:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "8082:3:17", + "nodeType": "YulIdentifier", + "src": "8082:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "8087:9:17", + "nodeType": "YulIdentifier", + "src": "8087:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8078:3:17", + "nodeType": "YulIdentifier", + "src": "8078:3:17" + }, + "nativeSrc": "8078:19:17", + "nodeType": "YulFunctionCall", + "src": "8078:19:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "8072:5:17", + "nodeType": "YulIdentifier", + "src": "8072:5:17" + }, + "nativeSrc": "8072:26:17", + "nodeType": "YulFunctionCall", + "src": "8072:26:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "8057:6:17", + "nodeType": "YulIdentifier", + "src": "8057:6:17" + }, + "nativeSrc": "8057:42:17", + "nodeType": "YulFunctionCall", + "src": "8057:42:17" + }, + "nativeSrc": "8057:42:17", + "nodeType": "YulExpressionStatement", + "src": "8057:42:17" + }, + { + "nativeSrc": "8116:24:17", + "nodeType": "YulAssignment", + "src": "8116:24:17", + "value": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "8130:6:17", + "nodeType": "YulIdentifier", + "src": "8130:6:17" + }, + { + "kind": "number", + "nativeSrc": "8138:1:17", + "nodeType": "YulLiteral", + "src": "8138:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8126:3:17", + "nodeType": "YulIdentifier", + "src": "8126:3:17" + }, + "nativeSrc": "8126:14:17", + "nodeType": "YulFunctionCall", + "src": "8126:14:17" + }, + "variableNames": [ + { + "name": "dstPtr", + "nativeSrc": "8116:6:17", + "nodeType": "YulIdentifier", + "src": "8116:6:17" + } + ] + }, + { + "nativeSrc": "8157:33:17", + "nodeType": "YulAssignment", + "src": "8157:33:17", + "value": { + "arguments": [ + { + "name": "srcOffset", + "nativeSrc": "8174:9:17", + "nodeType": "YulIdentifier", + "src": "8174:9:17" + }, + { + "kind": "number", + "nativeSrc": "8185:4:17", + "nodeType": "YulLiteral", + "src": "8185:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8170:3:17", + "nodeType": "YulIdentifier", + "src": "8170:3:17" + }, + "nativeSrc": "8170:20:17", + "nodeType": "YulFunctionCall", + "src": "8170:20:17" + }, + "variableNames": [ + { + "name": "srcOffset", + "nativeSrc": "8157:9:17", + "nodeType": "YulIdentifier", + "src": "8157:9:17" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "7993:1:17", + "nodeType": "YulIdentifier", + "src": "7993:1:17" + }, + { + "name": "loopEnd", + "nativeSrc": "7996:7:17", + "nodeType": "YulIdentifier", + "src": "7996:7:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "7990:2:17", + "nodeType": "YulIdentifier", + "src": "7990:2:17" + }, + "nativeSrc": "7990:14:17", + "nodeType": "YulFunctionCall", + "src": "7990:14:17" + }, + "nativeSrc": "7982:222:17", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "8005:21:17", + "nodeType": "YulBlock", + "src": "8005:21:17", + "statements": [ + { + "nativeSrc": "8007:17:17", + "nodeType": "YulAssignment", + "src": "8007:17:17", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "8016:1:17", + "nodeType": "YulIdentifier", + "src": "8016:1:17" + }, + { + "kind": "number", + "nativeSrc": "8019:4:17", + "nodeType": "YulLiteral", + "src": "8019:4:17", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8012:3:17", + "nodeType": "YulIdentifier", + "src": "8012:3:17" + }, + "nativeSrc": "8012:12:17", + "nodeType": "YulFunctionCall", + "src": "8012:12:17" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "8007:1:17", + "nodeType": "YulIdentifier", + "src": "8007:1:17" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "7986:3:17", + "nodeType": "YulBlock", + "src": "7986:3:17", + "statements": [] + }, + "src": "7982:222:17" + }, + { + "body": { + "nativeSrc": "8252:166:17", + "nodeType": "YulBlock", + "src": "8252:166:17", + "statements": [ + { + "nativeSrc": "8270:43:17", + "nodeType": "YulVariableDeclaration", + "src": "8270:43:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "8297:3:17", + "nodeType": "YulIdentifier", + "src": "8297:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "8302:9:17", + "nodeType": "YulIdentifier", + "src": "8302:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8293:3:17", + "nodeType": "YulIdentifier", + "src": "8293:3:17" + }, + "nativeSrc": "8293:19:17", + "nodeType": "YulFunctionCall", + "src": "8293:19:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "8287:5:17", + "nodeType": "YulIdentifier", + "src": "8287:5:17" + }, + "nativeSrc": "8287:26:17", + "nodeType": "YulFunctionCall", + "src": "8287:26:17" + }, + "variables": [ + { + "name": "lastValue", + "nativeSrc": "8274:9:17", + "nodeType": "YulTypedName", + "src": "8274:9:17", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "8337:6:17", + "nodeType": "YulIdentifier", + "src": "8337:6:17" + }, + { + "arguments": [ + { + "name": "lastValue", + "nativeSrc": "8349:9:17", + "nodeType": "YulIdentifier", + "src": "8349:9:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8376:1:17", + "nodeType": "YulLiteral", + "src": "8376:1:17", + "type": "", + "value": "3" + }, + { + "name": "newLen", + "nativeSrc": "8379:6:17", + "nodeType": "YulIdentifier", + "src": "8379:6:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "8372:3:17", + "nodeType": "YulIdentifier", + "src": "8372:3:17" + }, + "nativeSrc": "8372:14:17", + "nodeType": "YulFunctionCall", + "src": "8372:14:17" + }, + { + "kind": "number", + "nativeSrc": "8388:3:17", + "nodeType": "YulLiteral", + "src": "8388:3:17", + "type": "", + "value": "248" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "8368:3:17", + "nodeType": "YulIdentifier", + "src": "8368:3:17" + }, + "nativeSrc": "8368:24:17", + "nodeType": "YulFunctionCall", + "src": "8368:24:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8398:1:17", + "nodeType": "YulLiteral", + "src": "8398:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "8394:3:17", + "nodeType": "YulIdentifier", + "src": "8394:3:17" + }, + "nativeSrc": "8394:6:17", + "nodeType": "YulFunctionCall", + "src": "8394:6:17" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "8364:3:17", + "nodeType": "YulIdentifier", + "src": "8364:3:17" + }, + "nativeSrc": "8364:37:17", + "nodeType": "YulFunctionCall", + "src": "8364:37:17" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "8360:3:17", + "nodeType": "YulIdentifier", + "src": "8360:3:17" + }, + "nativeSrc": "8360:42:17", + "nodeType": "YulFunctionCall", + "src": "8360:42:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "8345:3:17", + "nodeType": "YulIdentifier", + "src": "8345:3:17" + }, + "nativeSrc": "8345:58:17", + "nodeType": "YulFunctionCall", + "src": "8345:58:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "8330:6:17", + "nodeType": "YulIdentifier", + "src": "8330:6:17" + }, + "nativeSrc": "8330:74:17", + "nodeType": "YulFunctionCall", + "src": "8330:74:17" + }, + "nativeSrc": "8330:74:17", + "nodeType": "YulExpressionStatement", + "src": "8330:74:17" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "loopEnd", + "nativeSrc": "8223:7:17", + "nodeType": "YulIdentifier", + "src": "8223:7:17" + }, + { + "name": "newLen", + "nativeSrc": "8232:6:17", + "nodeType": "YulIdentifier", + "src": "8232:6:17" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "8220:2:17", + "nodeType": "YulIdentifier", + "src": "8220:2:17" + }, + "nativeSrc": "8220:19:17", + "nodeType": "YulFunctionCall", + "src": "8220:19:17" + }, + "nativeSrc": "8217:201:17", + "nodeType": "YulIf", + "src": "8217:201:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "8438:4:17", + "nodeType": "YulIdentifier", + "src": "8438:4:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8452:1:17", + "nodeType": "YulLiteral", + "src": "8452:1:17", + "type": "", + "value": "1" + }, + { + "name": "newLen", + "nativeSrc": "8455:6:17", + "nodeType": "YulIdentifier", + "src": "8455:6:17" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "8448:3:17", + "nodeType": "YulIdentifier", + "src": "8448:3:17" + }, + "nativeSrc": "8448:14:17", + "nodeType": "YulFunctionCall", + "src": "8448:14:17" + }, + { + "kind": "number", + "nativeSrc": "8464:1:17", + "nodeType": "YulLiteral", + "src": "8464:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8444:3:17", + "nodeType": "YulIdentifier", + "src": "8444:3:17" + }, + "nativeSrc": "8444:22:17", + "nodeType": "YulFunctionCall", + "src": "8444:22:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "8431:6:17", + "nodeType": "YulIdentifier", + "src": "8431:6:17" + }, + "nativeSrc": "8431:36:17", + "nodeType": "YulFunctionCall", + "src": "8431:36:17" + }, + "nativeSrc": "8431:36:17", + "nodeType": "YulExpressionStatement", + "src": "8431:36:17" + } + ] + }, + "nativeSrc": "7829:648:17", + "nodeType": "YulCase", + "src": "7829:648:17", + "value": { + "kind": "number", + "nativeSrc": "7834:1:17", + "nodeType": "YulLiteral", + "src": "7834:1:17", + "type": "", + "value": "1" + } + }, + { + "body": { + "nativeSrc": "8494:234:17", + "nodeType": "YulBlock", + "src": "8494:234:17", + "statements": [ + { + "nativeSrc": "8508:14:17", + "nodeType": "YulVariableDeclaration", + "src": "8508:14:17", + "value": { + "kind": "number", + "nativeSrc": "8521:1:17", + "nodeType": "YulLiteral", + "src": "8521:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "8512:5:17", + "nodeType": "YulTypedName", + "src": "8512:5:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "8557:67:17", + "nodeType": "YulBlock", + "src": "8557:67:17", + "statements": [ + { + "nativeSrc": "8575:35:17", + "nodeType": "YulAssignment", + "src": "8575:35:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "8594:3:17", + "nodeType": "YulIdentifier", + "src": "8594:3:17" + }, + { + "name": "srcOffset", + "nativeSrc": "8599:9:17", + "nodeType": "YulIdentifier", + "src": "8599:9:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8590:3:17", + "nodeType": "YulIdentifier", + "src": "8590:3:17" + }, + "nativeSrc": "8590:19:17", + "nodeType": "YulFunctionCall", + "src": "8590:19:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "8584:5:17", + "nodeType": "YulIdentifier", + "src": "8584:5:17" + }, + "nativeSrc": "8584:26:17", + "nodeType": "YulFunctionCall", + "src": "8584:26:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "8575:5:17", + "nodeType": "YulIdentifier", + "src": "8575:5:17" + } + ] + } + ] + }, + "condition": { + "name": "newLen", + "nativeSrc": "8538:6:17", + "nodeType": "YulIdentifier", + "src": "8538:6:17" + }, + "nativeSrc": "8535:89:17", + "nodeType": "YulIf", + "src": "8535:89:17" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "8644:4:17", + "nodeType": "YulIdentifier", + "src": "8644:4:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "8703:5:17", + "nodeType": "YulIdentifier", + "src": "8703:5:17" + }, + { + "name": "newLen", + "nativeSrc": "8710:6:17", + "nodeType": "YulIdentifier", + "src": "8710:6:17" + } + ], + "functionName": { + "name": "extract_used_part_and_set_length_of_short_byte_array", + "nativeSrc": "8650:52:17", + "nodeType": "YulIdentifier", + "src": "8650:52:17" + }, + "nativeSrc": "8650:67:17", + "nodeType": "YulFunctionCall", + "src": "8650:67:17" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "8637:6:17", + "nodeType": "YulIdentifier", + "src": "8637:6:17" + }, + "nativeSrc": "8637:81:17", + "nodeType": "YulFunctionCall", + "src": "8637:81:17" + }, + "nativeSrc": "8637:81:17", + "nodeType": "YulExpressionStatement", + "src": "8637:81:17" + } + ] + }, + "nativeSrc": "8486:242:17", + "nodeType": "YulCase", + "src": "8486:242:17", + "value": "default" + } + ], + "expression": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "7809:6:17", + "nodeType": "YulIdentifier", + "src": "7809:6:17" + }, + { + "kind": "number", + "nativeSrc": "7817:2:17", + "nodeType": "YulLiteral", + "src": "7817:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "7806:2:17", + "nodeType": "YulIdentifier", + "src": "7806:2:17" + }, + "nativeSrc": "7806:14:17", + "nodeType": "YulFunctionCall", + "src": "7806:14:17" + }, + "nativeSrc": "7799:929:17", + "nodeType": "YulSwitch", + "src": "7799:929:17" + } + ] + }, + "name": "copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage", + "nativeSrc": "7439:1295:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "slot", + "nativeSrc": "7518:4:17", + "nodeType": "YulTypedName", + "src": "7518:4:17", + "type": "" + }, + { + "name": "src", + "nativeSrc": "7524:3:17", + "nodeType": "YulTypedName", + "src": "7524:3:17", + "type": "" + } + ], + "src": "7439:1295:17" + }, + { + "body": { + "nativeSrc": "9006:498:17", + "nodeType": "YulBlock", + "src": "9006:498:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9023:9:17", + "nodeType": "YulIdentifier", + "src": "9023:9:17" + }, + { + "name": "value0", + "nativeSrc": "9034:6:17", + "nodeType": "YulIdentifier", + "src": "9034:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9016:6:17", + "nodeType": "YulIdentifier", + "src": "9016:6:17" + }, + "nativeSrc": "9016:25:17", + "nodeType": "YulFunctionCall", + "src": "9016:25:17" + }, + "nativeSrc": "9016:25:17", + "nodeType": "YulExpressionStatement", + "src": "9016:25:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9061:9:17", + "nodeType": "YulIdentifier", + "src": "9061:9:17" + }, + { + "kind": "number", + "nativeSrc": "9072:2:17", + "nodeType": "YulLiteral", + "src": "9072:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9057:3:17", + "nodeType": "YulIdentifier", + "src": "9057:3:17" + }, + "nativeSrc": "9057:18:17", + "nodeType": "YulFunctionCall", + "src": "9057:18:17" + }, + { + "name": "value1", + "nativeSrc": "9077:6:17", + "nodeType": "YulIdentifier", + "src": "9077:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9050:6:17", + "nodeType": "YulIdentifier", + "src": "9050:6:17" + }, + "nativeSrc": "9050:34:17", + "nodeType": "YulFunctionCall", + "src": "9050:34:17" + }, + "nativeSrc": "9050:34:17", + "nodeType": "YulExpressionStatement", + "src": "9050:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9104:9:17", + "nodeType": "YulIdentifier", + "src": "9104:9:17" + }, + { + "kind": "number", + "nativeSrc": "9115:2:17", + "nodeType": "YulLiteral", + "src": "9115:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9100:3:17", + "nodeType": "YulIdentifier", + "src": "9100:3:17" + }, + "nativeSrc": "9100:18:17", + "nodeType": "YulFunctionCall", + "src": "9100:18:17" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "9124:6:17", + "nodeType": "YulIdentifier", + "src": "9124:6:17" + }, + { + "kind": "number", + "nativeSrc": "9132:10:17", + "nodeType": "YulLiteral", + "src": "9132:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "9120:3:17", + "nodeType": "YulIdentifier", + "src": "9120:3:17" + }, + "nativeSrc": "9120:23:17", + "nodeType": "YulFunctionCall", + "src": "9120:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9093:6:17", + "nodeType": "YulIdentifier", + "src": "9093:6:17" + }, + "nativeSrc": "9093:51:17", + "nodeType": "YulFunctionCall", + "src": "9093:51:17" + }, + "nativeSrc": "9093:51:17", + "nodeType": "YulExpressionStatement", + "src": "9093:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9164:9:17", + "nodeType": "YulIdentifier", + "src": "9164:9:17" + }, + { + "kind": "number", + "nativeSrc": "9175:2:17", + "nodeType": "YulLiteral", + "src": "9175:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9160:3:17", + "nodeType": "YulIdentifier", + "src": "9160:3:17" + }, + "nativeSrc": "9160:18:17", + "nodeType": "YulFunctionCall", + "src": "9160:18:17" + }, + { + "name": "value3", + "nativeSrc": "9180:6:17", + "nodeType": "YulIdentifier", + "src": "9180:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9153:6:17", + "nodeType": "YulIdentifier", + "src": "9153:6:17" + }, + "nativeSrc": "9153:34:17", + "nodeType": "YulFunctionCall", + "src": "9153:34:17" + }, + "nativeSrc": "9153:34:17", + "nodeType": "YulExpressionStatement", + "src": "9153:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9207:9:17", + "nodeType": "YulIdentifier", + "src": "9207:9:17" + }, + { + "kind": "number", + "nativeSrc": "9218:3:17", + "nodeType": "YulLiteral", + "src": "9218:3:17", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9203:3:17", + "nodeType": "YulIdentifier", + "src": "9203:3:17" + }, + "nativeSrc": "9203:19:17", + "nodeType": "YulFunctionCall", + "src": "9203:19:17" + }, + { + "name": "value4", + "nativeSrc": "9224:6:17", + "nodeType": "YulIdentifier", + "src": "9224:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9196:6:17", + "nodeType": "YulIdentifier", + "src": "9196:6:17" + }, + "nativeSrc": "9196:35:17", + "nodeType": "YulFunctionCall", + "src": "9196:35:17" + }, + "nativeSrc": "9196:35:17", + "nodeType": "YulExpressionStatement", + "src": "9196:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9251:9:17", + "nodeType": "YulIdentifier", + "src": "9251:9:17" + }, + { + "kind": "number", + "nativeSrc": "9262:3:17", + "nodeType": "YulLiteral", + "src": "9262:3:17", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9247:3:17", + "nodeType": "YulIdentifier", + "src": "9247:3:17" + }, + "nativeSrc": "9247:19:17", + "nodeType": "YulFunctionCall", + "src": "9247:19:17" + }, + { + "kind": "number", + "nativeSrc": "9268:3:17", + "nodeType": "YulLiteral", + "src": "9268:3:17", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9240:6:17", + "nodeType": "YulIdentifier", + "src": "9240:6:17" + }, + "nativeSrc": "9240:32:17", + "nodeType": "YulFunctionCall", + "src": "9240:32:17" + }, + "nativeSrc": "9240:32:17", + "nodeType": "YulExpressionStatement", + "src": "9240:32:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9292:9:17", + "nodeType": "YulIdentifier", + "src": "9292:9:17" + }, + { + "kind": "number", + "nativeSrc": "9303:3:17", + "nodeType": "YulLiteral", + "src": "9303:3:17", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9288:3:17", + "nodeType": "YulIdentifier", + "src": "9288:3:17" + }, + "nativeSrc": "9288:19:17", + "nodeType": "YulFunctionCall", + "src": "9288:19:17" + }, + { + "name": "value6", + "nativeSrc": "9309:6:17", + "nodeType": "YulIdentifier", + "src": "9309:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9281:6:17", + "nodeType": "YulIdentifier", + "src": "9281:6:17" + }, + "nativeSrc": "9281:35:17", + "nodeType": "YulFunctionCall", + "src": "9281:35:17" + }, + "nativeSrc": "9281:35:17", + "nodeType": "YulExpressionStatement", + "src": "9281:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9342:9:17", + "nodeType": "YulIdentifier", + "src": "9342:9:17" + }, + { + "kind": "number", + "nativeSrc": "9353:3:17", + "nodeType": "YulLiteral", + "src": "9353:3:17", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9338:3:17", + "nodeType": "YulIdentifier", + "src": "9338:3:17" + }, + "nativeSrc": "9338:19:17", + "nodeType": "YulFunctionCall", + "src": "9338:19:17" + }, + { + "name": "value5", + "nativeSrc": "9359:6:17", + "nodeType": "YulIdentifier", + "src": "9359:6:17" + }, + { + "name": "value6", + "nativeSrc": "9367:6:17", + "nodeType": "YulIdentifier", + "src": "9367:6:17" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "9325:12:17", + "nodeType": "YulIdentifier", + "src": "9325:12:17" + }, + "nativeSrc": "9325:49:17", + "nodeType": "YulFunctionCall", + "src": "9325:49:17" + }, + "nativeSrc": "9325:49:17", + "nodeType": "YulExpressionStatement", + "src": "9325:49:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9398:9:17", + "nodeType": "YulIdentifier", + "src": "9398:9:17" + }, + { + "name": "value6", + "nativeSrc": "9409:6:17", + "nodeType": "YulIdentifier", + "src": "9409:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9394:3:17", + "nodeType": "YulIdentifier", + "src": "9394:3:17" + }, + "nativeSrc": "9394:22:17", + "nodeType": "YulFunctionCall", + "src": "9394:22:17" + }, + { + "kind": "number", + "nativeSrc": "9418:3:17", + "nodeType": "YulLiteral", + "src": "9418:3:17", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9390:3:17", + "nodeType": "YulIdentifier", + "src": "9390:3:17" + }, + "nativeSrc": "9390:32:17", + "nodeType": "YulFunctionCall", + "src": "9390:32:17" + }, + { + "kind": "number", + "nativeSrc": "9424:1:17", + "nodeType": "YulLiteral", + "src": "9424:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9383:6:17", + "nodeType": "YulIdentifier", + "src": "9383:6:17" + }, + "nativeSrc": "9383:43:17", + "nodeType": "YulFunctionCall", + "src": "9383:43:17" + }, + "nativeSrc": "9383:43:17", + "nodeType": "YulExpressionStatement", + "src": "9383:43:17" + }, + { + "nativeSrc": "9435:63:17", + "nodeType": "YulAssignment", + "src": "9435:63:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9451:9:17", + "nodeType": "YulIdentifier", + "src": "9451:9:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value6", + "nativeSrc": "9470:6:17", + "nodeType": "YulIdentifier", + "src": "9470:6:17" + }, + { + "kind": "number", + "nativeSrc": "9478:2:17", + "nodeType": "YulLiteral", + "src": "9478:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9466:3:17", + "nodeType": "YulIdentifier", + "src": "9466:3:17" + }, + "nativeSrc": "9466:15:17", + "nodeType": "YulFunctionCall", + "src": "9466:15:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "9487:2:17", + "nodeType": "YulLiteral", + "src": "9487:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "9483:3:17", + "nodeType": "YulIdentifier", + "src": "9483:3:17" + }, + "nativeSrc": "9483:7:17", + "nodeType": "YulFunctionCall", + "src": "9483:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "9462:3:17", + "nodeType": "YulIdentifier", + "src": "9462:3:17" + }, + "nativeSrc": "9462:29:17", + "nodeType": "YulFunctionCall", + "src": "9462:29:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9447:3:17", + "nodeType": "YulIdentifier", + "src": "9447:3:17" + }, + "nativeSrc": "9447:45:17", + "nodeType": "YulFunctionCall", + "src": "9447:45:17" + }, + { + "kind": "number", + "nativeSrc": "9494:3:17", + "nodeType": "YulLiteral", + "src": "9494:3:17", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9443:3:17", + "nodeType": "YulIdentifier", + "src": "9443:3:17" + }, + "nativeSrc": "9443:55:17", + "nodeType": "YulFunctionCall", + "src": "9443:55:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "9435:4:17", + "nodeType": "YulIdentifier", + "src": "9435:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_bytes32_t_uint32_t_bytes32_t_uint256_t_bytes_calldata_ptr__to_t_uint256_t_bytes32_t_uint32_t_bytes32_t_uint256_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "8739:765:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "8927:9:17", + "nodeType": "YulTypedName", + "src": "8927:9:17", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "8938:6:17", + "nodeType": "YulTypedName", + "src": "8938:6:17", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "8946:6:17", + "nodeType": "YulTypedName", + "src": "8946:6:17", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "8954:6:17", + "nodeType": "YulTypedName", + "src": "8954:6:17", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "8962:6:17", + "nodeType": "YulTypedName", + "src": "8962:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "8970:6:17", + "nodeType": "YulTypedName", + "src": "8970:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "8978:6:17", + "nodeType": "YulTypedName", + "src": "8978:6:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "8986:6:17", + "nodeType": "YulTypedName", + "src": "8986:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "8997:4:17", + "nodeType": "YulTypedName", + "src": "8997:4:17", + "type": "" + } + ], + "src": "8739:765:17" + } + ] + }, + "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n mcopy(add(pos, 0x20), add(value, 0x20), length)\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr_t_address__to_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xffffffff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), and(value6, 0xffffffff))\n mstore(add(headStart, 224), 288)\n tail := abi_encode_bytes(value7, add(headStart, 288))\n mstore(add(headStart, 256), and(value8, sub(shl(160, 1), 1)))\n }\n function abi_decode_uint32(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint256t_uint32t_bytes32t_addresst_bytes32t_uint256t_uint32t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n {\n if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n value1 := abi_decode_uint32(add(headStart, 32))\n let value_1 := 0\n value_1 := calldataload(add(headStart, 64))\n value2 := value_1\n value3 := abi_decode_address(add(headStart, 96))\n let value_2 := 0\n value_2 := calldataload(add(headStart, 128))\n value4 := value_2\n let value_3 := 0\n value_3 := calldataload(add(headStart, 160))\n value5 := value_3\n value6 := abi_decode_uint32(add(headStart, 192))\n let offset := calldataload(add(headStart, 224))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value7_1, value8_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value7 := value7_1\n value8 := value8_1\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_bytes_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_bytes_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _1 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _1) { start := add(start, 1) }\n { sstore(start, 0) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_bytes_calldata_ptr_to_t_bytes_storage(slot, src, len)\n {\n if gt(len, 0xffffffffffffffff) { panic_error_0x41() }\n clean_up_bytearray_end_slots_bytes_storage(slot, extract_byte_array_length(sload(slot)), len)\n let srcOffset := 0\n switch gt(len, 31)\n case 1 {\n let loopEnd := and(len, not(31))\n let dstPtr := array_dataslot_bytes_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) }\n {\n sstore(dstPtr, calldataload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 0x20)\n }\n if lt(loopEnd, len)\n {\n sstore(dstPtr, and(calldataload(add(src, srcOffset)), not(shr(and(shl(3, len), 248), not(0)))))\n }\n sstore(slot, add(shl(1, len), 1))\n }\n default {\n let value := 0\n if len\n {\n value := calldataload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, len))\n }\n }\n function abi_encode_tuple_packed_t_bytes_storage__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let ret := 0\n let slotValue := sload(value0)\n let length := extract_byte_array_length(slotValue)\n switch and(slotValue, 1)\n case 0 {\n mstore(pos, and(slotValue, not(255)))\n ret := add(pos, mul(length, iszero(iszero(length))))\n }\n case 1 {\n mstore(0, value0)\n let dataPos := keccak256(0, 0x20)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(pos, i), sload(dataPos))\n dataPos := add(dataPos, 1)\n }\n ret := add(pos, length)\n }\n end := ret\n }\n function copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n clean_up_bytearray_end_slots_bytes_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_bytes_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 0x20)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n function abi_encode_tuple_t_uint256_t_bytes32_t_uint32_t_bytes32_t_uint256_t_bytes_calldata_ptr__to_t_uint256_t_bytes32_t_uint32_t_bytes32_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), and(value2, 0xffffffff))\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), 192)\n mstore(add(headStart, 192), value6)\n calldatacopy(add(headStart, 224), value5, value6)\n mstore(add(add(headStart, value6), 224), 0)\n tail := add(add(headStart, and(add(value6, 31), not(31))), 224)\n }\n}", + "id": 17, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806302bcc1dd14610064578063599d38f314610079578063779b432d1461009f578063a0fe97e3146100b2578063cc6e8454146100cf578063e150ef49146100ff575b5f5ffd5b6100776100723660046105e6565b610114565b005b61008161014b565b60405161009699989796959493929190610663565b60405180910390f35b6100776100ad3660046106e7565b61021f565b6009546100bf9060ff1681565b6040519015158152602001610096565b6009546100e79061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610096565b610107610453565b604051610096919061077f565b600980546001600160a01b038516610100026001600160a81b0319909116176001179055600a610145828483610830565b50505050565b5f805460015460025460035460045460055460065460078054979863ffffffff9788169896976001600160a01b039096169694959394939092169261018f906107ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101bb906107ac565b80156102065780601f106101dd57610100808354040283529160200191610206565b820191905f5260205f20905b8154815290600101906020018083116101e957829003601f168201915b505050600890930154919250506001600160a01b031689565b60095460ff16156102ad575f5f600960019054906101000a90046001600160a01b03166001600160a01b0316600a60405161025a91906108ea565b5f604051808303815f865af19150503d805f8114610293576040519150601f19603f3d011682016040523d82523d5f602084013e610298565b606091505b5091509150816102aa57805160208201fd5b50505b6102c26001600160a01b03871633308c6104df565b6040518061012001604052808a81526020018963ffffffff168152602001888152602001876001600160a01b031681526020018681526020018581526020018463ffffffff16815260200183838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050336020938401525082518155908201516001805463ffffffff1990811663ffffffff9384161790915560408401516002556060840151600380546001600160a01b0319166001600160a01b03909216919091179055608084015160045560a084015160055560c084015160068054909216921691909117905560e08201516007906103ce908261095b565b506101009190910151600890910180546001600160a01b0319166001600160a01b0392831617905560405163ffffffff8516913391908916907fd6257a7e0a72caa2353e59a6f79cbc5221c3fb8e486c6c05e4f7844c4f967d6890610440908e908d908f908d908d908c908c90610a16565b60405180910390a4505050505050505050565b600a8054610460906107ac565b80601f016020809104026020016040519081016040528092919081815260200182805461048c906107ac565b80156104d75780601f106104ae576101008083540402835291602001916104d7565b820191905f5260205f20905b8154815290600101906020018083116104ba57829003601f168201915b505050505081565b6104ed848484846001610519565b61014557604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316610575578383151615610569573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b80356001600160a01b038116811461059c575f5ffd5b919050565b5f5f83601f8401126105b1575f5ffd5b50813567ffffffffffffffff8111156105c8575f5ffd5b6020830191508360208285010111156105df575f5ffd5b9250929050565b5f5f5f604084860312156105f8575f5ffd5b61060184610586565b9250602084013567ffffffffffffffff81111561061c575f5ffd5b610628868287016105a1565b9497909650939450505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b89815263ffffffff8916602082015287604082015260018060a01b03871660608201528560808201528460a082015263ffffffff841660c082015261012060e08201525f6106b5610120830185610635565b905060018060a01b0383166101008301529a9950505050505050505050565b803563ffffffff8116811461059c575f5ffd5b5f5f5f5f5f5f5f5f5f6101008a8c031215610700575f5ffd5b8935985061071060208b016106d4565b975060408a0135965061072560608b01610586565b955060808a0135945060a08a0135935061074160c08b016106d4565b925060e08a013567ffffffffffffffff81111561075c575f5ffd5b6107688c828d016105a1565b915080935050809150509295985092959850929598565b602081525f6107916020830184610635565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806107c057607f821691505b6020821081036107de57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561082b57805f5260205f20601f840160051c810160208510156108095750805b601f840160051c820191505b81811015610828575f8155600101610815565b50505b505050565b67ffffffffffffffff83111561084857610848610798565b61085c8361085683546107ac565b836107e4565b5f601f84116001811461088d575f85156108765750838201355b5f19600387901b1c1916600186901b178355610828565b5f83815260208120601f198716915b828110156108bc578685013582556020948501946001909201910161089c565b50868210156108d8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f5f83546108f7816107ac565b60018216801561090e576001811461092357610950565b60ff1983168652811515820286019350610950565b865f5260205f205f5b838110156109485781548882015260019091019060200161092c565b505081860193505b509195945050505050565b815167ffffffffffffffff81111561097557610975610798565b6109898161098384546107ac565b846107e4565b6020601f8211600181146109bb575f83156109a45750848201515b5f19600385901b1c1916600184901b178455610828565b5f84815260208120601f198516915b828110156109ea57878501518255602094850194600190920191016109ca565b5084821015610a0757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b87815286602082015263ffffffff8616604082015284606082015283608082015260c060a08201528160c0820152818360e08301375f81830160e090810191909152601f909201601f19160101969550505050505056fea26469706673582212207cd7fedb045a23761a0223da3be1467fe126cebbebfc718cce24b063c155abc164736f6c634300081c0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x60 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2BCC1DD EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x599D38F3 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x779B432D EQ PUSH2 0x9F JUMPI DUP1 PUSH4 0xA0FE97E3 EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0xCC6E8454 EQ PUSH2 0xCF JUMPI DUP1 PUSH4 0xE150EF49 EQ PUSH2 0xFF JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x5E6 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x81 PUSH2 0x14B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x96 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x663 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x6E7 JUMP JUMPDEST PUSH2 0x21F JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0xBF SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x96 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH2 0xE7 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x96 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x453 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x77F JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x100 MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP2 AND OR PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0xA PUSH2 0x145 DUP3 DUP5 DUP4 PUSH2 0x830 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH1 0x7 DUP1 SLOAD SWAP8 SWAP9 PUSH4 0xFFFFFFFF SWAP8 DUP9 AND SWAP9 SWAP7 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP7 SWAP5 SWAP6 SWAP4 SWAP5 SWAP4 SWAP1 SWAP3 AND SWAP3 PUSH2 0x18F SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1BB SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x206 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x206 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1E9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x8 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AD JUMPI PUSH0 PUSH0 PUSH1 0x9 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA PUSH1 0x40 MLOAD PUSH2 0x25A SWAP2 SWAP1 PUSH2 0x8EA JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x293 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x298 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2AA JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x2C2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND CALLER ADDRESS DUP13 PUSH2 0x4DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP CALLER PUSH1 0x20 SWAP4 DUP5 ADD MSTORE POP DUP3 MLOAD DUP2 SSTORE SWAP1 DUP3 ADD MLOAD PUSH1 0x1 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT SWAP1 DUP2 AND PUSH4 0xFFFFFFFF SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x2 SSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x4 SSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0x5 SSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x6 DUP1 SLOAD SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x7 SWAP1 PUSH2 0x3CE SWAP1 DUP3 PUSH2 0x95B JUMP JUMPDEST POP PUSH2 0x100 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x8 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF DUP6 AND SWAP2 CALLER SWAP2 SWAP1 DUP10 AND SWAP1 PUSH32 0xD6257A7E0A72CAA2353E59A6F79CBC5221C3FB8E486C6C05E4F7844C4F967D68 SWAP1 PUSH2 0x440 SWAP1 DUP15 SWAP1 DUP14 SWAP1 DUP16 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP13 SWAP1 DUP13 SWAP1 PUSH2 0xA16 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH2 0x460 SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x48C SWAP1 PUSH2 0x7AC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4D7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4AE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x4D7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4BA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0x4ED DUP5 DUP5 DUP5 DUP5 PUSH1 0x1 PUSH2 0x519 JUMP JUMPDEST PUSH2 0x145 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 MSTORE DUP7 AND PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE SWAP2 PUSH1 0x20 DUP4 PUSH1 0x64 DUP2 DUP1 DUP13 GAS CALL SWAP3 POP PUSH1 0x1 PUSH0 MLOAD EQ DUP4 AND PUSH2 0x575 JUMPI DUP4 DUP4 ISZERO AND ISZERO PUSH2 0x569 JUMPI RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST PUSH0 DUP9 EXTCODESIZE GT RETURNDATASIZE ISZERO AND DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x40 MSTORE POP PUSH0 PUSH1 0x60 MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x59C JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x5B1 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5C8 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5DF JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5F8 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x601 DUP5 PUSH2 0x586 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x61C JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x628 DUP7 DUP3 DUP8 ADD PUSH2 0x5A1 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD MCOPY PUSH0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP10 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE DUP8 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x60 DUP3 ADD MSTORE DUP6 PUSH1 0x80 DUP3 ADD MSTORE DUP5 PUSH1 0xA0 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x120 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x6B5 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x635 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x100 DUP4 ADD MSTORE SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x59C JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH0 PUSH2 0x100 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x700 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP10 CALLDATALOAD SWAP9 POP PUSH2 0x710 PUSH1 0x20 DUP12 ADD PUSH2 0x6D4 JUMP JUMPDEST SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP7 POP PUSH2 0x725 PUSH1 0x60 DUP12 ADD PUSH2 0x586 JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH2 0x741 PUSH1 0xC0 DUP12 ADD PUSH2 0x6D4 JUMP JUMPDEST SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x75C JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x768 DUP13 DUP3 DUP14 ADD PUSH2 0x5A1 JUMP JUMPDEST SWAP2 POP DUP1 SWAP4 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH0 PUSH2 0x791 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x635 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x7C0 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x7DE JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x82B JUMPI DUP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x809 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x828 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x815 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x848 JUMPI PUSH2 0x848 PUSH2 0x798 JUMP JUMPDEST PUSH2 0x85C DUP4 PUSH2 0x856 DUP4 SLOAD PUSH2 0x7AC JUMP JUMPDEST DUP4 PUSH2 0x7E4 JUMP JUMPDEST PUSH0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x88D JUMPI PUSH0 DUP6 ISZERO PUSH2 0x876 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x828 JUMP JUMPDEST PUSH0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP8 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x8BC JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x89C JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x8D8 JUMPI PUSH0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH0 PUSH0 DUP4 SLOAD PUSH2 0x8F7 DUP2 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x1 DUP3 AND DUP1 ISZERO PUSH2 0x90E JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x923 JUMPI PUSH2 0x950 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE DUP2 ISZERO ISZERO DUP3 MUL DUP7 ADD SWAP4 POP PUSH2 0x950 JUMP JUMPDEST DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x948 JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x92C JUMP JUMPDEST POP POP DUP2 DUP7 ADD SWAP4 POP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x975 JUMPI PUSH2 0x975 PUSH2 0x798 JUMP JUMPDEST PUSH2 0x989 DUP2 PUSH2 0x983 DUP5 SLOAD PUSH2 0x7AC JUMP JUMPDEST DUP5 PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x9BB JUMPI PUSH0 DUP4 ISZERO PUSH2 0x9A4 JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x828 JUMP JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9EA JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x9CA JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0xA07 JUMPI DUP7 DUP5 ADD MLOAD PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST DUP8 DUP2 MSTORE DUP7 PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP7 AND PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE DUP2 PUSH1 0xC0 DUP3 ADD MSTORE DUP2 DUP4 PUSH1 0xE0 DUP4 ADD CALLDATACOPY PUSH0 DUP2 DUP4 ADD PUSH1 0xE0 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND ADD ADD SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0xD7FEDB045A23761A0223DA3BE1467FE126CEBBEBFC718CCE24B063C155 0xAB 0xC1 PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ", + "sourceMap": "213:2296:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2350:157;;;;;;:::i;:::-;;:::i;:::-;;574:28;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1018:1326;;;;;;:::i;:::-;;:::i;608:19::-;;;;;;;;;;;;3648:14:17;;3641:22;3623:41;;3611:2;3596:18;608:19:16;3483:187:17;633:28:16;;;;;;;;-1:-1:-1;;;;;633:28:16;;;;;;-1:-1:-1;;;;;3839:32:17;;;3821:51;;3809:2;3794:18;633:28:16;3675:203:17;667:24:16;;;:::i;:::-;;;;;;;:::i;2350:157::-;2426:7;:14;;-1:-1:-1;;;;;2450:22:16;;2426:14;2450:22;-1:-1:-1;;;;;;2450:22:16;;;;2436:4;2450:22;;;2482:11;:18;2496:4;;2482:11;:18;:::i;:::-;;2350:157;;;:::o;574:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;574:28:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;574:28:16;;;;;;;-1:-1:-1;;;;;;;574:28:16;;:::o;1018:1326::-;1324:7;;;;1320:265;;;1348:12;1362:23;1389:13;;;;;;;;;-1:-1:-1;;;;;1389:13:16;-1:-1:-1;;;;;1389:18:16;1408:11;1389:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1347:73;;;;1439:7;1434:141;;1531:10;1525:17;1520:2;1508:10;1504:19;1497:46;1434:141;1333:252;;1320:265;1595:69;-1:-1:-1;;;;;1595:34:16;;1630:10;1650:4;1657:6;1595:34;:69::i;:::-;1690:375;;;;;;;;1721:6;1690:375;;;;1760:17;1690:375;;;;;;1806:13;1690:375;;;;1844:9;-1:-1:-1;;;;;1690:375:16;;;;;1886:17;1690:375;;;;1925:6;1690:375;;;;1967:20;1690:375;;;;;;2011:8;;1690:375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1690:375:16;;;-1:-1:-1;;2044:10:16;1690:375;;;;;-1:-1:-1;1675:390:16;;;;;;;;;;;-1:-1:-1;;1675:390:16;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1675:390:16;-1:-1:-1;;;;;1675:390:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1675:390:16;;;;;;;;;;;;-1:-1:-1;;;;;;1675:390:16;-1:-1:-1;;;;;1675:390:16;;;;;;2081:256;;;;;;2152:10;;2081:256;;;;;;;;2132:6;;2176:13;;2203:17;;2234;;2265:6;;2319:8;;;;2081:256;:::i;:::-;;;;;;;;1018:1326;;;;;;;;;:::o;667:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1662:232:7:-;1767:47;1785:5;1792:4;1798:2;1802:5;1809:4;1767:17;:47::i;:::-;1762:126;;1837:40;;-1:-1:-1;;;1837:40:7;;-1:-1:-1;;;;;3839:32:17;;1837:40:7;;;3821:51:17;3794:18;;1837:40:7;;;;;;;10165:1393;10460:4;10454:11;-1:-1:-1;;;10323:12:7;10478:22;;;-1:-1:-1;;;;;10526:26:7;;;10520:4;10513:40;10579:24;;10573:4;10566:38;10624:4;10617:19;;;10323:12;10700:4;10323:12;10688:4;10323:12;;10672:5;10665;10660:45;10649:56;;10917:1;10910:4;10904:11;10901:18;10892:7;10888:32;10878:606;;11049:6;11039:7;11032:15;11028:28;11025:165;;;11105:16;11099:4;11094:3;11079:43;11155:16;11150:3;11143:29;11025:165;11466:1;11458:5;11446:18;11443:25;11424:16;11417:24;11413:56;11404:7;11400:70;11389:81;;10878:606;11504:4;11497:17;-1:-1:-1;11540:1:7;11534:4;11527:15;10165:1393;;-1:-1:-1;;;;;10165:1393:7:o;14:173:17:-;82:20;;-1:-1:-1;;;;;131:31:17;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:347::-;243:8;253:6;307:3;300:4;292:6;288:17;284:27;274:55;;325:1;322;315:12;274:55;-1:-1:-1;348:20:17;;391:18;380:30;;377:50;;;423:1;420;413:12;377:50;460:4;452:6;448:17;436:29;;512:3;505:4;496:6;488;484:19;480:30;477:39;474:59;;;529:1;526;519:12;474:59;192:347;;;;;:::o;544:483::-;623:6;631;639;692:2;680:9;671:7;667:23;663:32;660:52;;;708:1;705;698:12;660:52;731:29;750:9;731:29;:::i;:::-;721:39;;811:2;800:9;796:18;783:32;838:18;830:6;827:30;824:50;;;870:1;867;860:12;824:50;909:58;959:7;950:6;939:9;935:22;909:58;:::i;:::-;544:483;;986:8;;-1:-1:-1;883:84:17;;-1:-1:-1;;;;544:483:17:o;1032:288::-;1073:3;1111:5;1105:12;1138:6;1133:3;1126:19;1194:6;1187:4;1180:5;1176:16;1169:4;1164:3;1160:14;1154:47;1246:1;1239:4;1230:6;1225:3;1221:16;1217:27;1210:38;1309:4;1302:2;1298:7;1293:2;1285:6;1281:15;1277:29;1272:3;1268:39;1264:50;1257:57;;;1032:288;;;;:::o;1325:874::-;1692:6;1681:9;1674:25;1747:10;1739:6;1735:23;1730:2;1719:9;1715:18;1708:51;1795:6;1790:2;1779:9;1775:18;1768:34;1867:1;1863;1858:3;1854:11;1850:19;1842:6;1838:32;1833:2;1822:9;1818:18;1811:60;1908:6;1902:3;1891:9;1887:19;1880:35;1952:6;1946:3;1935:9;1931:19;1924:35;2008:10;2000:6;1996:23;1990:3;1979:9;1975:19;1968:52;2057:3;2051;2040:9;2036:19;2029:32;1655:4;2078:45;2118:3;2107:9;2103:19;2095:6;2078:45;:::i;:::-;2070:53;;2189:1;2185;2180:3;2176:11;2172:19;2164:6;2160:32;2154:3;2143:9;2139:19;2132:61;1325:874;;;;;;;;;;;;:::o;2204:163::-;2271:20;;2331:10;2320:22;;2310:33;;2300:61;;2357:1;2354;2347:12;2372:1106;2503:6;2511;2519;2527;2535;2543;2551;2559;2567;2620:3;2608:9;2599:7;2595:23;2591:33;2588:53;;;2637:1;2634;2627:12;2588:53;2682:23;;;-1:-1:-1;2748:37:17;2781:2;2766:18;;2748:37;:::i;:::-;2738:47;-1:-1:-1;2858:2:17;2843:18;;2830:32;;-1:-1:-1;2907:38:17;2941:2;2926:18;;2907:38;:::i;:::-;2897:48;-1:-1:-1;3018:3:17;3003:19;;2990:33;;-1:-1:-1;3122:3:17;3107:19;;3094:33;;-1:-1:-1;3172:38:17;3205:3;3190:19;;3172:38;:::i;:::-;3162:48;;3261:3;3250:9;3246:19;3233:33;3289:18;3281:6;3278:30;3275:50;;;3321:1;3318;3311:12;3275:50;3360:58;3410:7;3401:6;3390:9;3386:22;3360:58;:::i;:::-;3334:84;;3437:8;3427:18;;;3464:8;3454:18;;;2372:1106;;;;;;;;;;;:::o;3883:217::-;4030:2;4019:9;4012:21;3993:4;4050:44;4090:2;4079:9;4075:18;4067:6;4050:44;:::i;:::-;4042:52;3883:217;-1:-1:-1;;;3883:217:17:o;4105:127::-;4166:10;4161:3;4157:20;4154:1;4147:31;4197:4;4194:1;4187:15;4221:4;4218:1;4211:15;4237:380;4316:1;4312:12;;;;4359;;;4380:61;;4434:4;4426:6;4422:17;4412:27;;4380:61;4487:2;4479:6;4476:14;4456:18;4453:38;4450:161;;4533:10;4528:3;4524:20;4521:1;4514:31;4568:4;4565:1;4558:15;4596:4;4593:1;4586:15;4450:161;;4237:380;;;:::o;4747:517::-;4848:2;4843:3;4840:11;4837:421;;;4884:5;4881:1;4874:16;4928:4;4925:1;4915:18;4998:2;4986:10;4982:19;4979:1;4975:27;4969:4;4965:38;5034:4;5022:10;5019:20;5016:47;;;-1:-1:-1;5057:4:17;5016:47;5112:2;5107:3;5103:12;5100:1;5096:20;5090:4;5086:31;5076:41;;5167:81;5185:2;5178:5;5175:13;5167:81;;;5244:1;5230:16;;5211:1;5200:13;5167:81;;;5171:3;;4837:421;4747:517;;;:::o;5440:1194::-;5562:18;5557:3;5554:27;5551:53;;;5584:18;;:::i;:::-;5613:93;5702:3;5662:38;5694:4;5688:11;5662:38;:::i;:::-;5656:4;5613:93;:::i;:::-;5732:1;5757:2;5752:3;5749:11;5774:1;5769:607;;;;6420:1;6437:3;6434:93;;;-1:-1:-1;6493:19:17;;;6480:33;6434:93;-1:-1:-1;;5397:1:17;5393:11;;;5389:24;5385:29;5375:40;5421:1;5417:11;;;5372:57;6540:78;;5742:886;;5769:607;4694:1;4687:14;;;4731:4;4718:18;;-1:-1:-1;;5805:17:17;;;5919:229;5933:7;5930:1;5927:14;5919:229;;;6022:19;;;6009:33;5994:49;;6129:4;6114:20;;;;6082:1;6070:14;;;;5949:12;5919:229;;;5923:3;6176;6167:7;6164:16;6161:159;;;6300:1;6296:6;6290:3;6284;6281:1;6277:11;6273:21;6269:34;6265:39;6252:9;6247:3;6243:19;6230:33;6226:79;6218:6;6211:95;6161:159;;;6363:1;6357:3;6354:1;6350:11;6346:19;6340:4;6333:33;5742:886;;5440:1194;;;:::o;6639:795::-;6765:3;6794:1;6827:6;6821:13;6857:36;6883:9;6857:36;:::i;:::-;6924:1;6909:17;;6935:133;;;;7082:1;7077:332;;;;6902:507;;6935:133;-1:-1:-1;;6968:24:17;;6956:37;;7041:14;;7034:22;7022:35;;7013:45;;;-1:-1:-1;6935:133:17;;7077:332;7108:6;7105:1;7098:17;7156:4;7153:1;7143:18;7183:1;7197:166;7211:6;7208:1;7205:13;7197:166;;;7291:14;;7278:11;;;7271:35;7347:1;7334:15;;;;7233:4;7226:12;7197:166;;;7201:3;;7392:6;7387:3;7383:16;7376:23;;6902:507;-1:-1:-1;7425:3:17;;6639:795;-1:-1:-1;;;;;6639:795:17:o;7439:1295::-;7563:3;7557:10;7590:18;7582:6;7579:30;7576:56;;;7612:18;;:::i;:::-;7641:96;7730:6;7690:38;7722:4;7716:11;7690:38;:::i;:::-;7684:4;7641:96;:::i;:::-;7786:4;7817:2;7806:14;;7834:1;7829:648;;;;8521:1;8538:6;8535:89;;;-1:-1:-1;8590:19:17;;;8584:26;8535:89;-1:-1:-1;;5397:1:17;5393:11;;;5389:24;5385:29;5375:40;5421:1;5417:11;;;5372:57;8637:81;;7799:929;;7829:648;4694:1;4687:14;;;4731:4;4718:18;;-1:-1:-1;;7865:20:17;;;7982:222;7996:7;7993:1;7990:14;7982:222;;;8078:19;;;8072:26;8057:42;;8185:4;8170:20;;;;8138:1;8126:14;;;;8012:12;7982:222;;;7986:3;8232:6;8223:7;8220:19;8217:201;;;8293:19;;;8287:26;-1:-1:-1;;8376:1:17;8372:14;;;8388:3;8368:24;8364:37;8360:42;8345:58;8330:74;;8217:201;-1:-1:-1;;;;8464:1:17;8448:14;;;8444:22;8431:36;;-1:-1:-1;7439:1295:17:o;8739:765::-;9034:6;9023:9;9016:25;9077:6;9072:2;9061:9;9057:18;9050:34;9132:10;9124:6;9120:23;9115:2;9104:9;9100:18;9093:51;9180:6;9175:2;9164:9;9160:18;9153:34;9224:6;9218:3;9207:9;9203:19;9196:35;9268:3;9262;9251:9;9247:19;9240:32;9309:6;9303:3;9292:9;9288:19;9281:35;9367:6;9359;9353:3;9342:9;9338:19;9325:49;9424:1;9394:22;;;9418:3;9390:32;;;9383:43;;;;9487:2;9466:15;;;-1:-1:-1;;9462:29:17;9447:45;9443:55;;8739:765;-1:-1:-1;;;;;;8739:765:17:o" + }, + "methodIdentifiers": { + "depositForBurnWithHook(uint256,uint32,bytes32,address,bytes32,uint256,uint32,bytes)": "779b432d", + "lastBurnCall()": "599d38f3", + "reenter()": "a0fe97e3", + "reenterData()": "e150ef49", + "reenterTarget()": "cc6e8454", + "setReenter(address,bytes)": "02bcc1dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"minFinalityThreshold\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"DepositForBurn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"minFinalityThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"depositForBurnWithHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBurnCall\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"minFinalityThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reenter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reenterData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reenterTarget\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setReenter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockTokenMessengerV2.sol\":\"MockTokenMessengerV2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x304d732678032a9781ae85c8f204c8fba3d3a5e31c02616964e75cfdc5049098\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://299ced486011781dc98f638059678323c03079fefae1482abaa2135b22fa92d0\",\"dweb:/ipfs/QmbZNbcPTBxNvwChavN2kkZZs7xHhYL7mv51KrxMhsMs3j\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/mocks/MockTokenMessengerV2.sol\":{\"keccak256\":\"0xef20cff04a0496748fce1302558801e0e05f4bd4250d41af6c249dedd872bcb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9eded77fe27a11859fd427235334b3c11cd30898ab40629a5c4cd4fc07b002f4\",\"dweb:/ipfs/Qmb2RLEcT4UzjBiXwXyu9PUPYcgAFDcVrNEvAu6e7CkEaL\"]}},\"version\":1}" + } + }, + "contracts/PerUserCctpSettlement.sol": { + "PerUserCctpSettlement": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_usdc", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenMessenger", + "type": "address" + }, + { + "internalType": "address", + "name": "_ethereumMintRecipient", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ReentrancyGuardReentrantCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usdcAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "mintRecipient", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "destinationCaller", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "maxFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "minFinalityThreshold", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "forwardHookData", + "type": "bytes32" + } + ], + "name": "UsdcSweptAndForwarded", + "type": "event" + }, + { + "inputs": [], + "name": "DESTINATION_CALLER", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ETHEREUM_DESTINATION_DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FORWARD_HOOK_DATA", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ethereumMintRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintRecipientBytes32", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usdcAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFee", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "minFinalityThreshold", + "type": "uint32" + } + ], + "name": "sweepUsdc", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tokenMessenger", + "outputs": [ + { + "internalType": "contract ITokenMessengerV2", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "usdc", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": { + "@_1362": { + "entryPoint": null, + "id": 1362, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_1697": { + "entryPoint": null, + "id": 1697, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@_addressToBytes32_1799": { + "entryPoint": null, + "id": 1799, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_reentrancyGuardStorageSlot_1442": { + "entryPoint": null, + "id": 1442, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@getUint256Slot_1511": { + "entryPoint": null, + "id": 1511, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_address_fromMemory": { + "entryPoint": 339, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_addresst_address_fromMemory": { + "entryPoint": 366, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_encode_tuple_t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_a6664b97aef19c137d44ec81dfc0c0cc28a2c3470357b125208345a2c048425d__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:1609:17", + "nodeType": "YulBlock", + "src": "0:1609:17", + "statements": [ + { + "nativeSrc": "6:3:17", + "nodeType": "YulBlock", + "src": "6:3:17", + "statements": [] + }, + { + "body": { + "nativeSrc": "74:117:17", + "nodeType": "YulBlock", + "src": "74:117:17", + "statements": [ + { + "nativeSrc": "84:22:17", + "nodeType": "YulAssignment", + "src": "84:22:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "99:6:17", + "nodeType": "YulIdentifier", + "src": "99:6:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "93:5:17", + "nodeType": "YulIdentifier", + "src": "93:5:17" + }, + "nativeSrc": "93:13:17", + "nodeType": "YulFunctionCall", + "src": "93:13:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "84:5:17", + "nodeType": "YulIdentifier", + "src": "84:5:17" + } + ] + }, + { + "body": { + "nativeSrc": "169:16:17", + "nodeType": "YulBlock", + "src": "169:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "178:1:17", + "nodeType": "YulLiteral", + "src": "178:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "181:1:17", + "nodeType": "YulLiteral", + "src": "181:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "171:6:17", + "nodeType": "YulIdentifier", + "src": "171:6:17" + }, + "nativeSrc": "171:12:17", + "nodeType": "YulFunctionCall", + "src": "171:12:17" + }, + "nativeSrc": "171:12:17", + "nodeType": "YulExpressionStatement", + "src": "171:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "128:5:17", + "nodeType": "YulIdentifier", + "src": "128:5:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "139:5:17", + "nodeType": "YulIdentifier", + "src": "139:5:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "154:3:17", + "nodeType": "YulLiteral", + "src": "154:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "159:1:17", + "nodeType": "YulLiteral", + "src": "159:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "150:3:17", + "nodeType": "YulIdentifier", + "src": "150:3:17" + }, + "nativeSrc": "150:11:17", + "nodeType": "YulFunctionCall", + "src": "150:11:17" + }, + { + "kind": "number", + "nativeSrc": "163:1:17", + "nodeType": "YulLiteral", + "src": "163:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "146:3:17", + "nodeType": "YulIdentifier", + "src": "146:3:17" + }, + "nativeSrc": "146:19:17", + "nodeType": "YulFunctionCall", + "src": "146:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "135:3:17", + "nodeType": "YulIdentifier", + "src": "135:3:17" + }, + "nativeSrc": "135:31:17", + "nodeType": "YulFunctionCall", + "src": "135:31:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "125:2:17", + "nodeType": "YulIdentifier", + "src": "125:2:17" + }, + "nativeSrc": "125:42:17", + "nodeType": "YulFunctionCall", + "src": "125:42:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "118:6:17", + "nodeType": "YulIdentifier", + "src": "118:6:17" + }, + "nativeSrc": "118:50:17", + "nodeType": "YulFunctionCall", + "src": "118:50:17" + }, + "nativeSrc": "115:70:17", + "nodeType": "YulIf", + "src": "115:70:17" + } + ] + }, + "name": "abi_decode_address_fromMemory", + "nativeSrc": "14:177:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "53:6:17", + "nodeType": "YulTypedName", + "src": "53:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "64:5:17", + "nodeType": "YulTypedName", + "src": "64:5:17", + "type": "" + } + ], + "src": "14:177:17" + }, + { + "body": { + "nativeSrc": "311:263:17", + "nodeType": "YulBlock", + "src": "311:263:17", + "statements": [ + { + "body": { + "nativeSrc": "357:16:17", + "nodeType": "YulBlock", + "src": "357:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "366:1:17", + "nodeType": "YulLiteral", + "src": "366:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "369:1:17", + "nodeType": "YulLiteral", + "src": "369:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "359:6:17", + "nodeType": "YulIdentifier", + "src": "359:6:17" + }, + "nativeSrc": "359:12:17", + "nodeType": "YulFunctionCall", + "src": "359:12:17" + }, + "nativeSrc": "359:12:17", + "nodeType": "YulExpressionStatement", + "src": "359:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "332:7:17", + "nodeType": "YulIdentifier", + "src": "332:7:17" + }, + { + "name": "headStart", + "nativeSrc": "341:9:17", + "nodeType": "YulIdentifier", + "src": "341:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "328:3:17", + "nodeType": "YulIdentifier", + "src": "328:3:17" + }, + "nativeSrc": "328:23:17", + "nodeType": "YulFunctionCall", + "src": "328:23:17" + }, + { + "kind": "number", + "nativeSrc": "353:2:17", + "nodeType": "YulLiteral", + "src": "353:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "324:3:17", + "nodeType": "YulIdentifier", + "src": "324:3:17" + }, + "nativeSrc": "324:32:17", + "nodeType": "YulFunctionCall", + "src": "324:32:17" + }, + "nativeSrc": "321:52:17", + "nodeType": "YulIf", + "src": "321:52:17" + }, + { + "nativeSrc": "382:50:17", + "nodeType": "YulAssignment", + "src": "382:50:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "422:9:17", + "nodeType": "YulIdentifier", + "src": "422:9:17" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "392:29:17", + "nodeType": "YulIdentifier", + "src": "392:29:17" + }, + "nativeSrc": "392:40:17", + "nodeType": "YulFunctionCall", + "src": "392:40:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "382:6:17", + "nodeType": "YulIdentifier", + "src": "382:6:17" + } + ] + }, + { + "nativeSrc": "441:59:17", + "nodeType": "YulAssignment", + "src": "441:59:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "485:9:17", + "nodeType": "YulIdentifier", + "src": "485:9:17" + }, + { + "kind": "number", + "nativeSrc": "496:2:17", + "nodeType": "YulLiteral", + "src": "496:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "481:3:17", + "nodeType": "YulIdentifier", + "src": "481:3:17" + }, + "nativeSrc": "481:18:17", + "nodeType": "YulFunctionCall", + "src": "481:18:17" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "451:29:17", + "nodeType": "YulIdentifier", + "src": "451:29:17" + }, + "nativeSrc": "451:49:17", + "nodeType": "YulFunctionCall", + "src": "451:49:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "441:6:17", + "nodeType": "YulIdentifier", + "src": "441:6:17" + } + ] + }, + { + "nativeSrc": "509:59:17", + "nodeType": "YulAssignment", + "src": "509:59:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "553:9:17", + "nodeType": "YulIdentifier", + "src": "553:9:17" + }, + { + "kind": "number", + "nativeSrc": "564:2:17", + "nodeType": "YulLiteral", + "src": "564:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "549:3:17", + "nodeType": "YulIdentifier", + "src": "549:3:17" + }, + "nativeSrc": "549:18:17", + "nodeType": "YulFunctionCall", + "src": "549:18:17" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "519:29:17", + "nodeType": "YulIdentifier", + "src": "519:29:17" + }, + "nativeSrc": "519:49:17", + "nodeType": "YulFunctionCall", + "src": "519:49:17" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "509:6:17", + "nodeType": "YulIdentifier", + "src": "509:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_address_fromMemory", + "nativeSrc": "196:378:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "261:9:17", + "nodeType": "YulTypedName", + "src": "261:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "272:7:17", + "nodeType": "YulTypedName", + "src": "272:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "284:6:17", + "nodeType": "YulTypedName", + "src": "284:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "292:6:17", + "nodeType": "YulTypedName", + "src": "292:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "300:6:17", + "nodeType": "YulTypedName", + "src": "300:6:17", + "type": "" + } + ], + "src": "196:378:17" + }, + { + "body": { + "nativeSrc": "753:162:17", + "nodeType": "YulBlock", + "src": "753:162:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "770:9:17", + "nodeType": "YulIdentifier", + "src": "770:9:17" + }, + { + "kind": "number", + "nativeSrc": "781:2:17", + "nodeType": "YulLiteral", + "src": "781:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "763:6:17", + "nodeType": "YulIdentifier", + "src": "763:6:17" + }, + "nativeSrc": "763:21:17", + "nodeType": "YulFunctionCall", + "src": "763:21:17" + }, + "nativeSrc": "763:21:17", + "nodeType": "YulExpressionStatement", + "src": "763:21:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "804:9:17", + "nodeType": "YulIdentifier", + "src": "804:9:17" + }, + { + "kind": "number", + "nativeSrc": "815:2:17", + "nodeType": "YulLiteral", + "src": "815:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "800:3:17", + "nodeType": "YulIdentifier", + "src": "800:3:17" + }, + "nativeSrc": "800:18:17", + "nodeType": "YulFunctionCall", + "src": "800:18:17" + }, + { + "kind": "number", + "nativeSrc": "820:2:17", + "nodeType": "YulLiteral", + "src": "820:2:17", + "type": "", + "value": "12" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "793:6:17", + "nodeType": "YulIdentifier", + "src": "793:6:17" + }, + "nativeSrc": "793:30:17", + "nodeType": "YulFunctionCall", + "src": "793:30:17" + }, + "nativeSrc": "793:30:17", + "nodeType": "YulExpressionStatement", + "src": "793:30:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "843:9:17", + "nodeType": "YulIdentifier", + "src": "843:9:17" + }, + { + "kind": "number", + "nativeSrc": "854:2:17", + "nodeType": "YulLiteral", + "src": "854:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "839:3:17", + "nodeType": "YulIdentifier", + "src": "839:3:17" + }, + "nativeSrc": "839:18:17", + "nodeType": "YulFunctionCall", + "src": "839:18:17" + }, + { + "hexValue": "496e76616c69642055534443", + "kind": "string", + "nativeSrc": "859:14:17", + "nodeType": "YulLiteral", + "src": "859:14:17", + "type": "", + "value": "Invalid USDC" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "832:6:17", + "nodeType": "YulIdentifier", + "src": "832:6:17" + }, + "nativeSrc": "832:42:17", + "nodeType": "YulFunctionCall", + "src": "832:42:17" + }, + "nativeSrc": "832:42:17", + "nodeType": "YulExpressionStatement", + "src": "832:42:17" + }, + { + "nativeSrc": "883:26:17", + "nodeType": "YulAssignment", + "src": "883:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "895:9:17", + "nodeType": "YulIdentifier", + "src": "895:9:17" + }, + { + "kind": "number", + "nativeSrc": "906:2:17", + "nodeType": "YulLiteral", + "src": "906:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "891:3:17", + "nodeType": "YulIdentifier", + "src": "891:3:17" + }, + "nativeSrc": "891:18:17", + "nodeType": "YulFunctionCall", + "src": "891:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "883:4:17", + "nodeType": "YulIdentifier", + "src": "883:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "579:336:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "730:9:17", + "nodeType": "YulTypedName", + "src": "730:9:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "744:4:17", + "nodeType": "YulTypedName", + "src": "744:4:17", + "type": "" + } + ], + "src": "579:336:17" + }, + { + "body": { + "nativeSrc": "1094:167:17", + "nodeType": "YulBlock", + "src": "1094:167:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1111:9:17", + "nodeType": "YulIdentifier", + "src": "1111:9:17" + }, + { + "kind": "number", + "nativeSrc": "1122:2:17", + "nodeType": "YulLiteral", + "src": "1122:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1104:6:17", + "nodeType": "YulIdentifier", + "src": "1104:6:17" + }, + "nativeSrc": "1104:21:17", + "nodeType": "YulFunctionCall", + "src": "1104:21:17" + }, + "nativeSrc": "1104:21:17", + "nodeType": "YulExpressionStatement", + "src": "1104:21:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1145:9:17", + "nodeType": "YulIdentifier", + "src": "1145:9:17" + }, + { + "kind": "number", + "nativeSrc": "1156:2:17", + "nodeType": "YulLiteral", + "src": "1156:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1141:3:17", + "nodeType": "YulIdentifier", + "src": "1141:3:17" + }, + "nativeSrc": "1141:18:17", + "nodeType": "YulFunctionCall", + "src": "1141:18:17" + }, + { + "kind": "number", + "nativeSrc": "1161:2:17", + "nodeType": "YulLiteral", + "src": "1161:2:17", + "type": "", + "value": "17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1134:6:17", + "nodeType": "YulIdentifier", + "src": "1134:6:17" + }, + "nativeSrc": "1134:30:17", + "nodeType": "YulFunctionCall", + "src": "1134:30:17" + }, + "nativeSrc": "1134:30:17", + "nodeType": "YulExpressionStatement", + "src": "1134:30:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1184:9:17", + "nodeType": "YulIdentifier", + "src": "1184:9:17" + }, + { + "kind": "number", + "nativeSrc": "1195:2:17", + "nodeType": "YulLiteral", + "src": "1195:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1180:3:17", + "nodeType": "YulIdentifier", + "src": "1180:3:17" + }, + "nativeSrc": "1180:18:17", + "nodeType": "YulFunctionCall", + "src": "1180:18:17" + }, + { + "hexValue": "496e76616c6964206d657373656e676572", + "kind": "string", + "nativeSrc": "1200:19:17", + "nodeType": "YulLiteral", + "src": "1200:19:17", + "type": "", + "value": "Invalid messenger" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1173:6:17", + "nodeType": "YulIdentifier", + "src": "1173:6:17" + }, + "nativeSrc": "1173:47:17", + "nodeType": "YulFunctionCall", + "src": "1173:47:17" + }, + "nativeSrc": "1173:47:17", + "nodeType": "YulExpressionStatement", + "src": "1173:47:17" + }, + { + "nativeSrc": "1229:26:17", + "nodeType": "YulAssignment", + "src": "1229:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1241:9:17", + "nodeType": "YulIdentifier", + "src": "1241:9:17" + }, + { + "kind": "number", + "nativeSrc": "1252:2:17", + "nodeType": "YulLiteral", + "src": "1252:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1237:3:17", + "nodeType": "YulIdentifier", + "src": "1237:3:17" + }, + "nativeSrc": "1237:18:17", + "nodeType": "YulFunctionCall", + "src": "1237:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1229:4:17", + "nodeType": "YulIdentifier", + "src": "1229:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "920:341:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1071:9:17", + "nodeType": "YulTypedName", + "src": "1071:9:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1085:4:17", + "nodeType": "YulTypedName", + "src": "1085:4:17", + "type": "" + } + ], + "src": "920:341:17" + }, + { + "body": { + "nativeSrc": "1440:167:17", + "nodeType": "YulBlock", + "src": "1440:167:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1457:9:17", + "nodeType": "YulIdentifier", + "src": "1457:9:17" + }, + { + "kind": "number", + "nativeSrc": "1468:2:17", + "nodeType": "YulLiteral", + "src": "1468:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1450:6:17", + "nodeType": "YulIdentifier", + "src": "1450:6:17" + }, + "nativeSrc": "1450:21:17", + "nodeType": "YulFunctionCall", + "src": "1450:21:17" + }, + "nativeSrc": "1450:21:17", + "nodeType": "YulExpressionStatement", + "src": "1450:21:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1491:9:17", + "nodeType": "YulIdentifier", + "src": "1491:9:17" + }, + { + "kind": "number", + "nativeSrc": "1502:2:17", + "nodeType": "YulLiteral", + "src": "1502:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1487:3:17", + "nodeType": "YulIdentifier", + "src": "1487:3:17" + }, + "nativeSrc": "1487:18:17", + "nodeType": "YulFunctionCall", + "src": "1487:18:17" + }, + { + "kind": "number", + "nativeSrc": "1507:2:17", + "nodeType": "YulLiteral", + "src": "1507:2:17", + "type": "", + "value": "17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1480:6:17", + "nodeType": "YulIdentifier", + "src": "1480:6:17" + }, + "nativeSrc": "1480:30:17", + "nodeType": "YulFunctionCall", + "src": "1480:30:17" + }, + "nativeSrc": "1480:30:17", + "nodeType": "YulExpressionStatement", + "src": "1480:30:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1530:9:17", + "nodeType": "YulIdentifier", + "src": "1530:9:17" + }, + { + "kind": "number", + "nativeSrc": "1541:2:17", + "nodeType": "YulLiteral", + "src": "1541:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1526:3:17", + "nodeType": "YulIdentifier", + "src": "1526:3:17" + }, + "nativeSrc": "1526:18:17", + "nodeType": "YulFunctionCall", + "src": "1526:18:17" + }, + { + "hexValue": "496e76616c696420726563697069656e74", + "kind": "string", + "nativeSrc": "1546:19:17", + "nodeType": "YulLiteral", + "src": "1546:19:17", + "type": "", + "value": "Invalid recipient" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1519:6:17", + "nodeType": "YulIdentifier", + "src": "1519:6:17" + }, + "nativeSrc": "1519:47:17", + "nodeType": "YulFunctionCall", + "src": "1519:47:17" + }, + "nativeSrc": "1519:47:17", + "nodeType": "YulExpressionStatement", + "src": "1519:47:17" + }, + { + "nativeSrc": "1575:26:17", + "nodeType": "YulAssignment", + "src": "1575:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1587:9:17", + "nodeType": "YulIdentifier", + "src": "1587:9:17" + }, + { + "kind": "number", + "nativeSrc": "1598:2:17", + "nodeType": "YulLiteral", + "src": "1598:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1583:3:17", + "nodeType": "YulIdentifier", + "src": "1583:3:17" + }, + "nativeSrc": "1583:18:17", + "nodeType": "YulFunctionCall", + "src": "1583:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1575:4:17", + "nodeType": "YulIdentifier", + "src": "1575:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_a6664b97aef19c137d44ec81dfc0c0cc28a2c3470357b125208345a2c048425d__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "1266:341:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1417:9:17", + "nodeType": "YulTypedName", + "src": "1417:9:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1431:4:17", + "nodeType": "YulTypedName", + "src": "1431:4:17", + "type": "" + } + ], + "src": "1266:341:17" + } + ] + }, + "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n value2 := abi_decode_address_fromMemory(add(headStart, 64))\n }\n function abi_encode_tuple_t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 12)\n mstore(add(headStart, 64), \"Invalid USDC\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 17)\n mstore(add(headStart, 64), \"Invalid messenger\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_a6664b97aef19c137d44ec81dfc0c0cc28a2c3470357b125208345a2c048425d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 17)\n mstore(add(headStart, 64), \"Invalid recipient\")\n tail := add(headStart, 96)\n }\n}", + "id": 17, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "610100604052348015610010575f5ffd5b5060405161099938038061099983398101604081905261002f9161016e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03831661009d5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0382166100e75760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b6044820152606401610094565b6001600160a01b0381166101315760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610094565b6001600160a01b0392831660805290821660a0521660c081905260e0526101ae565b80516001600160a01b0381168114610169575f5ffd5b919050565b5f5f5f60608486031215610180575f5ffd5b61018984610153565b925061019760208501610153565b91506101a560408501610153565b90509250925092565b60805160a05160c05160e05161077c61021d5f395f818161016701528181610348015261047701525f608e01525f818160f9015281816102f001528181610317015261044101525f818160d201528181610202015281816102ce01528181610369015261041d015261077c5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063acef1c5711610058578063acef1c5714610130578063c6db9c871461014c578063c74ee95714610162578063dccf984614610189575f5ffd5b806309bdf150146100895780633e413bee146100cd57806346117830146100f457806362cef4b91461011b575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6101225f81565b6040519081526020016100c4565b6101375f81565b60405163ffffffff90911681526020016100c4565b6101226b18d8dd1c0b599bdc9dd85c9960a21b81565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b61019c610197366004610672565b61019e565b005b6101a6610524565b5f83116101eb5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561024f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027391906106b0565b10156102c15760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420555344432062616c616e63650000000000000060448201526064016101e2565b6103156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610552565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663779b432d845f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f5f1b88886b18d8dd1c0b599bdc9dd85c9960a21b5f1b6040516020016103b191815260200190565b6040516020818303038152906040526040518963ffffffff1660e01b81526004016103e39897969594939291906106c7565b5f604051808303815f87803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b506104669250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000005f610552565b604080518481525f602082018190527f00000000000000000000000000000000000000000000000000000000000000008284015260608201526080810184905263ffffffff831660a08201526b18d8dd1c0b599bdc9dd85c9960a21b60c0820152905133917f3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6919081900360e00190a261051f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b61052c6105cc565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61055e8383835f610610565b61051f5761056f83835f6001610610565b61059757604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b6105a48383836001610610565b61051f57604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361060e57604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661066657838315161561065a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f5f5f60608486031215610684575f5ffd5b8335925060208401359150604084013563ffffffff811681146106a5575f5ffd5b809150509250925092565b5f602082840312156106c0575f5ffd5b5051919050565b88815263ffffffff8816602082015286604082015260018060a01b03861660608201528460808201528360a082015263ffffffff831660c082015261010060e08201525f825180610100840152806020850161012085015e5f6101208285010152610120601f19601f830116840101915050999850505050505050505056fea2646970667358221220b76c50a6e2d835a1079f67de279f46d3362268b2a2daa5b5e1a88be179ff8e9164736f6c634300081c0033", + "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x999 CODESIZE SUB DUP1 PUSH2 0x999 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x16E JUMP JUMPDEST PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642055534443 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x24B73B30B634B21036B2B9B9B2B733B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x94 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x125B9D985B1A59081C9958DA5C1A595B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x94 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x80 MSTORE SWAP1 DUP3 AND PUSH1 0xA0 MSTORE AND PUSH1 0xC0 DUP2 SWAP1 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x1AE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x169 JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x180 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x189 DUP5 PUSH2 0x153 JUMP JUMPDEST SWAP3 POP PUSH2 0x197 PUSH1 0x20 DUP6 ADD PUSH2 0x153 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A5 PUSH1 0x40 DUP6 ADD PUSH2 0x153 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x77C PUSH2 0x21D PUSH0 CODECOPY PUSH0 DUP2 DUP2 PUSH2 0x167 ADD MSTORE DUP2 DUP2 PUSH2 0x348 ADD MSTORE PUSH2 0x477 ADD MSTORE PUSH0 PUSH1 0x8E ADD MSTORE PUSH0 DUP2 DUP2 PUSH1 0xF9 ADD MSTORE DUP2 DUP2 PUSH2 0x2F0 ADD MSTORE DUP2 DUP2 PUSH2 0x317 ADD MSTORE PUSH2 0x441 ADD MSTORE PUSH0 DUP2 DUP2 PUSH1 0xD2 ADD MSTORE DUP2 DUP2 PUSH2 0x202 ADD MSTORE DUP2 DUP2 PUSH2 0x2CE ADD MSTORE DUP2 DUP2 PUSH2 0x369 ADD MSTORE PUSH2 0x41D ADD MSTORE PUSH2 0x77C PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x85 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xACEF1C57 GT PUSH2 0x58 JUMPI DUP1 PUSH4 0xACEF1C57 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0xC6DB9C87 EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0xC74EE957 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xDCCF9846 EQ PUSH2 0x189 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 PUSH4 0x9BDF150 EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0x3E413BEE EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x46117830 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x62CEF4B9 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x137 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x122 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x672 JUMP JUMPDEST PUSH2 0x19E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1A6 PUSH2 0x524 JUMP JUMPDEST PUSH0 DUP4 GT PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x125B9D985B1A5908185B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x6B0 JUMP JUMPDEST LT ISZERO PUSH2 0x2C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420555344432062616C616E636500000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x315 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP6 PUSH2 0x552 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x779B432D DUP5 PUSH0 PUSH32 0x0 PUSH32 0x0 PUSH0 PUSH0 SHL DUP9 DUP9 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH0 SHL PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3B1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3E3 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6C7 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3FA JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x40C JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP PUSH2 0x466 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 POP PUSH32 0x0 PUSH0 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x3F298CACAEFADF0A6BFEF4DFEEAF3ECA0C68D70E5CB8F1B5288E7540A9E95ED6 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG2 PUSH2 0x51F PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x52C PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST PUSH2 0x55E DUP4 DUP4 DUP4 PUSH0 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH2 0x56F DUP4 DUP4 PUSH0 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x597 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x5A4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SLOAD PUSH1 0x2 SUB PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 DUP6 SWAP1 MSTORE SWAP2 PUSH1 0x20 DUP4 PUSH1 0x44 DUP2 DUP1 DUP12 GAS CALL SWAP3 POP PUSH1 0x1 PUSH0 MLOAD EQ DUP4 AND PUSH2 0x666 JUMPI DUP4 DUP4 ISZERO AND ISZERO PUSH2 0x65A JUMPI RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST PUSH0 DUP8 EXTCODESIZE GT RETURNDATASIZE ISZERO AND DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x40 MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x684 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6A5 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6C0 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP9 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE DUP5 PUSH1 0x80 DUP3 ADD MSTORE DUP4 PUSH1 0xA0 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x100 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 DUP3 MLOAD DUP1 PUSH2 0x100 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD PUSH2 0x120 DUP6 ADD MCOPY PUSH0 PUSH2 0x120 DUP3 DUP6 ADD ADD MSTORE PUSH2 0x120 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB7 PUSH13 0x50A6E2D835A1079F67DE279F46 0xD3 CALLDATASIZE 0x22 PUSH9 0xB2A2DAA5B5E1A88BE1 PUSH26 0xFF8E9164736F6C634300081C0033000000000000000000000000 ", + "sourceMap": "366:2451:12:-:0;;;1180:512;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2365:1:9;1505:66;2539;-1:-1:-1;;;;;1282:19:12;;1274:44;;;;-1:-1:-1;;;1274:44:12;;781:2:17;1274:44:12;;;763:21:17;820:2;800:18;;;793:30;-1:-1:-1;;;839:18:17;;;832:42;891:18;;1274:44:12;;;;;;;;;-1:-1:-1;;;;;1336:29:12;;1328:59;;;;-1:-1:-1;;;1328:59:12;;1122:2:17;1328:59:12;;;1104:21:17;1161:2;1141:18;;;1134:30;-1:-1:-1;;;1180:18:17;;;1173:47;1237:18;;1328:59:12;920:341:17;1328:59:12;-1:-1:-1;;;;;1405:36:12;;1397:66;;;;-1:-1:-1;;;1397:66:12;;1468:2:17;1397:66:12;;;1450:21:17;1507:2;1487:18;;;1480:30;-1:-1:-1;;;1526:18:17;;;1519:47;1583:18;;1397:66:12;1266:341:17;1397:66:12;-1:-1:-1;;;;;1474:20:12;;;;;1504:51;;;;;1565:46;;;;;1621:64;;366:2451;;14:177:17;93:13;;-1:-1:-1;;;;;135:31:17;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:378::-;284:6;292;300;353:2;341:9;332:7;328:23;324:32;321:52;;;369:1;366;359:12;321:52;392:40;422:9;392:40;:::i;:::-;382:50;;451:49;496:2;485:9;481:18;451:49;:::i;:::-;441:59;;519:49;564:2;553:9;549:18;519:49;:::i;:::-;509:59;;196:378;;;;;:::o;1266:341::-;366:2451:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@_nonReentrantAfter_1419": { + "entryPoint": null, + "id": 1419, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_nonReentrantBefore_1407": { + "entryPoint": 1316, + "id": 1407, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_nonReentrantBeforeView_1392": { + "entryPoint": 1484, + "id": 1392, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_reentrancyGuardEntered_1434": { + "entryPoint": null, + "id": 1434, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_reentrancyGuardStorageSlot_1442": { + "entryPoint": null, + "id": 1442, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_safeApprove_1299": { + "entryPoint": 1552, + "id": 1299, + "parameterSlots": 4, + "returnSlots": 1 + }, + "@DESTINATION_CALLER_1604": { + "entryPoint": null, + "id": 1604, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@ETHEREUM_DESTINATION_DOMAIN_1598": { + "entryPoint": null, + "id": 1598, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@ethereumMintRecipient_1615": { + "entryPoint": null, + "id": 1615, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@FORWARD_HOOK_DATA_1607": { + "entryPoint": null, + "id": 1607, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@forceApprove_1095": { + "entryPoint": 1362, + "id": 1095, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@getUint256Slot_1511": { + "entryPoint": null, + "id": 1511, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@mintRecipientBytes32_1617": { + "entryPoint": null, + "id": 1617, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@sweepUsdc_1780": { + "entryPoint": 414, + "id": 1780, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@tokenMessenger_1613": { + "entryPoint": null, + "id": 1613, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@usdc_1610": { + "entryPoint": null, + "id": 1610, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 1712, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_uint256t_uint32": { + "entryPoint": 1650, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_contract$_IERC20_$819__to_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_contract$_ITokenMessengerV2_$1899__to_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_2fd1dfd944df9898ee4c79794168926172c3d96d7664ff9919bb7080bb018af1__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_40a05d66d0175ecd11e5a65435b281d52a1c32bbc687760a717d83801a914a3c__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr__to_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 1735, + "id": null, + "parameterSlots": 9, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_bytes32_t_uint256_t_uint32_t_bytes32__to_t_uint256_t_uint32_t_bytes32_t_bytes32_t_uint256_t_uint32_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 8, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:4275:17", + "nodeType": "YulBlock", + "src": "0:4275:17", + "statements": [ + { + "nativeSrc": "6:3:17", + "nodeType": "YulBlock", + "src": "6:3:17", + "statements": [] + }, + { + "body": { + "nativeSrc": "115:102:17", + "nodeType": "YulBlock", + "src": "115:102:17", + "statements": [ + { + "nativeSrc": "125:26:17", + "nodeType": "YulAssignment", + "src": "125:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "137:9:17", + "nodeType": "YulIdentifier", + "src": "137:9:17" + }, + { + "kind": "number", + "nativeSrc": "148:2:17", + "nodeType": "YulLiteral", + "src": "148:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "133:3:17", + "nodeType": "YulIdentifier", + "src": "133:3:17" + }, + "nativeSrc": "133:18:17", + "nodeType": "YulFunctionCall", + "src": "133:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "125:4:17", + "nodeType": "YulIdentifier", + "src": "125:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "167:9:17", + "nodeType": "YulIdentifier", + "src": "167:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "182:6:17", + "nodeType": "YulIdentifier", + "src": "182:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "198:3:17", + "nodeType": "YulLiteral", + "src": "198:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "203:1:17", + "nodeType": "YulLiteral", + "src": "203:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "194:3:17", + "nodeType": "YulIdentifier", + "src": "194:3:17" + }, + "nativeSrc": "194:11:17", + "nodeType": "YulFunctionCall", + "src": "194:11:17" + }, + { + "kind": "number", + "nativeSrc": "207:1:17", + "nodeType": "YulLiteral", + "src": "207:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "190:3:17", + "nodeType": "YulIdentifier", + "src": "190:3:17" + }, + "nativeSrc": "190:19:17", + "nodeType": "YulFunctionCall", + "src": "190:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "178:3:17", + "nodeType": "YulIdentifier", + "src": "178:3:17" + }, + "nativeSrc": "178:32:17", + "nodeType": "YulFunctionCall", + "src": "178:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "160:6:17", + "nodeType": "YulIdentifier", + "src": "160:6:17" + }, + "nativeSrc": "160:51:17", + "nodeType": "YulFunctionCall", + "src": "160:51:17" + }, + "nativeSrc": "160:51:17", + "nodeType": "YulExpressionStatement", + "src": "160:51:17" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "14:203:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "84:9:17", + "nodeType": "YulTypedName", + "src": "84:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "95:6:17", + "nodeType": "YulTypedName", + "src": "95:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "106:4:17", + "nodeType": "YulTypedName", + "src": "106:4:17", + "type": "" + } + ], + "src": "14:203:17" + }, + { + "body": { + "nativeSrc": "337:102:17", + "nodeType": "YulBlock", + "src": "337:102:17", + "statements": [ + { + "nativeSrc": "347:26:17", + "nodeType": "YulAssignment", + "src": "347:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "359:9:17", + "nodeType": "YulIdentifier", + "src": "359:9:17" + }, + { + "kind": "number", + "nativeSrc": "370:2:17", + "nodeType": "YulLiteral", + "src": "370:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "355:3:17", + "nodeType": "YulIdentifier", + "src": "355:3:17" + }, + "nativeSrc": "355:18:17", + "nodeType": "YulFunctionCall", + "src": "355:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "347:4:17", + "nodeType": "YulIdentifier", + "src": "347:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "389:9:17", + "nodeType": "YulIdentifier", + "src": "389:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "404:6:17", + "nodeType": "YulIdentifier", + "src": "404:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "420:3:17", + "nodeType": "YulLiteral", + "src": "420:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "425:1:17", + "nodeType": "YulLiteral", + "src": "425:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "416:3:17", + "nodeType": "YulIdentifier", + "src": "416:3:17" + }, + "nativeSrc": "416:11:17", + "nodeType": "YulFunctionCall", + "src": "416:11:17" + }, + { + "kind": "number", + "nativeSrc": "429:1:17", + "nodeType": "YulLiteral", + "src": "429:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "412:3:17", + "nodeType": "YulIdentifier", + "src": "412:3:17" + }, + "nativeSrc": "412:19:17", + "nodeType": "YulFunctionCall", + "src": "412:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "400:3:17", + "nodeType": "YulIdentifier", + "src": "400:3:17" + }, + "nativeSrc": "400:32:17", + "nodeType": "YulFunctionCall", + "src": "400:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "382:6:17", + "nodeType": "YulIdentifier", + "src": "382:6:17" + }, + "nativeSrc": "382:51:17", + "nodeType": "YulFunctionCall", + "src": "382:51:17" + }, + "nativeSrc": "382:51:17", + "nodeType": "YulExpressionStatement", + "src": "382:51:17" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_IERC20_$819__to_t_address__fromStack_reversed", + "nativeSrc": "222:217:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "306:9:17", + "nodeType": "YulTypedName", + "src": "306:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "317:6:17", + "nodeType": "YulTypedName", + "src": "317:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "328:4:17", + "nodeType": "YulTypedName", + "src": "328:4:17", + "type": "" + } + ], + "src": "222:217:17" + }, + { + "body": { + "nativeSrc": "571:102:17", + "nodeType": "YulBlock", + "src": "571:102:17", + "statements": [ + { + "nativeSrc": "581:26:17", + "nodeType": "YulAssignment", + "src": "581:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "593:9:17", + "nodeType": "YulIdentifier", + "src": "593:9:17" + }, + { + "kind": "number", + "nativeSrc": "604:2:17", + "nodeType": "YulLiteral", + "src": "604:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "589:3:17", + "nodeType": "YulIdentifier", + "src": "589:3:17" + }, + "nativeSrc": "589:18:17", + "nodeType": "YulFunctionCall", + "src": "589:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "581:4:17", + "nodeType": "YulIdentifier", + "src": "581:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "623:9:17", + "nodeType": "YulIdentifier", + "src": "623:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "638:6:17", + "nodeType": "YulIdentifier", + "src": "638:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "654:3:17", + "nodeType": "YulLiteral", + "src": "654:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "659:1:17", + "nodeType": "YulLiteral", + "src": "659:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "650:3:17", + "nodeType": "YulIdentifier", + "src": "650:3:17" + }, + "nativeSrc": "650:11:17", + "nodeType": "YulFunctionCall", + "src": "650:11:17" + }, + { + "kind": "number", + "nativeSrc": "663:1:17", + "nodeType": "YulLiteral", + "src": "663:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "646:3:17", + "nodeType": "YulIdentifier", + "src": "646:3:17" + }, + "nativeSrc": "646:19:17", + "nodeType": "YulFunctionCall", + "src": "646:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "634:3:17", + "nodeType": "YulIdentifier", + "src": "634:3:17" + }, + "nativeSrc": "634:32:17", + "nodeType": "YulFunctionCall", + "src": "634:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "616:6:17", + "nodeType": "YulIdentifier", + "src": "616:6:17" + }, + "nativeSrc": "616:51:17", + "nodeType": "YulFunctionCall", + "src": "616:51:17" + }, + "nativeSrc": "616:51:17", + "nodeType": "YulExpressionStatement", + "src": "616:51:17" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_ITokenMessengerV2_$1899__to_t_address__fromStack_reversed", + "nativeSrc": "444:229:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "540:9:17", + "nodeType": "YulTypedName", + "src": "540:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "551:6:17", + "nodeType": "YulTypedName", + "src": "551:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "562:4:17", + "nodeType": "YulTypedName", + "src": "562:4:17", + "type": "" + } + ], + "src": "444:229:17" + }, + { + "body": { + "nativeSrc": "779:76:17", + "nodeType": "YulBlock", + "src": "779:76:17", + "statements": [ + { + "nativeSrc": "789:26:17", + "nodeType": "YulAssignment", + "src": "789:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "801:9:17", + "nodeType": "YulIdentifier", + "src": "801:9:17" + }, + { + "kind": "number", + "nativeSrc": "812:2:17", + "nodeType": "YulLiteral", + "src": "812:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "797:3:17", + "nodeType": "YulIdentifier", + "src": "797:3:17" + }, + "nativeSrc": "797:18:17", + "nodeType": "YulFunctionCall", + "src": "797:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "789:4:17", + "nodeType": "YulIdentifier", + "src": "789:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "831:9:17", + "nodeType": "YulIdentifier", + "src": "831:9:17" + }, + { + "name": "value0", + "nativeSrc": "842:6:17", + "nodeType": "YulIdentifier", + "src": "842:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "824:6:17", + "nodeType": "YulIdentifier", + "src": "824:6:17" + }, + "nativeSrc": "824:25:17", + "nodeType": "YulFunctionCall", + "src": "824:25:17" + }, + "nativeSrc": "824:25:17", + "nodeType": "YulExpressionStatement", + "src": "824:25:17" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nativeSrc": "678:177:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "748:9:17", + "nodeType": "YulTypedName", + "src": "748:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "759:6:17", + "nodeType": "YulTypedName", + "src": "759:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "770:4:17", + "nodeType": "YulTypedName", + "src": "770:4:17", + "type": "" + } + ], + "src": "678:177:17" + }, + { + "body": { + "nativeSrc": "959:93:17", + "nodeType": "YulBlock", + "src": "959:93:17", + "statements": [ + { + "nativeSrc": "969:26:17", + "nodeType": "YulAssignment", + "src": "969:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "981:9:17", + "nodeType": "YulIdentifier", + "src": "981:9:17" + }, + { + "kind": "number", + "nativeSrc": "992:2:17", + "nodeType": "YulLiteral", + "src": "992:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "977:3:17", + "nodeType": "YulIdentifier", + "src": "977:3:17" + }, + "nativeSrc": "977:18:17", + "nodeType": "YulFunctionCall", + "src": "977:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "969:4:17", + "nodeType": "YulIdentifier", + "src": "969:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1011:9:17", + "nodeType": "YulIdentifier", + "src": "1011:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1026:6:17", + "nodeType": "YulIdentifier", + "src": "1026:6:17" + }, + { + "kind": "number", + "nativeSrc": "1034:10:17", + "nodeType": "YulLiteral", + "src": "1034:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1022:3:17", + "nodeType": "YulIdentifier", + "src": "1022:3:17" + }, + "nativeSrc": "1022:23:17", + "nodeType": "YulFunctionCall", + "src": "1022:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1004:6:17", + "nodeType": "YulIdentifier", + "src": "1004:6:17" + }, + "nativeSrc": "1004:42:17", + "nodeType": "YulFunctionCall", + "src": "1004:42:17" + }, + "nativeSrc": "1004:42:17", + "nodeType": "YulExpressionStatement", + "src": "1004:42:17" + } + ] + }, + "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", + "nativeSrc": "860:192:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "928:9:17", + "nodeType": "YulTypedName", + "src": "928:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "939:6:17", + "nodeType": "YulTypedName", + "src": "939:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "950:4:17", + "nodeType": "YulTypedName", + "src": "950:4:17", + "type": "" + } + ], + "src": "860:192:17" + }, + { + "body": { + "nativeSrc": "1160:415:17", + "nodeType": "YulBlock", + "src": "1160:415:17", + "statements": [ + { + "body": { + "nativeSrc": "1206:16:17", + "nodeType": "YulBlock", + "src": "1206:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1215:1:17", + "nodeType": "YulLiteral", + "src": "1215:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1218:1:17", + "nodeType": "YulLiteral", + "src": "1218:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1208:6:17", + "nodeType": "YulIdentifier", + "src": "1208:6:17" + }, + "nativeSrc": "1208:12:17", + "nodeType": "YulFunctionCall", + "src": "1208:12:17" + }, + "nativeSrc": "1208:12:17", + "nodeType": "YulExpressionStatement", + "src": "1208:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1181:7:17", + "nodeType": "YulIdentifier", + "src": "1181:7:17" + }, + { + "name": "headStart", + "nativeSrc": "1190:9:17", + "nodeType": "YulIdentifier", + "src": "1190:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1177:3:17", + "nodeType": "YulIdentifier", + "src": "1177:3:17" + }, + "nativeSrc": "1177:23:17", + "nodeType": "YulFunctionCall", + "src": "1177:23:17" + }, + { + "kind": "number", + "nativeSrc": "1202:2:17", + "nodeType": "YulLiteral", + "src": "1202:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1173:3:17", + "nodeType": "YulIdentifier", + "src": "1173:3:17" + }, + "nativeSrc": "1173:32:17", + "nodeType": "YulFunctionCall", + "src": "1173:32:17" + }, + "nativeSrc": "1170:52:17", + "nodeType": "YulIf", + "src": "1170:52:17" + }, + { + "nativeSrc": "1231:14:17", + "nodeType": "YulVariableDeclaration", + "src": "1231:14:17", + "value": { + "kind": "number", + "nativeSrc": "1244:1:17", + "nodeType": "YulLiteral", + "src": "1244:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1235:5:17", + "nodeType": "YulTypedName", + "src": "1235:5:17", + "type": "" + } + ] + }, + { + "nativeSrc": "1254:32:17", + "nodeType": "YulAssignment", + "src": "1254:32:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1276:9:17", + "nodeType": "YulIdentifier", + "src": "1276:9:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1263:12:17", + "nodeType": "YulIdentifier", + "src": "1263:12:17" + }, + "nativeSrc": "1263:23:17", + "nodeType": "YulFunctionCall", + "src": "1263:23:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "1254:5:17", + "nodeType": "YulIdentifier", + "src": "1254:5:17" + } + ] + }, + { + "nativeSrc": "1295:15:17", + "nodeType": "YulAssignment", + "src": "1295:15:17", + "value": { + "name": "value", + "nativeSrc": "1305:5:17", + "nodeType": "YulIdentifier", + "src": "1305:5:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1295:6:17", + "nodeType": "YulIdentifier", + "src": "1295:6:17" + } + ] + }, + { + "nativeSrc": "1319:16:17", + "nodeType": "YulVariableDeclaration", + "src": "1319:16:17", + "value": { + "kind": "number", + "nativeSrc": "1334:1:17", + "nodeType": "YulLiteral", + "src": "1334:1:17", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "1323:7:17", + "nodeType": "YulTypedName", + "src": "1323:7:17", + "type": "" + } + ] + }, + { + "nativeSrc": "1344:43:17", + "nodeType": "YulAssignment", + "src": "1344:43:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1372:9:17", + "nodeType": "YulIdentifier", + "src": "1372:9:17" + }, + { + "kind": "number", + "nativeSrc": "1383:2:17", + "nodeType": "YulLiteral", + "src": "1383:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1368:3:17", + "nodeType": "YulIdentifier", + "src": "1368:3:17" + }, + "nativeSrc": "1368:18:17", + "nodeType": "YulFunctionCall", + "src": "1368:18:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1355:12:17", + "nodeType": "YulIdentifier", + "src": "1355:12:17" + }, + "nativeSrc": "1355:32:17", + "nodeType": "YulFunctionCall", + "src": "1355:32:17" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "1344:7:17", + "nodeType": "YulIdentifier", + "src": "1344:7:17" + } + ] + }, + { + "nativeSrc": "1396:17:17", + "nodeType": "YulAssignment", + "src": "1396:17:17", + "value": { + "name": "value_1", + "nativeSrc": "1406:7:17", + "nodeType": "YulIdentifier", + "src": "1406:7:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "1396:6:17", + "nodeType": "YulIdentifier", + "src": "1396:6:17" + } + ] + }, + { + "nativeSrc": "1422:47:17", + "nodeType": "YulVariableDeclaration", + "src": "1422:47:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1454:9:17", + "nodeType": "YulIdentifier", + "src": "1454:9:17" + }, + { + "kind": "number", + "nativeSrc": "1465:2:17", + "nodeType": "YulLiteral", + "src": "1465:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1450:3:17", + "nodeType": "YulIdentifier", + "src": "1450:3:17" + }, + "nativeSrc": "1450:18:17", + "nodeType": "YulFunctionCall", + "src": "1450:18:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1437:12:17", + "nodeType": "YulIdentifier", + "src": "1437:12:17" + }, + "nativeSrc": "1437:32:17", + "nodeType": "YulFunctionCall", + "src": "1437:32:17" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "1426:7:17", + "nodeType": "YulTypedName", + "src": "1426:7:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1527:16:17", + "nodeType": "YulBlock", + "src": "1527:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1536:1:17", + "nodeType": "YulLiteral", + "src": "1536:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1539:1:17", + "nodeType": "YulLiteral", + "src": "1539:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1529:6:17", + "nodeType": "YulIdentifier", + "src": "1529:6:17" + }, + "nativeSrc": "1529:12:17", + "nodeType": "YulFunctionCall", + "src": "1529:12:17" + }, + "nativeSrc": "1529:12:17", + "nodeType": "YulExpressionStatement", + "src": "1529:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value_2", + "nativeSrc": "1491:7:17", + "nodeType": "YulIdentifier", + "src": "1491:7:17" + }, + { + "arguments": [ + { + "name": "value_2", + "nativeSrc": "1504:7:17", + "nodeType": "YulIdentifier", + "src": "1504:7:17" + }, + { + "kind": "number", + "nativeSrc": "1513:10:17", + "nodeType": "YulLiteral", + "src": "1513:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1500:3:17", + "nodeType": "YulIdentifier", + "src": "1500:3:17" + }, + "nativeSrc": "1500:24:17", + "nodeType": "YulFunctionCall", + "src": "1500:24:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1488:2:17", + "nodeType": "YulIdentifier", + "src": "1488:2:17" + }, + "nativeSrc": "1488:37:17", + "nodeType": "YulFunctionCall", + "src": "1488:37:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1481:6:17", + "nodeType": "YulIdentifier", + "src": "1481:6:17" + }, + "nativeSrc": "1481:45:17", + "nodeType": "YulFunctionCall", + "src": "1481:45:17" + }, + "nativeSrc": "1478:65:17", + "nodeType": "YulIf", + "src": "1478:65:17" + }, + { + "nativeSrc": "1552:17:17", + "nodeType": "YulAssignment", + "src": "1552:17:17", + "value": { + "name": "value_2", + "nativeSrc": "1562:7:17", + "nodeType": "YulIdentifier", + "src": "1562:7:17" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "1552:6:17", + "nodeType": "YulIdentifier", + "src": "1552:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256t_uint32", + "nativeSrc": "1057:518:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1110:9:17", + "nodeType": "YulTypedName", + "src": "1110:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1121:7:17", + "nodeType": "YulTypedName", + "src": "1121:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1133:6:17", + "nodeType": "YulTypedName", + "src": "1133:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1141:6:17", + "nodeType": "YulTypedName", + "src": "1141:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1149:6:17", + "nodeType": "YulTypedName", + "src": "1149:6:17", + "type": "" + } + ], + "src": "1057:518:17" + }, + { + "body": { + "nativeSrc": "1754:164:17", + "nodeType": "YulBlock", + "src": "1754:164:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1771:9:17", + "nodeType": "YulIdentifier", + "src": "1771:9:17" + }, + { + "kind": "number", + "nativeSrc": "1782:2:17", + "nodeType": "YulLiteral", + "src": "1782:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1764:6:17", + "nodeType": "YulIdentifier", + "src": "1764:6:17" + }, + "nativeSrc": "1764:21:17", + "nodeType": "YulFunctionCall", + "src": "1764:21:17" + }, + "nativeSrc": "1764:21:17", + "nodeType": "YulExpressionStatement", + "src": "1764:21:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1805:9:17", + "nodeType": "YulIdentifier", + "src": "1805:9:17" + }, + { + "kind": "number", + "nativeSrc": "1816:2:17", + "nodeType": "YulLiteral", + "src": "1816:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1801:3:17", + "nodeType": "YulIdentifier", + "src": "1801:3:17" + }, + "nativeSrc": "1801:18:17", + "nodeType": "YulFunctionCall", + "src": "1801:18:17" + }, + { + "kind": "number", + "nativeSrc": "1821:2:17", + "nodeType": "YulLiteral", + "src": "1821:2:17", + "type": "", + "value": "14" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1794:6:17", + "nodeType": "YulIdentifier", + "src": "1794:6:17" + }, + "nativeSrc": "1794:30:17", + "nodeType": "YulFunctionCall", + "src": "1794:30:17" + }, + "nativeSrc": "1794:30:17", + "nodeType": "YulExpressionStatement", + "src": "1794:30:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1844:9:17", + "nodeType": "YulIdentifier", + "src": "1844:9:17" + }, + { + "kind": "number", + "nativeSrc": "1855:2:17", + "nodeType": "YulLiteral", + "src": "1855:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1840:3:17", + "nodeType": "YulIdentifier", + "src": "1840:3:17" + }, + "nativeSrc": "1840:18:17", + "nodeType": "YulFunctionCall", + "src": "1840:18:17" + }, + { + "hexValue": "496e76616c696420616d6f756e74", + "kind": "string", + "nativeSrc": "1860:16:17", + "nodeType": "YulLiteral", + "src": "1860:16:17", + "type": "", + "value": "Invalid amount" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1833:6:17", + "nodeType": "YulIdentifier", + "src": "1833:6:17" + }, + "nativeSrc": "1833:44:17", + "nodeType": "YulFunctionCall", + "src": "1833:44:17" + }, + "nativeSrc": "1833:44:17", + "nodeType": "YulExpressionStatement", + "src": "1833:44:17" + }, + { + "nativeSrc": "1886:26:17", + "nodeType": "YulAssignment", + "src": "1886:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1898:9:17", + "nodeType": "YulIdentifier", + "src": "1898:9:17" + }, + { + "kind": "number", + "nativeSrc": "1909:2:17", + "nodeType": "YulLiteral", + "src": "1909:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1894:3:17", + "nodeType": "YulIdentifier", + "src": "1894:3:17" + }, + "nativeSrc": "1894:18:17", + "nodeType": "YulFunctionCall", + "src": "1894:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1886:4:17", + "nodeType": "YulIdentifier", + "src": "1886:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_2fd1dfd944df9898ee4c79794168926172c3d96d7664ff9919bb7080bb018af1__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "1580:338:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1731:9:17", + "nodeType": "YulTypedName", + "src": "1731:9:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1745:4:17", + "nodeType": "YulTypedName", + "src": "1745:4:17", + "type": "" + } + ], + "src": "1580:338:17" + }, + { + "body": { + "nativeSrc": "2004:103:17", + "nodeType": "YulBlock", + "src": "2004:103:17", + "statements": [ + { + "body": { + "nativeSrc": "2050:16:17", + "nodeType": "YulBlock", + "src": "2050:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2059:1:17", + "nodeType": "YulLiteral", + "src": "2059:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2062:1:17", + "nodeType": "YulLiteral", + "src": "2062:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2052:6:17", + "nodeType": "YulIdentifier", + "src": "2052:6:17" + }, + "nativeSrc": "2052:12:17", + "nodeType": "YulFunctionCall", + "src": "2052:12:17" + }, + "nativeSrc": "2052:12:17", + "nodeType": "YulExpressionStatement", + "src": "2052:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2025:7:17", + "nodeType": "YulIdentifier", + "src": "2025:7:17" + }, + { + "name": "headStart", + "nativeSrc": "2034:9:17", + "nodeType": "YulIdentifier", + "src": "2034:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2021:3:17", + "nodeType": "YulIdentifier", + "src": "2021:3:17" + }, + "nativeSrc": "2021:23:17", + "nodeType": "YulFunctionCall", + "src": "2021:23:17" + }, + { + "kind": "number", + "nativeSrc": "2046:2:17", + "nodeType": "YulLiteral", + "src": "2046:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2017:3:17", + "nodeType": "YulIdentifier", + "src": "2017:3:17" + }, + "nativeSrc": "2017:32:17", + "nodeType": "YulFunctionCall", + "src": "2017:32:17" + }, + "nativeSrc": "2014:52:17", + "nodeType": "YulIf", + "src": "2014:52:17" + }, + { + "nativeSrc": "2075:26:17", + "nodeType": "YulAssignment", + "src": "2075:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2091:9:17", + "nodeType": "YulIdentifier", + "src": "2091:9:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "2085:5:17", + "nodeType": "YulIdentifier", + "src": "2085:5:17" + }, + "nativeSrc": "2085:16:17", + "nodeType": "YulFunctionCall", + "src": "2085:16:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2075:6:17", + "nodeType": "YulIdentifier", + "src": "2075:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nativeSrc": "1923:184:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1970:9:17", + "nodeType": "YulTypedName", + "src": "1970:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1981:7:17", + "nodeType": "YulTypedName", + "src": "1981:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1993:6:17", + "nodeType": "YulTypedName", + "src": "1993:6:17", + "type": "" + } + ], + "src": "1923:184:17" + }, + { + "body": { + "nativeSrc": "2286:175:17", + "nodeType": "YulBlock", + "src": "2286:175:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2303:9:17", + "nodeType": "YulIdentifier", + "src": "2303:9:17" + }, + { + "kind": "number", + "nativeSrc": "2314:2:17", + "nodeType": "YulLiteral", + "src": "2314:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2296:6:17", + "nodeType": "YulIdentifier", + "src": "2296:6:17" + }, + "nativeSrc": "2296:21:17", + "nodeType": "YulFunctionCall", + "src": "2296:21:17" + }, + "nativeSrc": "2296:21:17", + "nodeType": "YulExpressionStatement", + "src": "2296:21:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2337:9:17", + "nodeType": "YulIdentifier", + "src": "2337:9:17" + }, + { + "kind": "number", + "nativeSrc": "2348:2:17", + "nodeType": "YulLiteral", + "src": "2348:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2333:3:17", + "nodeType": "YulIdentifier", + "src": "2333:3:17" + }, + "nativeSrc": "2333:18:17", + "nodeType": "YulFunctionCall", + "src": "2333:18:17" + }, + { + "kind": "number", + "nativeSrc": "2353:2:17", + "nodeType": "YulLiteral", + "src": "2353:2:17", + "type": "", + "value": "25" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2326:6:17", + "nodeType": "YulIdentifier", + "src": "2326:6:17" + }, + "nativeSrc": "2326:30:17", + "nodeType": "YulFunctionCall", + "src": "2326:30:17" + }, + "nativeSrc": "2326:30:17", + "nodeType": "YulExpressionStatement", + "src": "2326:30:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2376:9:17", + "nodeType": "YulIdentifier", + "src": "2376:9:17" + }, + { + "kind": "number", + "nativeSrc": "2387:2:17", + "nodeType": "YulLiteral", + "src": "2387:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2372:3:17", + "nodeType": "YulIdentifier", + "src": "2372:3:17" + }, + "nativeSrc": "2372:18:17", + "nodeType": "YulFunctionCall", + "src": "2372:18:17" + }, + { + "hexValue": "496e73756666696369656e7420555344432062616c616e6365", + "kind": "string", + "nativeSrc": "2392:27:17", + "nodeType": "YulLiteral", + "src": "2392:27:17", + "type": "", + "value": "Insufficient USDC balance" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2365:6:17", + "nodeType": "YulIdentifier", + "src": "2365:6:17" + }, + "nativeSrc": "2365:55:17", + "nodeType": "YulFunctionCall", + "src": "2365:55:17" + }, + "nativeSrc": "2365:55:17", + "nodeType": "YulExpressionStatement", + "src": "2365:55:17" + }, + { + "nativeSrc": "2429:26:17", + "nodeType": "YulAssignment", + "src": "2429:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2441:9:17", + "nodeType": "YulIdentifier", + "src": "2441:9:17" + }, + { + "kind": "number", + "nativeSrc": "2452:2:17", + "nodeType": "YulLiteral", + "src": "2452:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2437:3:17", + "nodeType": "YulIdentifier", + "src": "2437:3:17" + }, + "nativeSrc": "2437:18:17", + "nodeType": "YulFunctionCall", + "src": "2437:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2429:4:17", + "nodeType": "YulIdentifier", + "src": "2429:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_40a05d66d0175ecd11e5a65435b281d52a1c32bbc687760a717d83801a914a3c__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "2112:349:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2263:9:17", + "nodeType": "YulTypedName", + "src": "2263:9:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2277:4:17", + "nodeType": "YulTypedName", + "src": "2277:4:17", + "type": "" + } + ], + "src": "2112:349:17" + }, + { + "body": { + "nativeSrc": "2585:63:17", + "nodeType": "YulBlock", + "src": "2585:63:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "2602:3:17", + "nodeType": "YulIdentifier", + "src": "2602:3:17" + }, + { + "name": "value0", + "nativeSrc": "2607:6:17", + "nodeType": "YulIdentifier", + "src": "2607:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2595:6:17", + "nodeType": "YulIdentifier", + "src": "2595:6:17" + }, + "nativeSrc": "2595:19:17", + "nodeType": "YulFunctionCall", + "src": "2595:19:17" + }, + "nativeSrc": "2595:19:17", + "nodeType": "YulExpressionStatement", + "src": "2595:19:17" + }, + { + "nativeSrc": "2623:19:17", + "nodeType": "YulAssignment", + "src": "2623:19:17", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "2634:3:17", + "nodeType": "YulIdentifier", + "src": "2634:3:17" + }, + { + "kind": "number", + "nativeSrc": "2639:2:17", + "nodeType": "YulLiteral", + "src": "2639:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2630:3:17", + "nodeType": "YulIdentifier", + "src": "2630:3:17" + }, + "nativeSrc": "2630:12:17", + "nodeType": "YulFunctionCall", + "src": "2630:12:17" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "2623:3:17", + "nodeType": "YulIdentifier", + "src": "2623:3:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "2466:182:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "2561:3:17", + "nodeType": "YulTypedName", + "src": "2561:3:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2566:6:17", + "nodeType": "YulTypedName", + "src": "2566:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "2577:3:17", + "nodeType": "YulTypedName", + "src": "2577:3:17", + "type": "" + } + ], + "src": "2466:182:17" + }, + { + "body": { + "nativeSrc": "2964:667:17", + "nodeType": "YulBlock", + "src": "2964:667:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2981:9:17", + "nodeType": "YulIdentifier", + "src": "2981:9:17" + }, + { + "name": "value0", + "nativeSrc": "2992:6:17", + "nodeType": "YulIdentifier", + "src": "2992:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2974:6:17", + "nodeType": "YulIdentifier", + "src": "2974:6:17" + }, + "nativeSrc": "2974:25:17", + "nodeType": "YulFunctionCall", + "src": "2974:25:17" + }, + "nativeSrc": "2974:25:17", + "nodeType": "YulExpressionStatement", + "src": "2974:25:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3019:9:17", + "nodeType": "YulIdentifier", + "src": "3019:9:17" + }, + { + "kind": "number", + "nativeSrc": "3030:2:17", + "nodeType": "YulLiteral", + "src": "3030:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3015:3:17", + "nodeType": "YulIdentifier", + "src": "3015:3:17" + }, + "nativeSrc": "3015:18:17", + "nodeType": "YulFunctionCall", + "src": "3015:18:17" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "3039:6:17", + "nodeType": "YulIdentifier", + "src": "3039:6:17" + }, + { + "kind": "number", + "nativeSrc": "3047:10:17", + "nodeType": "YulLiteral", + "src": "3047:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3035:3:17", + "nodeType": "YulIdentifier", + "src": "3035:3:17" + }, + "nativeSrc": "3035:23:17", + "nodeType": "YulFunctionCall", + "src": "3035:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3008:6:17", + "nodeType": "YulIdentifier", + "src": "3008:6:17" + }, + "nativeSrc": "3008:51:17", + "nodeType": "YulFunctionCall", + "src": "3008:51:17" + }, + "nativeSrc": "3008:51:17", + "nodeType": "YulExpressionStatement", + "src": "3008:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3079:9:17", + "nodeType": "YulIdentifier", + "src": "3079:9:17" + }, + { + "kind": "number", + "nativeSrc": "3090:2:17", + "nodeType": "YulLiteral", + "src": "3090:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3075:3:17", + "nodeType": "YulIdentifier", + "src": "3075:3:17" + }, + "nativeSrc": "3075:18:17", + "nodeType": "YulFunctionCall", + "src": "3075:18:17" + }, + { + "name": "value2", + "nativeSrc": "3095:6:17", + "nodeType": "YulIdentifier", + "src": "3095:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3068:6:17", + "nodeType": "YulIdentifier", + "src": "3068:6:17" + }, + "nativeSrc": "3068:34:17", + "nodeType": "YulFunctionCall", + "src": "3068:34:17" + }, + "nativeSrc": "3068:34:17", + "nodeType": "YulExpressionStatement", + "src": "3068:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3122:9:17", + "nodeType": "YulIdentifier", + "src": "3122:9:17" + }, + { + "kind": "number", + "nativeSrc": "3133:2:17", + "nodeType": "YulLiteral", + "src": "3133:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3118:3:17", + "nodeType": "YulIdentifier", + "src": "3118:3:17" + }, + "nativeSrc": "3118:18:17", + "nodeType": "YulFunctionCall", + "src": "3118:18:17" + }, + { + "arguments": [ + { + "name": "value3", + "nativeSrc": "3142:6:17", + "nodeType": "YulIdentifier", + "src": "3142:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3158:3:17", + "nodeType": "YulLiteral", + "src": "3158:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "3163:1:17", + "nodeType": "YulLiteral", + "src": "3163:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3154:3:17", + "nodeType": "YulIdentifier", + "src": "3154:3:17" + }, + "nativeSrc": "3154:11:17", + "nodeType": "YulFunctionCall", + "src": "3154:11:17" + }, + { + "kind": "number", + "nativeSrc": "3167:1:17", + "nodeType": "YulLiteral", + "src": "3167:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3150:3:17", + "nodeType": "YulIdentifier", + "src": "3150:3:17" + }, + "nativeSrc": "3150:19:17", + "nodeType": "YulFunctionCall", + "src": "3150:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3138:3:17", + "nodeType": "YulIdentifier", + "src": "3138:3:17" + }, + "nativeSrc": "3138:32:17", + "nodeType": "YulFunctionCall", + "src": "3138:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3111:6:17", + "nodeType": "YulIdentifier", + "src": "3111:6:17" + }, + "nativeSrc": "3111:60:17", + "nodeType": "YulFunctionCall", + "src": "3111:60:17" + }, + "nativeSrc": "3111:60:17", + "nodeType": "YulExpressionStatement", + "src": "3111:60:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3191:9:17", + "nodeType": "YulIdentifier", + "src": "3191:9:17" + }, + { + "kind": "number", + "nativeSrc": "3202:3:17", + "nodeType": "YulLiteral", + "src": "3202:3:17", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3187:3:17", + "nodeType": "YulIdentifier", + "src": "3187:3:17" + }, + "nativeSrc": "3187:19:17", + "nodeType": "YulFunctionCall", + "src": "3187:19:17" + }, + { + "name": "value4", + "nativeSrc": "3208:6:17", + "nodeType": "YulIdentifier", + "src": "3208:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3180:6:17", + "nodeType": "YulIdentifier", + "src": "3180:6:17" + }, + "nativeSrc": "3180:35:17", + "nodeType": "YulFunctionCall", + "src": "3180:35:17" + }, + "nativeSrc": "3180:35:17", + "nodeType": "YulExpressionStatement", + "src": "3180:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3235:9:17", + "nodeType": "YulIdentifier", + "src": "3235:9:17" + }, + { + "kind": "number", + "nativeSrc": "3246:3:17", + "nodeType": "YulLiteral", + "src": "3246:3:17", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3231:3:17", + "nodeType": "YulIdentifier", + "src": "3231:3:17" + }, + "nativeSrc": "3231:19:17", + "nodeType": "YulFunctionCall", + "src": "3231:19:17" + }, + { + "name": "value5", + "nativeSrc": "3252:6:17", + "nodeType": "YulIdentifier", + "src": "3252:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3224:6:17", + "nodeType": "YulIdentifier", + "src": "3224:6:17" + }, + "nativeSrc": "3224:35:17", + "nodeType": "YulFunctionCall", + "src": "3224:35:17" + }, + "nativeSrc": "3224:35:17", + "nodeType": "YulExpressionStatement", + "src": "3224:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3279:9:17", + "nodeType": "YulIdentifier", + "src": "3279:9:17" + }, + { + "kind": "number", + "nativeSrc": "3290:3:17", + "nodeType": "YulLiteral", + "src": "3290:3:17", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3275:3:17", + "nodeType": "YulIdentifier", + "src": "3275:3:17" + }, + "nativeSrc": "3275:19:17", + "nodeType": "YulFunctionCall", + "src": "3275:19:17" + }, + { + "arguments": [ + { + "name": "value6", + "nativeSrc": "3300:6:17", + "nodeType": "YulIdentifier", + "src": "3300:6:17" + }, + { + "kind": "number", + "nativeSrc": "3308:10:17", + "nodeType": "YulLiteral", + "src": "3308:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3296:3:17", + "nodeType": "YulIdentifier", + "src": "3296:3:17" + }, + "nativeSrc": "3296:23:17", + "nodeType": "YulFunctionCall", + "src": "3296:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3268:6:17", + "nodeType": "YulIdentifier", + "src": "3268:6:17" + }, + "nativeSrc": "3268:52:17", + "nodeType": "YulFunctionCall", + "src": "3268:52:17" + }, + "nativeSrc": "3268:52:17", + "nodeType": "YulExpressionStatement", + "src": "3268:52:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3340:9:17", + "nodeType": "YulIdentifier", + "src": "3340:9:17" + }, + { + "kind": "number", + "nativeSrc": "3351:3:17", + "nodeType": "YulLiteral", + "src": "3351:3:17", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3336:3:17", + "nodeType": "YulIdentifier", + "src": "3336:3:17" + }, + "nativeSrc": "3336:19:17", + "nodeType": "YulFunctionCall", + "src": "3336:19:17" + }, + { + "kind": "number", + "nativeSrc": "3357:3:17", + "nodeType": "YulLiteral", + "src": "3357:3:17", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3329:6:17", + "nodeType": "YulIdentifier", + "src": "3329:6:17" + }, + "nativeSrc": "3329:32:17", + "nodeType": "YulFunctionCall", + "src": "3329:32:17" + }, + "nativeSrc": "3329:32:17", + "nodeType": "YulExpressionStatement", + "src": "3329:32:17" + }, + { + "nativeSrc": "3370:27:17", + "nodeType": "YulVariableDeclaration", + "src": "3370:27:17", + "value": { + "arguments": [ + { + "name": "value7", + "nativeSrc": "3390:6:17", + "nodeType": "YulIdentifier", + "src": "3390:6:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3384:5:17", + "nodeType": "YulIdentifier", + "src": "3384:5:17" + }, + "nativeSrc": "3384:13:17", + "nodeType": "YulFunctionCall", + "src": "3384:13:17" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "3374:6:17", + "nodeType": "YulTypedName", + "src": "3374:6:17", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3417:9:17", + "nodeType": "YulIdentifier", + "src": "3417:9:17" + }, + { + "kind": "number", + "nativeSrc": "3428:3:17", + "nodeType": "YulLiteral", + "src": "3428:3:17", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3413:3:17", + "nodeType": "YulIdentifier", + "src": "3413:3:17" + }, + "nativeSrc": "3413:19:17", + "nodeType": "YulFunctionCall", + "src": "3413:19:17" + }, + { + "name": "length", + "nativeSrc": "3434:6:17", + "nodeType": "YulIdentifier", + "src": "3434:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3406:6:17", + "nodeType": "YulIdentifier", + "src": "3406:6:17" + }, + "nativeSrc": "3406:35:17", + "nodeType": "YulFunctionCall", + "src": "3406:35:17" + }, + "nativeSrc": "3406:35:17", + "nodeType": "YulExpressionStatement", + "src": "3406:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3460:9:17", + "nodeType": "YulIdentifier", + "src": "3460:9:17" + }, + { + "kind": "number", + "nativeSrc": "3471:3:17", + "nodeType": "YulLiteral", + "src": "3471:3:17", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3456:3:17", + "nodeType": "YulIdentifier", + "src": "3456:3:17" + }, + "nativeSrc": "3456:19:17", + "nodeType": "YulFunctionCall", + "src": "3456:19:17" + }, + { + "arguments": [ + { + "name": "value7", + "nativeSrc": "3481:6:17", + "nodeType": "YulIdentifier", + "src": "3481:6:17" + }, + { + "kind": "number", + "nativeSrc": "3489:2:17", + "nodeType": "YulLiteral", + "src": "3489:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3477:3:17", + "nodeType": "YulIdentifier", + "src": "3477:3:17" + }, + "nativeSrc": "3477:15:17", + "nodeType": "YulFunctionCall", + "src": "3477:15:17" + }, + { + "name": "length", + "nativeSrc": "3494:6:17", + "nodeType": "YulIdentifier", + "src": "3494:6:17" + } + ], + "functionName": { + "name": "mcopy", + "nativeSrc": "3450:5:17", + "nodeType": "YulIdentifier", + "src": "3450:5:17" + }, + "nativeSrc": "3450:51:17", + "nodeType": "YulFunctionCall", + "src": "3450:51:17" + }, + "nativeSrc": "3450:51:17", + "nodeType": "YulExpressionStatement", + "src": "3450:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3525:9:17", + "nodeType": "YulIdentifier", + "src": "3525:9:17" + }, + { + "name": "length", + "nativeSrc": "3536:6:17", + "nodeType": "YulIdentifier", + "src": "3536:6:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3521:3:17", + "nodeType": "YulIdentifier", + "src": "3521:3:17" + }, + "nativeSrc": "3521:22:17", + "nodeType": "YulFunctionCall", + "src": "3521:22:17" + }, + { + "kind": "number", + "nativeSrc": "3545:3:17", + "nodeType": "YulLiteral", + "src": "3545:3:17", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3517:3:17", + "nodeType": "YulIdentifier", + "src": "3517:3:17" + }, + "nativeSrc": "3517:32:17", + "nodeType": "YulFunctionCall", + "src": "3517:32:17" + }, + { + "kind": "number", + "nativeSrc": "3551:1:17", + "nodeType": "YulLiteral", + "src": "3551:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3510:6:17", + "nodeType": "YulIdentifier", + "src": "3510:6:17" + }, + "nativeSrc": "3510:43:17", + "nodeType": "YulFunctionCall", + "src": "3510:43:17" + }, + "nativeSrc": "3510:43:17", + "nodeType": "YulExpressionStatement", + "src": "3510:43:17" + }, + { + "nativeSrc": "3562:63:17", + "nodeType": "YulAssignment", + "src": "3562:63:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3578:9:17", + "nodeType": "YulIdentifier", + "src": "3578:9:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "3597:6:17", + "nodeType": "YulIdentifier", + "src": "3597:6:17" + }, + { + "kind": "number", + "nativeSrc": "3605:2:17", + "nodeType": "YulLiteral", + "src": "3605:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3593:3:17", + "nodeType": "YulIdentifier", + "src": "3593:3:17" + }, + "nativeSrc": "3593:15:17", + "nodeType": "YulFunctionCall", + "src": "3593:15:17" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3614:2:17", + "nodeType": "YulLiteral", + "src": "3614:2:17", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3610:3:17", + "nodeType": "YulIdentifier", + "src": "3610:3:17" + }, + "nativeSrc": "3610:7:17", + "nodeType": "YulFunctionCall", + "src": "3610:7:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3589:3:17", + "nodeType": "YulIdentifier", + "src": "3589:3:17" + }, + "nativeSrc": "3589:29:17", + "nodeType": "YulFunctionCall", + "src": "3589:29:17" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3574:3:17", + "nodeType": "YulIdentifier", + "src": "3574:3:17" + }, + "nativeSrc": "3574:45:17", + "nodeType": "YulFunctionCall", + "src": "3574:45:17" + }, + { + "kind": "number", + "nativeSrc": "3621:3:17", + "nodeType": "YulLiteral", + "src": "3621:3:17", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3570:3:17", + "nodeType": "YulIdentifier", + "src": "3570:3:17" + }, + "nativeSrc": "3570:55:17", + "nodeType": "YulFunctionCall", + "src": "3570:55:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3562:4:17", + "nodeType": "YulIdentifier", + "src": "3562:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr__to_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "2653:978:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2877:9:17", + "nodeType": "YulTypedName", + "src": "2877:9:17", + "type": "" + }, + { + "name": "value7", + "nativeSrc": "2888:6:17", + "nodeType": "YulTypedName", + "src": "2888:6:17", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "2896:6:17", + "nodeType": "YulTypedName", + "src": "2896:6:17", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "2904:6:17", + "nodeType": "YulTypedName", + "src": "2904:6:17", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "2912:6:17", + "nodeType": "YulTypedName", + "src": "2912:6:17", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "2920:6:17", + "nodeType": "YulTypedName", + "src": "2920:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "2928:6:17", + "nodeType": "YulTypedName", + "src": "2928:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "2936:6:17", + "nodeType": "YulTypedName", + "src": "2936:6:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2944:6:17", + "nodeType": "YulTypedName", + "src": "2944:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2955:4:17", + "nodeType": "YulTypedName", + "src": "2955:4:17", + "type": "" + } + ], + "src": "2653:978:17" + }, + { + "body": { + "nativeSrc": "3901:372:17", + "nodeType": "YulBlock", + "src": "3901:372:17", + "statements": [ + { + "nativeSrc": "3911:27:17", + "nodeType": "YulAssignment", + "src": "3911:27:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3923:9:17", + "nodeType": "YulIdentifier", + "src": "3923:9:17" + }, + { + "kind": "number", + "nativeSrc": "3934:3:17", + "nodeType": "YulLiteral", + "src": "3934:3:17", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3919:3:17", + "nodeType": "YulIdentifier", + "src": "3919:3:17" + }, + "nativeSrc": "3919:19:17", + "nodeType": "YulFunctionCall", + "src": "3919:19:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3911:4:17", + "nodeType": "YulIdentifier", + "src": "3911:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3954:9:17", + "nodeType": "YulIdentifier", + "src": "3954:9:17" + }, + { + "name": "value0", + "nativeSrc": "3965:6:17", + "nodeType": "YulIdentifier", + "src": "3965:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3947:6:17", + "nodeType": "YulIdentifier", + "src": "3947:6:17" + }, + "nativeSrc": "3947:25:17", + "nodeType": "YulFunctionCall", + "src": "3947:25:17" + }, + "nativeSrc": "3947:25:17", + "nodeType": "YulExpressionStatement", + "src": "3947:25:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3992:9:17", + "nodeType": "YulIdentifier", + "src": "3992:9:17" + }, + { + "kind": "number", + "nativeSrc": "4003:2:17", + "nodeType": "YulLiteral", + "src": "4003:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3988:3:17", + "nodeType": "YulIdentifier", + "src": "3988:3:17" + }, + "nativeSrc": "3988:18:17", + "nodeType": "YulFunctionCall", + "src": "3988:18:17" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "4012:6:17", + "nodeType": "YulIdentifier", + "src": "4012:6:17" + }, + { + "kind": "number", + "nativeSrc": "4020:10:17", + "nodeType": "YulLiteral", + "src": "4020:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4008:3:17", + "nodeType": "YulIdentifier", + "src": "4008:3:17" + }, + "nativeSrc": "4008:23:17", + "nodeType": "YulFunctionCall", + "src": "4008:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3981:6:17", + "nodeType": "YulIdentifier", + "src": "3981:6:17" + }, + "nativeSrc": "3981:51:17", + "nodeType": "YulFunctionCall", + "src": "3981:51:17" + }, + "nativeSrc": "3981:51:17", + "nodeType": "YulExpressionStatement", + "src": "3981:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4052:9:17", + "nodeType": "YulIdentifier", + "src": "4052:9:17" + }, + { + "kind": "number", + "nativeSrc": "4063:2:17", + "nodeType": "YulLiteral", + "src": "4063:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4048:3:17", + "nodeType": "YulIdentifier", + "src": "4048:3:17" + }, + "nativeSrc": "4048:18:17", + "nodeType": "YulFunctionCall", + "src": "4048:18:17" + }, + { + "name": "value2", + "nativeSrc": "4068:6:17", + "nodeType": "YulIdentifier", + "src": "4068:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4041:6:17", + "nodeType": "YulIdentifier", + "src": "4041:6:17" + }, + "nativeSrc": "4041:34:17", + "nodeType": "YulFunctionCall", + "src": "4041:34:17" + }, + "nativeSrc": "4041:34:17", + "nodeType": "YulExpressionStatement", + "src": "4041:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4095:9:17", + "nodeType": "YulIdentifier", + "src": "4095:9:17" + }, + { + "kind": "number", + "nativeSrc": "4106:2:17", + "nodeType": "YulLiteral", + "src": "4106:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4091:3:17", + "nodeType": "YulIdentifier", + "src": "4091:3:17" + }, + "nativeSrc": "4091:18:17", + "nodeType": "YulFunctionCall", + "src": "4091:18:17" + }, + { + "name": "value3", + "nativeSrc": "4111:6:17", + "nodeType": "YulIdentifier", + "src": "4111:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4084:6:17", + "nodeType": "YulIdentifier", + "src": "4084:6:17" + }, + "nativeSrc": "4084:34:17", + "nodeType": "YulFunctionCall", + "src": "4084:34:17" + }, + "nativeSrc": "4084:34:17", + "nodeType": "YulExpressionStatement", + "src": "4084:34:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4138:9:17", + "nodeType": "YulIdentifier", + "src": "4138:9:17" + }, + { + "kind": "number", + "nativeSrc": "4149:3:17", + "nodeType": "YulLiteral", + "src": "4149:3:17", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4134:3:17", + "nodeType": "YulIdentifier", + "src": "4134:3:17" + }, + "nativeSrc": "4134:19:17", + "nodeType": "YulFunctionCall", + "src": "4134:19:17" + }, + { + "name": "value4", + "nativeSrc": "4155:6:17", + "nodeType": "YulIdentifier", + "src": "4155:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4127:6:17", + "nodeType": "YulIdentifier", + "src": "4127:6:17" + }, + "nativeSrc": "4127:35:17", + "nodeType": "YulFunctionCall", + "src": "4127:35:17" + }, + "nativeSrc": "4127:35:17", + "nodeType": "YulExpressionStatement", + "src": "4127:35:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4182:9:17", + "nodeType": "YulIdentifier", + "src": "4182:9:17" + }, + { + "kind": "number", + "nativeSrc": "4193:3:17", + "nodeType": "YulLiteral", + "src": "4193:3:17", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4178:3:17", + "nodeType": "YulIdentifier", + "src": "4178:3:17" + }, + "nativeSrc": "4178:19:17", + "nodeType": "YulFunctionCall", + "src": "4178:19:17" + }, + { + "arguments": [ + { + "name": "value5", + "nativeSrc": "4203:6:17", + "nodeType": "YulIdentifier", + "src": "4203:6:17" + }, + { + "kind": "number", + "nativeSrc": "4211:10:17", + "nodeType": "YulLiteral", + "src": "4211:10:17", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4199:3:17", + "nodeType": "YulIdentifier", + "src": "4199:3:17" + }, + "nativeSrc": "4199:23:17", + "nodeType": "YulFunctionCall", + "src": "4199:23:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4171:6:17", + "nodeType": "YulIdentifier", + "src": "4171:6:17" + }, + "nativeSrc": "4171:52:17", + "nodeType": "YulFunctionCall", + "src": "4171:52:17" + }, + "nativeSrc": "4171:52:17", + "nodeType": "YulExpressionStatement", + "src": "4171:52:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4243:9:17", + "nodeType": "YulIdentifier", + "src": "4243:9:17" + }, + { + "kind": "number", + "nativeSrc": "4254:3:17", + "nodeType": "YulLiteral", + "src": "4254:3:17", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4239:3:17", + "nodeType": "YulIdentifier", + "src": "4239:3:17" + }, + "nativeSrc": "4239:19:17", + "nodeType": "YulFunctionCall", + "src": "4239:19:17" + }, + { + "name": "value6", + "nativeSrc": "4260:6:17", + "nodeType": "YulIdentifier", + "src": "4260:6:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4232:6:17", + "nodeType": "YulIdentifier", + "src": "4232:6:17" + }, + "nativeSrc": "4232:35:17", + "nodeType": "YulFunctionCall", + "src": "4232:35:17" + }, + "nativeSrc": "4232:35:17", + "nodeType": "YulExpressionStatement", + "src": "4232:35:17" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_bytes32_t_uint256_t_uint32_t_bytes32__to_t_uint256_t_uint32_t_bytes32_t_bytes32_t_uint256_t_uint32_t_bytes32__fromStack_reversed", + "nativeSrc": "3636:637:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3822:9:17", + "nodeType": "YulTypedName", + "src": "3822:9:17", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "3833:6:17", + "nodeType": "YulTypedName", + "src": "3833:6:17", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "3841:6:17", + "nodeType": "YulTypedName", + "src": "3841:6:17", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "3849:6:17", + "nodeType": "YulTypedName", + "src": "3849:6:17", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "3857:6:17", + "nodeType": "YulTypedName", + "src": "3857:6:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "3865:6:17", + "nodeType": "YulTypedName", + "src": "3865:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "3873:6:17", + "nodeType": "YulTypedName", + "src": "3873:6:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3881:6:17", + "nodeType": "YulTypedName", + "src": "3881:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3892:4:17", + "nodeType": "YulTypedName", + "src": "3892:4:17", + "type": "" + } + ], + "src": "3636:637:17" + } + ] + }, + "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_contract$_IERC20_$819__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_contract$_ITokenMessengerV2_$1899__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_decode_tuple_t_uint256t_uint256t_uint32(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n if iszero(eq(value_2, and(value_2, 0xffffffff))) { revert(0, 0) }\n value2 := value_2\n }\n function abi_encode_tuple_t_stringliteral_2fd1dfd944df9898ee4c79794168926172c3d96d7664ff9919bb7080bb018af1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 14)\n mstore(add(headStart, 64), \"Invalid amount\")\n tail := add(headStart, 96)\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_stringliteral_40a05d66d0175ecd11e5a65435b281d52a1c32bbc687760a717d83801a914a3c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 25)\n mstore(add(headStart, 64), \"Insufficient USDC balance\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n mstore(pos, value0)\n end := add(pos, 32)\n }\n function abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr__to_t_uint256_t_uint32_t_bytes32_t_address_t_bytes32_t_uint256_t_uint32_t_bytes_memory_ptr__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xffffffff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), and(value6, 0xffffffff))\n mstore(add(headStart, 224), 256)\n let length := mload(value7)\n mstore(add(headStart, 256), length)\n mcopy(add(headStart, 288), add(value7, 32), length)\n mstore(add(add(headStart, length), 288), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 288)\n }\n function abi_encode_tuple_t_uint256_t_uint32_t_bytes32_t_bytes32_t_uint256_t_uint32_t_bytes32__to_t_uint256_t_uint32_t_bytes32_t_bytes32_t_uint256_t_uint32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 224)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xffffffff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), and(value5, 0xffffffff))\n mstore(add(headStart, 192), value6)\n }\n}", + "id": 17, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": { + "1610": [ + { + "length": 32, + "start": 210 + }, + { + "length": 32, + "start": 514 + }, + { + "length": 32, + "start": 718 + }, + { + "length": 32, + "start": 873 + }, + { + "length": 32, + "start": 1053 + } + ], + "1613": [ + { + "length": 32, + "start": 249 + }, + { + "length": 32, + "start": 752 + }, + { + "length": 32, + "start": 791 + }, + { + "length": 32, + "start": 1089 + } + ], + "1615": [ + { + "length": 32, + "start": 142 + } + ], + "1617": [ + { + "length": 32, + "start": 359 + }, + { + "length": 32, + "start": 840 + }, + { + "length": 32, + "start": 1143 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063acef1c5711610058578063acef1c5714610130578063c6db9c871461014c578063c74ee95714610162578063dccf984614610189575f5ffd5b806309bdf150146100895780633e413bee146100cd57806346117830146100f457806362cef4b91461011b575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6101225f81565b6040519081526020016100c4565b6101375f81565b60405163ffffffff90911681526020016100c4565b6101226b18d8dd1c0b599bdc9dd85c9960a21b81565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b61019c610197366004610672565b61019e565b005b6101a6610524565b5f83116101eb5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561024f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027391906106b0565b10156102c15760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420555344432062616c616e63650000000000000060448201526064016101e2565b6103156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610552565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663779b432d845f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f5f1b88886b18d8dd1c0b599bdc9dd85c9960a21b5f1b6040516020016103b191815260200190565b6040516020818303038152906040526040518963ffffffff1660e01b81526004016103e39897969594939291906106c7565b5f604051808303815f87803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b506104669250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000005f610552565b604080518481525f602082018190527f00000000000000000000000000000000000000000000000000000000000000008284015260608201526080810184905263ffffffff831660a08201526b18d8dd1c0b599bdc9dd85c9960a21b60c0820152905133917f3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6919081900360e00190a261051f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b61052c6105cc565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61055e8383835f610610565b61051f5761056f83835f6001610610565b61059757604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b6105a48383836001610610565b61051f57604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361060e57604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661066657838315161561065a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f5f5f60608486031215610684575f5ffd5b8335925060208401359150604084013563ffffffff811681146106a5575f5ffd5b809150509250925092565b5f602082840312156106c0575f5ffd5b5051919050565b88815263ffffffff8816602082015286604082015260018060a01b03861660608201528460808201528360a082015263ffffffff831660c082015261010060e08201525f825180610100840152806020850161012085015e5f6101208285010152610120601f19601f830116840101915050999850505050505050505056fea2646970667358221220b76c50a6e2d835a1079f67de279f46d3362268b2a2daa5b5e1a88be179ff8e9164736f6c634300081c0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x85 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xACEF1C57 GT PUSH2 0x58 JUMPI DUP1 PUSH4 0xACEF1C57 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0xC6DB9C87 EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0xC74EE957 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xDCCF9846 EQ PUSH2 0x189 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 PUSH4 0x9BDF150 EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0x3E413BEE EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x46117830 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x62CEF4B9 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x137 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x122 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x672 JUMP JUMPDEST PUSH2 0x19E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1A6 PUSH2 0x524 JUMP JUMPDEST PUSH0 DUP4 GT PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x125B9D985B1A5908185B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x6B0 JUMP JUMPDEST LT ISZERO PUSH2 0x2C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420555344432062616C616E636500000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x315 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP6 PUSH2 0x552 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x779B432D DUP5 PUSH0 PUSH32 0x0 PUSH32 0x0 PUSH0 PUSH0 SHL DUP9 DUP9 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH0 SHL PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3B1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3E3 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6C7 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3FA JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x40C JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP PUSH2 0x466 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 POP PUSH32 0x0 PUSH0 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x3F298CACAEFADF0A6BFEF4DFEEAF3ECA0C68D70E5CB8F1B5288E7540A9E95ED6 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG2 PUSH2 0x51F PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x52C PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST PUSH2 0x55E DUP4 DUP4 DUP4 PUSH0 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH2 0x56F DUP4 DUP4 PUSH0 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x597 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x5A4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SLOAD PUSH1 0x2 SUB PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 DUP6 SWAP1 MSTORE SWAP2 PUSH1 0x20 DUP4 PUSH1 0x44 DUP2 DUP1 DUP12 GAS CALL SWAP3 POP PUSH1 0x1 PUSH0 MLOAD EQ DUP4 AND PUSH2 0x666 JUMPI DUP4 DUP4 ISZERO AND ISZERO PUSH2 0x65A JUMPI RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST PUSH0 DUP8 EXTCODESIZE GT RETURNDATASIZE ISZERO AND DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x40 MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x684 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6A5 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6C0 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP9 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE DUP5 PUSH1 0x80 DUP3 ADD MSTORE DUP4 PUSH1 0xA0 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x100 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 DUP3 MLOAD DUP1 PUSH2 0x100 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD PUSH2 0x120 DUP6 ADD MCOPY PUSH0 PUSH2 0x120 DUP3 DUP6 ADD ADD MSTORE PUSH2 0x120 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB7 PUSH13 0x50A6E2D835A1079F67DE279F46 0xD3 CALLDATASIZE 0x22 PUSH9 0xB2A2DAA5B5E1A88BE1 PUSH26 0xFF8E9164736F6C634300081C0033000000000000000000000000 ", + "sourceMap": "366:2451:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;782:46;;;;;;;;-1:-1:-1;;;;;178:32:17;;;160:51;;148:2;133:18;782:46:12;;;;;;;;693:28;;;;;727:49;;;;;515:55;;568:1;515:55;;;;;824:25:17;;;812:2;797:18;515:55:12;678:177:17;455:54:12;;508:1;455:54;;;;;1034:10:17;1022:23;;;1004:42;;992:2;977:18;455:54:12;860:192:17;576:110:12;;-1:-1:-1;;;576:110:12;;834:45;;;;;1698:982;;;;;;:::i;:::-;;:::i;:::-;;;3023:21:9;:19;:21::i;:::-;1835:1:12::1;1822:10;:14;1814:41;;;::::0;-1:-1:-1;;;1814:41:12;;1782:2:17;1814:41:12::1;::::0;::::1;1764:21:17::0;1821:2;1801:18;;;1794:30;-1:-1:-1;;;1840:18:17;;;1833:44;1894:18;;1814:41:12::1;;;;;;;;;1873:29;::::0;-1:-1:-1;;;1873:29:12;;1896:4:::1;1873:29;::::0;::::1;160:51:17::0;1906:10:12;;1873:4:::1;-1:-1:-1::0;;;;;1873:14:12::1;::::0;::::1;::::0;133:18:17;;1873:29:12::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;1865:81;;;::::0;-1:-1:-1;;;1865:81:12;;2314:2:17;1865:81:12::1;::::0;::::1;2296:21:17::0;2353:2;2333:18;;;2326:30;2392:27;2372:18;;;2365:55;2437:18;;1865:81:12::1;2112:349:17::0;1865:81:12::1;1957:54;-1:-1:-1::0;;;;;1957:4:12::1;:17;1983:14;2000:10:::0;1957:17:::1;:54::i;:::-;2022:14;-1:-1:-1::0;;;;;2022:37:12::1;;2073:10;508:1;2138:20;2180:4;568:1;560:10;;2231:6;2251:20;-1:-1:-1::0;;;2302:17:12::1;;2285:35;;;;;;2595:19:17::0;;2639:2;2630:12;;2466:182;2285:35:12::1;;;;;;;;;;;;;2022:308;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;2341:45:12::1;::::0;-1:-1:-1;;;;;;;2341:4:12::1;:17;::::0;-1:-1:-1;2367:14:12::1;2384:1;2341:17;:45::i;:::-;2402:271;::::0;;3947:25:17;;;508:1:12::1;4003:2:17::0;3988:18;;3981:51;;;2526:20:12::1;4048:18:17::0;;;4041:34;4106:2;4091:18;;4084:34;4149:3;4134:19;;4127:35;;;4020:10;4199:23;;4193:3;4178:19;;4171:52;-1:-1:-1;;;4254:3:17;4239:19;;4232:35;2402:271:12;;2437:10:::1;::::0;2402:271:::1;::::0;;;;;3934:3:17;2402:271:12;;::::1;3065:20:9::0;2365:1;1505:66;3972:62;3749:292;3065:20;1698:982:12;;;:::o;3749:292:9:-;3872:25;:23;:25::i;:::-;2407:1;1505:66;3972:62;3749:292::o;5098:367:7:-;5190:42;5203:5;5210:7;5219:5;5226;5190:12;:42::i;:::-;5185:274;;5253:37;5266:5;5273:7;5282:1;5285:4;5253:12;:37::i;:::-;5248:91;;5299:40;;-1:-1:-1;;;5299:40:7;;-1:-1:-1;;;;;178:32:17;;5299:40:7;;;160:51:17;133:18;;5299:40:7;14:203:17;5248:91:7;5358:41;5371:5;5378:7;5387:5;5394:4;5358:12;:41::i;:::-;5353:95;;5408:40;;-1:-1:-1;;;5408:40:7;;-1:-1:-1;;;;;178:32:17;;5408:40:7;;;160:51:17;133:18;;5408:40:7;14:203:17;3586:157:9;1505:66;4560:52;2407:1;4560:63;3644:93;;3696:30;;-1:-1:-1;;;3696:30:9;;;;;;;;;;;3644:93;3586:157::o;12059:1252:7:-;12289:4;12283:11;-1:-1:-1;;;12157:12:7;12307:22;;;-1:-1:-1;;;;;12355:29:7;;12349:4;12342:43;12405:4;12398:19;;;12157:12;12481:4;12157:12;12469:4;12157:12;;12453:5;12446;12441:45;12430:56;;12698:1;12691:4;12685:11;12682:18;12673:7;12669:32;12659:606;;12830:6;12820:7;12813:15;12809:28;12806:165;;;12886:16;12880:4;12875:3;12860:43;12936:16;12931:3;12924:29;12806:165;13247:1;13239:5;13227:18;13224:25;13205:16;13198:24;13194:56;13185:7;13181:70;13170:81;;12659:606;13285:4;13278:17;-1:-1:-1;12059:1252:7;;-1:-1:-1;;;;12059:1252:7:o;1057:518:17:-;1133:6;1141;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1263:23;;;-1:-1:-1;1383:2:17;1368:18;;1355:32;;-1:-1:-1;1465:2:17;1450:18;;1437:32;1513:10;1500:24;;1488:37;;1478:65;;1539:1;1536;1529:12;1478:65;1562:7;1552:17;;;1057:518;;;;;:::o;1923:184::-;1993:6;2046:2;2034:9;2025:7;2021:23;2017:32;2014:52;;;2062:1;2059;2052:12;2014:52;-1:-1:-1;2085:16:17;;1923:184;-1:-1:-1;1923:184:17:o;2653:978::-;2992:6;2981:9;2974:25;3047:10;3039:6;3035:23;3030:2;3019:9;3015:18;3008:51;3095:6;3090:2;3079:9;3075:18;3068:34;3167:1;3163;3158:3;3154:11;3150:19;3142:6;3138:32;3133:2;3122:9;3118:18;3111:60;3208:6;3202:3;3191:9;3187:19;3180:35;3252:6;3246:3;3235:9;3231:19;3224:35;3308:10;3300:6;3296:23;3290:3;3279:9;3275:19;3268:52;3357:3;3351;3340:9;3336:19;3329:32;2955:4;3390:6;3384:13;3434:6;3428:3;3417:9;3413:19;3406:35;3494:6;3489:2;3481:6;3477:15;3471:3;3460:9;3456:19;3450:51;3551:1;3545:3;3536:6;3525:9;3521:22;3517:32;3510:43;3621:3;3614:2;3610:7;3605:2;3597:6;3593:15;3589:29;3578:9;3574:45;3570:55;3562:63;;;2653:978;;;;;;;;;;;:::o" + }, + "methodIdentifiers": { + "DESTINATION_CALLER()": "62cef4b9", + "ETHEREUM_DESTINATION_DOMAIN()": "acef1c57", + "ethereumMintRecipient()": "09bdf150", + "FORWARD_HOOK_DATA()": "c6db9c87", + "mintRecipientBytes32()": "c74ee957", + "sweepUsdc(uint256,uint256,uint32)": "dccf9846", + "tokenMessenger()": "46117830", + "usdc()": "3e413bee" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usdc\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethereumMintRecipient\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdcAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"minFinalityThreshold\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"forwardHookData\",\"type\":\"bytes32\"}],\"name\":\"UsdcSweptAndForwarded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DESTINATION_CALLER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHEREUM_DESTINATION_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FORWARD_HOOK_DATA\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethereumMintRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintRecipientBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"usdcAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFee\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"minFinalityThreshold\",\"type\":\"uint32\"}],\"name\":\"sweepUsdc\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMessenger\",\"outputs\":[{\"internalType\":\"contract ITokenMessengerV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usdc\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PerUserCctpSettlement.sol\":\"PerUserCctpSettlement\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x304d732678032a9781ae85c8f204c8fba3d3a5e31c02616964e75cfdc5049098\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://299ced486011781dc98f638059678323c03079fefae1482abaa2135b22fa92d0\",\"dweb:/ipfs/QmbZNbcPTBxNvwChavN2kkZZs7xHhYL7mv51KrxMhsMs3j\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99\",\"dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/PerUserCctpSettlement.sol\":{\"keccak256\":\"0x1eaa6c053c75db64c9becd970a5bc68290f4bac370fa1890bcac06a583523fe3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78f3ab328218231068e46ff821fb884b336568ba107901d735c539f81cff4ee\",\"dweb:/ipfs/QmdziTBm4eVJCNTBG7P5fX79mMASGajbn3KYMTxEcaCfoQ\"]},\"contracts/interfaces/ITokenMessengerV2.sol\":{\"keccak256\":\"0x76b7d85feaf149e32f9fa3b2202d9a8436265a8424b2074dd792c9fa5bba6c42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9868ed7e99cc1def8409878c58151bd11322145864b1f3a705fb2be5494a37e7\",\"dweb:/ipfs/QmTiMymy6cHS7HYDDwEs15e1Qzo7H5JiLYNyzmZnVBGmsF\"]}},\"version\":1}" + } + }, + "contracts/PerUserCctpSettlementFactory.sol": { + "PerUserCctpSettlementFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_usdc", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenMessenger", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "settlement", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "ethereumMintRecipient", + "type": "address" + } + ], + "name": "SettlementDeployed", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethereumMintRecipient", + "type": "address" + } + ], + "name": "deploySettlement", + "outputs": [ + { + "internalType": "address", + "name": "settlement", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tokenMessenger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "usdc", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": { + "@_1850": { + "entryPoint": null, + "id": 1850, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_decode_address_fromMemory": { + "entryPoint": 217, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_address_fromMemory": { + "entryPoint": 244, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_tuple_t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:1178:17", + "nodeType": "YulBlock", + "src": "0:1178:17", + "statements": [ + { + "nativeSrc": "6:3:17", + "nodeType": "YulBlock", + "src": "6:3:17", + "statements": [] + }, + { + "body": { + "nativeSrc": "74:117:17", + "nodeType": "YulBlock", + "src": "74:117:17", + "statements": [ + { + "nativeSrc": "84:22:17", + "nodeType": "YulAssignment", + "src": "84:22:17", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "99:6:17", + "nodeType": "YulIdentifier", + "src": "99:6:17" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "93:5:17", + "nodeType": "YulIdentifier", + "src": "93:5:17" + }, + "nativeSrc": "93:13:17", + "nodeType": "YulFunctionCall", + "src": "93:13:17" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "84:5:17", + "nodeType": "YulIdentifier", + "src": "84:5:17" + } + ] + }, + { + "body": { + "nativeSrc": "169:16:17", + "nodeType": "YulBlock", + "src": "169:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "178:1:17", + "nodeType": "YulLiteral", + "src": "178:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "181:1:17", + "nodeType": "YulLiteral", + "src": "181:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "171:6:17", + "nodeType": "YulIdentifier", + "src": "171:6:17" + }, + "nativeSrc": "171:12:17", + "nodeType": "YulFunctionCall", + "src": "171:12:17" + }, + "nativeSrc": "171:12:17", + "nodeType": "YulExpressionStatement", + "src": "171:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "128:5:17", + "nodeType": "YulIdentifier", + "src": "128:5:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "139:5:17", + "nodeType": "YulIdentifier", + "src": "139:5:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "154:3:17", + "nodeType": "YulLiteral", + "src": "154:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "159:1:17", + "nodeType": "YulLiteral", + "src": "159:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "150:3:17", + "nodeType": "YulIdentifier", + "src": "150:3:17" + }, + "nativeSrc": "150:11:17", + "nodeType": "YulFunctionCall", + "src": "150:11:17" + }, + { + "kind": "number", + "nativeSrc": "163:1:17", + "nodeType": "YulLiteral", + "src": "163:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "146:3:17", + "nodeType": "YulIdentifier", + "src": "146:3:17" + }, + "nativeSrc": "146:19:17", + "nodeType": "YulFunctionCall", + "src": "146:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "135:3:17", + "nodeType": "YulIdentifier", + "src": "135:3:17" + }, + "nativeSrc": "135:31:17", + "nodeType": "YulFunctionCall", + "src": "135:31:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "125:2:17", + "nodeType": "YulIdentifier", + "src": "125:2:17" + }, + "nativeSrc": "125:42:17", + "nodeType": "YulFunctionCall", + "src": "125:42:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "118:6:17", + "nodeType": "YulIdentifier", + "src": "118:6:17" + }, + "nativeSrc": "118:50:17", + "nodeType": "YulFunctionCall", + "src": "118:50:17" + }, + "nativeSrc": "115:70:17", + "nodeType": "YulIf", + "src": "115:70:17" + } + ] + }, + "name": "abi_decode_address_fromMemory", + "nativeSrc": "14:177:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "53:6:17", + "nodeType": "YulTypedName", + "src": "53:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "64:5:17", + "nodeType": "YulTypedName", + "src": "64:5:17", + "type": "" + } + ], + "src": "14:177:17" + }, + { + "body": { + "nativeSrc": "294:195:17", + "nodeType": "YulBlock", + "src": "294:195:17", + "statements": [ + { + "body": { + "nativeSrc": "340:16:17", + "nodeType": "YulBlock", + "src": "340:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "349:1:17", + "nodeType": "YulLiteral", + "src": "349:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "352:1:17", + "nodeType": "YulLiteral", + "src": "352:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "342:6:17", + "nodeType": "YulIdentifier", + "src": "342:6:17" + }, + "nativeSrc": "342:12:17", + "nodeType": "YulFunctionCall", + "src": "342:12:17" + }, + "nativeSrc": "342:12:17", + "nodeType": "YulExpressionStatement", + "src": "342:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "315:7:17", + "nodeType": "YulIdentifier", + "src": "315:7:17" + }, + { + "name": "headStart", + "nativeSrc": "324:9:17", + "nodeType": "YulIdentifier", + "src": "324:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "311:3:17", + "nodeType": "YulIdentifier", + "src": "311:3:17" + }, + "nativeSrc": "311:23:17", + "nodeType": "YulFunctionCall", + "src": "311:23:17" + }, + { + "kind": "number", + "nativeSrc": "336:2:17", + "nodeType": "YulLiteral", + "src": "336:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "307:3:17", + "nodeType": "YulIdentifier", + "src": "307:3:17" + }, + "nativeSrc": "307:32:17", + "nodeType": "YulFunctionCall", + "src": "307:32:17" + }, + "nativeSrc": "304:52:17", + "nodeType": "YulIf", + "src": "304:52:17" + }, + { + "nativeSrc": "365:50:17", + "nodeType": "YulAssignment", + "src": "365:50:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "405:9:17", + "nodeType": "YulIdentifier", + "src": "405:9:17" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "375:29:17", + "nodeType": "YulIdentifier", + "src": "375:29:17" + }, + "nativeSrc": "375:40:17", + "nodeType": "YulFunctionCall", + "src": "375:40:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "365:6:17", + "nodeType": "YulIdentifier", + "src": "365:6:17" + } + ] + }, + { + "nativeSrc": "424:59:17", + "nodeType": "YulAssignment", + "src": "424:59:17", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "468:9:17", + "nodeType": "YulIdentifier", + "src": "468:9:17" + }, + { + "kind": "number", + "nativeSrc": "479:2:17", + "nodeType": "YulLiteral", + "src": "479:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "464:3:17", + "nodeType": "YulIdentifier", + "src": "464:3:17" + }, + "nativeSrc": "464:18:17", + "nodeType": "YulFunctionCall", + "src": "464:18:17" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "434:29:17", + "nodeType": "YulIdentifier", + "src": "434:29:17" + }, + "nativeSrc": "434:49:17", + "nodeType": "YulFunctionCall", + "src": "434:49:17" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "424:6:17", + "nodeType": "YulIdentifier", + "src": "424:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_address_fromMemory", + "nativeSrc": "196:293:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "252:9:17", + "nodeType": "YulTypedName", + "src": "252:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "263:7:17", + "nodeType": "YulTypedName", + "src": "263:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "275:6:17", + "nodeType": "YulTypedName", + "src": "275:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "283:6:17", + "nodeType": "YulTypedName", + "src": "283:6:17", + "type": "" + } + ], + "src": "196:293:17" + }, + { + "body": { + "nativeSrc": "668:162:17", + "nodeType": "YulBlock", + "src": "668:162:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "685:9:17", + "nodeType": "YulIdentifier", + "src": "685:9:17" + }, + { + "kind": "number", + "nativeSrc": "696:2:17", + "nodeType": "YulLiteral", + "src": "696:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "678:6:17", + "nodeType": "YulIdentifier", + "src": "678:6:17" + }, + "nativeSrc": "678:21:17", + "nodeType": "YulFunctionCall", + "src": "678:21:17" + }, + "nativeSrc": "678:21:17", + "nodeType": "YulExpressionStatement", + "src": "678:21:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "719:9:17", + "nodeType": "YulIdentifier", + "src": "719:9:17" + }, + { + "kind": "number", + "nativeSrc": "730:2:17", + "nodeType": "YulLiteral", + "src": "730:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "715:3:17", + "nodeType": "YulIdentifier", + "src": "715:3:17" + }, + "nativeSrc": "715:18:17", + "nodeType": "YulFunctionCall", + "src": "715:18:17" + }, + { + "kind": "number", + "nativeSrc": "735:2:17", + "nodeType": "YulLiteral", + "src": "735:2:17", + "type": "", + "value": "12" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "708:6:17", + "nodeType": "YulIdentifier", + "src": "708:6:17" + }, + "nativeSrc": "708:30:17", + "nodeType": "YulFunctionCall", + "src": "708:30:17" + }, + "nativeSrc": "708:30:17", + "nodeType": "YulExpressionStatement", + "src": "708:30:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "758:9:17", + "nodeType": "YulIdentifier", + "src": "758:9:17" + }, + { + "kind": "number", + "nativeSrc": "769:2:17", + "nodeType": "YulLiteral", + "src": "769:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "754:3:17", + "nodeType": "YulIdentifier", + "src": "754:3:17" + }, + "nativeSrc": "754:18:17", + "nodeType": "YulFunctionCall", + "src": "754:18:17" + }, + { + "hexValue": "496e76616c69642055534443", + "kind": "string", + "nativeSrc": "774:14:17", + "nodeType": "YulLiteral", + "src": "774:14:17", + "type": "", + "value": "Invalid USDC" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "747:6:17", + "nodeType": "YulIdentifier", + "src": "747:6:17" + }, + "nativeSrc": "747:42:17", + "nodeType": "YulFunctionCall", + "src": "747:42:17" + }, + "nativeSrc": "747:42:17", + "nodeType": "YulExpressionStatement", + "src": "747:42:17" + }, + { + "nativeSrc": "798:26:17", + "nodeType": "YulAssignment", + "src": "798:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "810:9:17", + "nodeType": "YulIdentifier", + "src": "810:9:17" + }, + { + "kind": "number", + "nativeSrc": "821:2:17", + "nodeType": "YulLiteral", + "src": "821:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "806:3:17", + "nodeType": "YulIdentifier", + "src": "806:3:17" + }, + "nativeSrc": "806:18:17", + "nodeType": "YulFunctionCall", + "src": "806:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "798:4:17", + "nodeType": "YulIdentifier", + "src": "798:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "494:336:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "645:9:17", + "nodeType": "YulTypedName", + "src": "645:9:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "659:4:17", + "nodeType": "YulTypedName", + "src": "659:4:17", + "type": "" + } + ], + "src": "494:336:17" + }, + { + "body": { + "nativeSrc": "1009:167:17", + "nodeType": "YulBlock", + "src": "1009:167:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1026:9:17", + "nodeType": "YulIdentifier", + "src": "1026:9:17" + }, + { + "kind": "number", + "nativeSrc": "1037:2:17", + "nodeType": "YulLiteral", + "src": "1037:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1019:6:17", + "nodeType": "YulIdentifier", + "src": "1019:6:17" + }, + "nativeSrc": "1019:21:17", + "nodeType": "YulFunctionCall", + "src": "1019:21:17" + }, + "nativeSrc": "1019:21:17", + "nodeType": "YulExpressionStatement", + "src": "1019:21:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1060:9:17", + "nodeType": "YulIdentifier", + "src": "1060:9:17" + }, + { + "kind": "number", + "nativeSrc": "1071:2:17", + "nodeType": "YulLiteral", + "src": "1071:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1056:3:17", + "nodeType": "YulIdentifier", + "src": "1056:3:17" + }, + "nativeSrc": "1056:18:17", + "nodeType": "YulFunctionCall", + "src": "1056:18:17" + }, + { + "kind": "number", + "nativeSrc": "1076:2:17", + "nodeType": "YulLiteral", + "src": "1076:2:17", + "type": "", + "value": "17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1049:6:17", + "nodeType": "YulIdentifier", + "src": "1049:6:17" + }, + "nativeSrc": "1049:30:17", + "nodeType": "YulFunctionCall", + "src": "1049:30:17" + }, + "nativeSrc": "1049:30:17", + "nodeType": "YulExpressionStatement", + "src": "1049:30:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1099:9:17", + "nodeType": "YulIdentifier", + "src": "1099:9:17" + }, + { + "kind": "number", + "nativeSrc": "1110:2:17", + "nodeType": "YulLiteral", + "src": "1110:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1095:3:17", + "nodeType": "YulIdentifier", + "src": "1095:3:17" + }, + "nativeSrc": "1095:18:17", + "nodeType": "YulFunctionCall", + "src": "1095:18:17" + }, + { + "hexValue": "496e76616c6964206d657373656e676572", + "kind": "string", + "nativeSrc": "1115:19:17", + "nodeType": "YulLiteral", + "src": "1115:19:17", + "type": "", + "value": "Invalid messenger" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1088:6:17", + "nodeType": "YulIdentifier", + "src": "1088:6:17" + }, + "nativeSrc": "1088:47:17", + "nodeType": "YulFunctionCall", + "src": "1088:47:17" + }, + "nativeSrc": "1088:47:17", + "nodeType": "YulExpressionStatement", + "src": "1088:47:17" + }, + { + "nativeSrc": "1144:26:17", + "nodeType": "YulAssignment", + "src": "1144:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1156:9:17", + "nodeType": "YulIdentifier", + "src": "1156:9:17" + }, + { + "kind": "number", + "nativeSrc": "1167:2:17", + "nodeType": "YulLiteral", + "src": "1167:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1152:3:17", + "nodeType": "YulIdentifier", + "src": "1152:3:17" + }, + "nativeSrc": "1152:18:17", + "nodeType": "YulFunctionCall", + "src": "1152:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1144:4:17", + "nodeType": "YulIdentifier", + "src": "1144:4:17" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "835:341:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "986:9:17", + "nodeType": "YulTypedName", + "src": "986:9:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1000:4:17", + "nodeType": "YulTypedName", + "src": "1000:4:17", + "type": "" + } + ], + "src": "835:341:17" + } + ] + }, + "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 12)\n mstore(add(headStart, 64), \"Invalid USDC\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 17)\n mstore(add(headStart, 64), \"Invalid messenger\")\n tail := add(headStart, 96)\n }\n}", + "id": 17, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "60c060405234801561000f575f5ffd5b50604051610ce5380380610ce583398101604081905261002e916100f4565b6001600160a01b0382166100785760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0381166100c25760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b604482015260640161006f565b6001600160a01b039182166080521660a052610125565b80516001600160a01b03811681146100ef575f5ffd5b919050565b5f5f60408385031215610105575f5ffd5b61010e836100d9565b915061011c602084016100d9565b90509250929050565b60805160a051610b956101505f395f8181608b015260df01525f81816048015260be0152610b955ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80633e413bee146100435780634611783014610086578063ada7ee88146100ad575b5f5ffd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b61006a6100bb366004610199565b5f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008360405161010b9061018c565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015610144573d5f5f3e3d5ffd5b509050816001600160a01b0316816001600160a01b03167fe2bfc35fa05117daee61105a0b06dde9b00b3f98c90eb430a7d5a05f1dc994d660405160405180910390a3919050565b610999806101c783390190565b5f602082840312156101a9575f5ffd5b81356001600160a01b03811681146101bf575f5ffd5b939250505056fe610100604052348015610010575f5ffd5b5060405161099938038061099983398101604081905261002f9161016e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03831661009d5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0382166100e75760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b6044820152606401610094565b6001600160a01b0381166101315760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610094565b6001600160a01b0392831660805290821660a0521660c081905260e0526101ae565b80516001600160a01b0381168114610169575f5ffd5b919050565b5f5f5f60608486031215610180575f5ffd5b61018984610153565b925061019760208501610153565b91506101a560408501610153565b90509250925092565b60805160a05160c05160e05161077c61021d5f395f818161016701528181610348015261047701525f608e01525f818160f9015281816102f001528181610317015261044101525f818160d201528181610202015281816102ce01528181610369015261041d015261077c5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063acef1c5711610058578063acef1c5714610130578063c6db9c871461014c578063c74ee95714610162578063dccf984614610189575f5ffd5b806309bdf150146100895780633e413bee146100cd57806346117830146100f457806362cef4b91461011b575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6101225f81565b6040519081526020016100c4565b6101375f81565b60405163ffffffff90911681526020016100c4565b6101226b18d8dd1c0b599bdc9dd85c9960a21b81565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b61019c610197366004610672565b61019e565b005b6101a6610524565b5f83116101eb5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561024f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027391906106b0565b10156102c15760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420555344432062616c616e63650000000000000060448201526064016101e2565b6103156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610552565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663779b432d845f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f5f1b88886b18d8dd1c0b599bdc9dd85c9960a21b5f1b6040516020016103b191815260200190565b6040516020818303038152906040526040518963ffffffff1660e01b81526004016103e39897969594939291906106c7565b5f604051808303815f87803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b506104669250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000005f610552565b604080518481525f602082018190527f00000000000000000000000000000000000000000000000000000000000000008284015260608201526080810184905263ffffffff831660a08201526b18d8dd1c0b599bdc9dd85c9960a21b60c0820152905133917f3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6919081900360e00190a261051f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b61052c6105cc565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61055e8383835f610610565b61051f5761056f83835f6001610610565b61059757604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b6105a48383836001610610565b61051f57604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361060e57604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661066657838315161561065a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f5f5f60608486031215610684575f5ffd5b8335925060208401359150604084013563ffffffff811681146106a5575f5ffd5b809150509250925092565b5f602082840312156106c0575f5ffd5b5051919050565b88815263ffffffff8816602082015286604082015260018060a01b03861660608201528460808201528360a082015263ffffffff831660c082015261010060e08201525f825180610100840152806020850161012085015e5f6101208285010152610120601f19601f830116840101915050999850505050505050505056fea2646970667358221220b76c50a6e2d835a1079f67de279f46d3362268b2a2daa5b5e1a88be179ff8e9164736f6c634300081c0033a264697066735822122028f11a1d2c5b9fe443e13fa13bed25a04fa72f1b95484d50d1d7d416100402bf64736f6c634300081c0033", + "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xCE5 CODESIZE SUB DUP1 PUSH2 0xCE5 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2E SWAP2 PUSH2 0xF4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x78 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642055534443 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x24B73B30B634B21036B2B9B9B2B733B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x6F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x80 MSTORE AND PUSH1 0xA0 MSTORE PUSH2 0x125 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xEF JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x105 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x10E DUP4 PUSH2 0xD9 JUMP JUMPDEST SWAP2 POP PUSH2 0x11C PUSH1 0x20 DUP5 ADD PUSH2 0xD9 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0xB95 PUSH2 0x150 PUSH0 CODECOPY PUSH0 DUP2 DUP2 PUSH1 0x8B ADD MSTORE PUSH1 0xDF ADD MSTORE PUSH0 DUP2 DUP2 PUSH1 0x48 ADD MSTORE PUSH1 0xBE ADD MSTORE PUSH2 0xB95 PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3E413BEE EQ PUSH2 0x43 JUMPI DUP1 PUSH4 0x46117830 EQ PUSH2 0x86 JUMPI DUP1 PUSH4 0xADA7EE88 EQ PUSH2 0xAD JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x6A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x6A PUSH2 0xBB CALLDATASIZE PUSH1 0x4 PUSH2 0x199 JUMP JUMPDEST PUSH0 PUSH32 0x0 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD PUSH2 0x10B SWAP1 PUSH2 0x18C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x144 JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE2BFC35FA05117DAEE61105A0B06DDE9B00B3F98C90EB430A7D5A05F1DC994D6 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x999 DUP1 PUSH2 0x1C7 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A9 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BF JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x999 CODESIZE SUB DUP1 PUSH2 0x999 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x16E JUMP JUMPDEST PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642055534443 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x24B73B30B634B21036B2B9B9B2B733B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x94 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x125B9D985B1A59081C9958DA5C1A595B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x94 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x80 MSTORE SWAP1 DUP3 AND PUSH1 0xA0 MSTORE AND PUSH1 0xC0 DUP2 SWAP1 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x1AE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x169 JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x180 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x189 DUP5 PUSH2 0x153 JUMP JUMPDEST SWAP3 POP PUSH2 0x197 PUSH1 0x20 DUP6 ADD PUSH2 0x153 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A5 PUSH1 0x40 DUP6 ADD PUSH2 0x153 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x77C PUSH2 0x21D PUSH0 CODECOPY PUSH0 DUP2 DUP2 PUSH2 0x167 ADD MSTORE DUP2 DUP2 PUSH2 0x348 ADD MSTORE PUSH2 0x477 ADD MSTORE PUSH0 PUSH1 0x8E ADD MSTORE PUSH0 DUP2 DUP2 PUSH1 0xF9 ADD MSTORE DUP2 DUP2 PUSH2 0x2F0 ADD MSTORE DUP2 DUP2 PUSH2 0x317 ADD MSTORE PUSH2 0x441 ADD MSTORE PUSH0 DUP2 DUP2 PUSH1 0xD2 ADD MSTORE DUP2 DUP2 PUSH2 0x202 ADD MSTORE DUP2 DUP2 PUSH2 0x2CE ADD MSTORE DUP2 DUP2 PUSH2 0x369 ADD MSTORE PUSH2 0x41D ADD MSTORE PUSH2 0x77C PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x85 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xACEF1C57 GT PUSH2 0x58 JUMPI DUP1 PUSH4 0xACEF1C57 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0xC6DB9C87 EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0xC74EE957 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xDCCF9846 EQ PUSH2 0x189 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 PUSH4 0x9BDF150 EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0x3E413BEE EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x46117830 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x62CEF4B9 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x137 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x122 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x672 JUMP JUMPDEST PUSH2 0x19E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1A6 PUSH2 0x524 JUMP JUMPDEST PUSH0 DUP4 GT PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x125B9D985B1A5908185B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x6B0 JUMP JUMPDEST LT ISZERO PUSH2 0x2C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420555344432062616C616E636500000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x315 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP6 PUSH2 0x552 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x779B432D DUP5 PUSH0 PUSH32 0x0 PUSH32 0x0 PUSH0 PUSH0 SHL DUP9 DUP9 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH0 SHL PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3B1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3E3 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6C7 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3FA JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x40C JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP PUSH2 0x466 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 POP PUSH32 0x0 PUSH0 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x3F298CACAEFADF0A6BFEF4DFEEAF3ECA0C68D70E5CB8F1B5288E7540A9E95ED6 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG2 PUSH2 0x51F PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x52C PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST PUSH2 0x55E DUP4 DUP4 DUP4 PUSH0 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH2 0x56F DUP4 DUP4 PUSH0 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x597 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x5A4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SLOAD PUSH1 0x2 SUB PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 DUP6 SWAP1 MSTORE SWAP2 PUSH1 0x20 DUP4 PUSH1 0x44 DUP2 DUP1 DUP12 GAS CALL SWAP3 POP PUSH1 0x1 PUSH0 MLOAD EQ DUP4 AND PUSH2 0x666 JUMPI DUP4 DUP4 ISZERO AND ISZERO PUSH2 0x65A JUMPI RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST PUSH0 DUP8 EXTCODESIZE GT RETURNDATASIZE ISZERO AND DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x40 MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x684 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6A5 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6C0 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP9 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE DUP5 PUSH1 0x80 DUP3 ADD MSTORE DUP4 PUSH1 0xA0 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x100 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 DUP3 MLOAD DUP1 PUSH2 0x100 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD PUSH2 0x120 DUP6 ADD MCOPY PUSH0 PUSH2 0x120 DUP3 DUP6 ADD ADD MSTORE PUSH2 0x120 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB7 PUSH13 0x50A6E2D835A1079F67DE279F46 0xD3 CALLDATASIZE 0x22 PUSH9 0xB2A2DAA5B5E1A88BE1 PUSH26 0xFF8E9164736F6C634300081C0033A264697066735822122028F1 BYTE SAR 0x2C JUMPDEST SWAP16 0xE4 NUMBER 0xE1 EXTCODEHASH LOG1 EXTCODESIZE 0xED 0x25 LOG0 0x4F 0xA7 0x2F SHL SWAP6 BASEFEE 0x4D POP 0xD1 0xD7 0xD4 AND LT DIV MUL 0xBF PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ", + "sourceMap": "126:773:13:-:0;;;371:247;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;441:19:13;;433:44;;;;-1:-1:-1;;;433:44:13;;696:2:17;433:44:13;;;678:21:17;735:2;715:18;;;708:30;-1:-1:-1;;;754:18:17;;;747:42;806:18;;433:44:13;;;;;;;;;-1:-1:-1;;;;;495:29:13;;487:59;;;;-1:-1:-1;;;487:59:13;;1037:2:17;487:59:13;;;1019:21:17;1076:2;1056:18;;;1049:30;-1:-1:-1;;;1095:18:17;;;1088:47;1152:18;;487:59:13;835:341:17;487:59:13;-1:-1:-1;;;;;557:12:13;;;;;579:32;;;126:773;;14:177:17;93:13;;-1:-1:-1;;;;;135:31:17;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;835:341::-;126:773:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@deploySettlement_1876": { + "entryPoint": null, + "id": 1876, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@tokenMessenger_1808": { + "entryPoint": null, + "id": 1808, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@usdc_1806": { + "entryPoint": null, + "id": 1806, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_tuple_t_address": { + "entryPoint": 409, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:912:17", + "nodeType": "YulBlock", + "src": "0:912:17", + "statements": [ + { + "nativeSrc": "6:3:17", + "nodeType": "YulBlock", + "src": "6:3:17", + "statements": [] + }, + { + "body": { + "nativeSrc": "115:102:17", + "nodeType": "YulBlock", + "src": "115:102:17", + "statements": [ + { + "nativeSrc": "125:26:17", + "nodeType": "YulAssignment", + "src": "125:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "137:9:17", + "nodeType": "YulIdentifier", + "src": "137:9:17" + }, + { + "kind": "number", + "nativeSrc": "148:2:17", + "nodeType": "YulLiteral", + "src": "148:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "133:3:17", + "nodeType": "YulIdentifier", + "src": "133:3:17" + }, + "nativeSrc": "133:18:17", + "nodeType": "YulFunctionCall", + "src": "133:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "125:4:17", + "nodeType": "YulIdentifier", + "src": "125:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "167:9:17", + "nodeType": "YulIdentifier", + "src": "167:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "182:6:17", + "nodeType": "YulIdentifier", + "src": "182:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "198:3:17", + "nodeType": "YulLiteral", + "src": "198:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "203:1:17", + "nodeType": "YulLiteral", + "src": "203:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "194:3:17", + "nodeType": "YulIdentifier", + "src": "194:3:17" + }, + "nativeSrc": "194:11:17", + "nodeType": "YulFunctionCall", + "src": "194:11:17" + }, + { + "kind": "number", + "nativeSrc": "207:1:17", + "nodeType": "YulLiteral", + "src": "207:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "190:3:17", + "nodeType": "YulIdentifier", + "src": "190:3:17" + }, + "nativeSrc": "190:19:17", + "nodeType": "YulFunctionCall", + "src": "190:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "178:3:17", + "nodeType": "YulIdentifier", + "src": "178:3:17" + }, + "nativeSrc": "178:32:17", + "nodeType": "YulFunctionCall", + "src": "178:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "160:6:17", + "nodeType": "YulIdentifier", + "src": "160:6:17" + }, + "nativeSrc": "160:51:17", + "nodeType": "YulFunctionCall", + "src": "160:51:17" + }, + "nativeSrc": "160:51:17", + "nodeType": "YulExpressionStatement", + "src": "160:51:17" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "14:203:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "84:9:17", + "nodeType": "YulTypedName", + "src": "84:9:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "95:6:17", + "nodeType": "YulTypedName", + "src": "95:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "106:4:17", + "nodeType": "YulTypedName", + "src": "106:4:17", + "type": "" + } + ], + "src": "14:203:17" + }, + { + "body": { + "nativeSrc": "292:216:17", + "nodeType": "YulBlock", + "src": "292:216:17", + "statements": [ + { + "body": { + "nativeSrc": "338:16:17", + "nodeType": "YulBlock", + "src": "338:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "347:1:17", + "nodeType": "YulLiteral", + "src": "347:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "350:1:17", + "nodeType": "YulLiteral", + "src": "350:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "340:6:17", + "nodeType": "YulIdentifier", + "src": "340:6:17" + }, + "nativeSrc": "340:12:17", + "nodeType": "YulFunctionCall", + "src": "340:12:17" + }, + "nativeSrc": "340:12:17", + "nodeType": "YulExpressionStatement", + "src": "340:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "313:7:17", + "nodeType": "YulIdentifier", + "src": "313:7:17" + }, + { + "name": "headStart", + "nativeSrc": "322:9:17", + "nodeType": "YulIdentifier", + "src": "322:9:17" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "309:3:17", + "nodeType": "YulIdentifier", + "src": "309:3:17" + }, + "nativeSrc": "309:23:17", + "nodeType": "YulFunctionCall", + "src": "309:23:17" + }, + { + "kind": "number", + "nativeSrc": "334:2:17", + "nodeType": "YulLiteral", + "src": "334:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "305:3:17", + "nodeType": "YulIdentifier", + "src": "305:3:17" + }, + "nativeSrc": "305:32:17", + "nodeType": "YulFunctionCall", + "src": "305:32:17" + }, + "nativeSrc": "302:52:17", + "nodeType": "YulIf", + "src": "302:52:17" + }, + { + "nativeSrc": "363:36:17", + "nodeType": "YulVariableDeclaration", + "src": "363:36:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "389:9:17", + "nodeType": "YulIdentifier", + "src": "389:9:17" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "376:12:17", + "nodeType": "YulIdentifier", + "src": "376:12:17" + }, + "nativeSrc": "376:23:17", + "nodeType": "YulFunctionCall", + "src": "376:23:17" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "367:5:17", + "nodeType": "YulTypedName", + "src": "367:5:17", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "462:16:17", + "nodeType": "YulBlock", + "src": "462:16:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "471:1:17", + "nodeType": "YulLiteral", + "src": "471:1:17", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "474:1:17", + "nodeType": "YulLiteral", + "src": "474:1:17", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "464:6:17", + "nodeType": "YulIdentifier", + "src": "464:6:17" + }, + "nativeSrc": "464:12:17", + "nodeType": "YulFunctionCall", + "src": "464:12:17" + }, + "nativeSrc": "464:12:17", + "nodeType": "YulExpressionStatement", + "src": "464:12:17" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "421:5:17", + "nodeType": "YulIdentifier", + "src": "421:5:17" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "432:5:17", + "nodeType": "YulIdentifier", + "src": "432:5:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "447:3:17", + "nodeType": "YulLiteral", + "src": "447:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "452:1:17", + "nodeType": "YulLiteral", + "src": "452:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "443:3:17", + "nodeType": "YulIdentifier", + "src": "443:3:17" + }, + "nativeSrc": "443:11:17", + "nodeType": "YulFunctionCall", + "src": "443:11:17" + }, + { + "kind": "number", + "nativeSrc": "456:1:17", + "nodeType": "YulLiteral", + "src": "456:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "439:3:17", + "nodeType": "YulIdentifier", + "src": "439:3:17" + }, + "nativeSrc": "439:19:17", + "nodeType": "YulFunctionCall", + "src": "439:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "428:3:17", + "nodeType": "YulIdentifier", + "src": "428:3:17" + }, + "nativeSrc": "428:31:17", + "nodeType": "YulFunctionCall", + "src": "428:31:17" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "418:2:17", + "nodeType": "YulIdentifier", + "src": "418:2:17" + }, + "nativeSrc": "418:42:17", + "nodeType": "YulFunctionCall", + "src": "418:42:17" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "411:6:17", + "nodeType": "YulIdentifier", + "src": "411:6:17" + }, + "nativeSrc": "411:50:17", + "nodeType": "YulFunctionCall", + "src": "411:50:17" + }, + "nativeSrc": "408:70:17", + "nodeType": "YulIf", + "src": "408:70:17" + }, + { + "nativeSrc": "487:15:17", + "nodeType": "YulAssignment", + "src": "487:15:17", + "value": { + "name": "value", + "nativeSrc": "497:5:17", + "nodeType": "YulIdentifier", + "src": "497:5:17" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "487:6:17", + "nodeType": "YulIdentifier", + "src": "487:6:17" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nativeSrc": "222:286:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "258:9:17", + "nodeType": "YulTypedName", + "src": "258:9:17", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "269:7:17", + "nodeType": "YulTypedName", + "src": "269:7:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "281:6:17", + "nodeType": "YulTypedName", + "src": "281:6:17", + "type": "" + } + ], + "src": "222:286:17" + }, + { + "body": { + "nativeSrc": "670:240:17", + "nodeType": "YulBlock", + "src": "670:240:17", + "statements": [ + { + "nativeSrc": "680:26:17", + "nodeType": "YulAssignment", + "src": "680:26:17", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "692:9:17", + "nodeType": "YulIdentifier", + "src": "692:9:17" + }, + { + "kind": "number", + "nativeSrc": "703:2:17", + "nodeType": "YulLiteral", + "src": "703:2:17", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "688:3:17", + "nodeType": "YulIdentifier", + "src": "688:3:17" + }, + "nativeSrc": "688:18:17", + "nodeType": "YulFunctionCall", + "src": "688:18:17" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "680:4:17", + "nodeType": "YulIdentifier", + "src": "680:4:17" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "722:9:17", + "nodeType": "YulIdentifier", + "src": "722:9:17" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "737:6:17", + "nodeType": "YulIdentifier", + "src": "737:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "753:3:17", + "nodeType": "YulLiteral", + "src": "753:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "758:1:17", + "nodeType": "YulLiteral", + "src": "758:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "749:3:17", + "nodeType": "YulIdentifier", + "src": "749:3:17" + }, + "nativeSrc": "749:11:17", + "nodeType": "YulFunctionCall", + "src": "749:11:17" + }, + { + "kind": "number", + "nativeSrc": "762:1:17", + "nodeType": "YulLiteral", + "src": "762:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "745:3:17", + "nodeType": "YulIdentifier", + "src": "745:3:17" + }, + "nativeSrc": "745:19:17", + "nodeType": "YulFunctionCall", + "src": "745:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "733:3:17", + "nodeType": "YulIdentifier", + "src": "733:3:17" + }, + "nativeSrc": "733:32:17", + "nodeType": "YulFunctionCall", + "src": "733:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "715:6:17", + "nodeType": "YulIdentifier", + "src": "715:6:17" + }, + "nativeSrc": "715:51:17", + "nodeType": "YulFunctionCall", + "src": "715:51:17" + }, + "nativeSrc": "715:51:17", + "nodeType": "YulExpressionStatement", + "src": "715:51:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "786:9:17", + "nodeType": "YulIdentifier", + "src": "786:9:17" + }, + { + "kind": "number", + "nativeSrc": "797:2:17", + "nodeType": "YulLiteral", + "src": "797:2:17", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "782:3:17", + "nodeType": "YulIdentifier", + "src": "782:3:17" + }, + "nativeSrc": "782:18:17", + "nodeType": "YulFunctionCall", + "src": "782:18:17" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "806:6:17", + "nodeType": "YulIdentifier", + "src": "806:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "822:3:17", + "nodeType": "YulLiteral", + "src": "822:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "827:1:17", + "nodeType": "YulLiteral", + "src": "827:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "818:3:17", + "nodeType": "YulIdentifier", + "src": "818:3:17" + }, + "nativeSrc": "818:11:17", + "nodeType": "YulFunctionCall", + "src": "818:11:17" + }, + { + "kind": "number", + "nativeSrc": "831:1:17", + "nodeType": "YulLiteral", + "src": "831:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "814:3:17", + "nodeType": "YulIdentifier", + "src": "814:3:17" + }, + "nativeSrc": "814:19:17", + "nodeType": "YulFunctionCall", + "src": "814:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "802:3:17", + "nodeType": "YulIdentifier", + "src": "802:3:17" + }, + "nativeSrc": "802:32:17", + "nodeType": "YulFunctionCall", + "src": "802:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "775:6:17", + "nodeType": "YulIdentifier", + "src": "775:6:17" + }, + "nativeSrc": "775:60:17", + "nodeType": "YulFunctionCall", + "src": "775:60:17" + }, + "nativeSrc": "775:60:17", + "nodeType": "YulExpressionStatement", + "src": "775:60:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "855:9:17", + "nodeType": "YulIdentifier", + "src": "855:9:17" + }, + { + "kind": "number", + "nativeSrc": "866:2:17", + "nodeType": "YulLiteral", + "src": "866:2:17", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "851:3:17", + "nodeType": "YulIdentifier", + "src": "851:3:17" + }, + "nativeSrc": "851:18:17", + "nodeType": "YulFunctionCall", + "src": "851:18:17" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "875:6:17", + "nodeType": "YulIdentifier", + "src": "875:6:17" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "891:3:17", + "nodeType": "YulLiteral", + "src": "891:3:17", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "896:1:17", + "nodeType": "YulLiteral", + "src": "896:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "887:3:17", + "nodeType": "YulIdentifier", + "src": "887:3:17" + }, + "nativeSrc": "887:11:17", + "nodeType": "YulFunctionCall", + "src": "887:11:17" + }, + { + "kind": "number", + "nativeSrc": "900:1:17", + "nodeType": "YulLiteral", + "src": "900:1:17", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "883:3:17", + "nodeType": "YulIdentifier", + "src": "883:3:17" + }, + "nativeSrc": "883:19:17", + "nodeType": "YulFunctionCall", + "src": "883:19:17" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "871:3:17", + "nodeType": "YulIdentifier", + "src": "871:3:17" + }, + "nativeSrc": "871:32:17", + "nodeType": "YulFunctionCall", + "src": "871:32:17" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "844:6:17", + "nodeType": "YulIdentifier", + "src": "844:6:17" + }, + "nativeSrc": "844:60:17", + "nodeType": "YulFunctionCall", + "src": "844:60:17" + }, + "nativeSrc": "844:60:17", + "nodeType": "YulExpressionStatement", + "src": "844:60:17" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed", + "nativeSrc": "513:397:17", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "623:9:17", + "nodeType": "YulTypedName", + "src": "623:9:17", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "634:6:17", + "nodeType": "YulTypedName", + "src": "634:6:17", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "642:6:17", + "nodeType": "YulTypedName", + "src": "642:6:17", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "650:6:17", + "nodeType": "YulTypedName", + "src": "650:6:17", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "661:4:17", + "nodeType": "YulTypedName", + "src": "661:4:17", + "type": "" + } + ], + "src": "513:397:17" + } + ] + }, + "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n }\n}", + "id": 17, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": { + "1806": [ + { + "length": 32, + "start": 72 + }, + { + "length": 32, + "start": 190 + } + ], + "1808": [ + { + "length": 32, + "start": 139 + }, + { + "length": 32, + "start": 223 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80633e413bee146100435780634611783014610086578063ada7ee88146100ad575b5f5ffd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b61006a6100bb366004610199565b5f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008360405161010b9061018c565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015610144573d5f5f3e3d5ffd5b509050816001600160a01b0316816001600160a01b03167fe2bfc35fa05117daee61105a0b06dde9b00b3f98c90eb430a7d5a05f1dc994d660405160405180910390a3919050565b610999806101c783390190565b5f602082840312156101a9575f5ffd5b81356001600160a01b03811681146101bf575f5ffd5b939250505056fe610100604052348015610010575f5ffd5b5060405161099938038061099983398101604081905261002f9161016e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03831661009d5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0382166100e75760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b6044820152606401610094565b6001600160a01b0381166101315760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610094565b6001600160a01b0392831660805290821660a0521660c081905260e0526101ae565b80516001600160a01b0381168114610169575f5ffd5b919050565b5f5f5f60608486031215610180575f5ffd5b61018984610153565b925061019760208501610153565b91506101a560408501610153565b90509250925092565b60805160a05160c05160e05161077c61021d5f395f818161016701528181610348015261047701525f608e01525f818160f9015281816102f001528181610317015261044101525f818160d201528181610202015281816102ce01528181610369015261041d015261077c5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063acef1c5711610058578063acef1c5714610130578063c6db9c871461014c578063c74ee95714610162578063dccf984614610189575f5ffd5b806309bdf150146100895780633e413bee146100cd57806346117830146100f457806362cef4b91461011b575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6101225f81565b6040519081526020016100c4565b6101375f81565b60405163ffffffff90911681526020016100c4565b6101226b18d8dd1c0b599bdc9dd85c9960a21b81565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b61019c610197366004610672565b61019e565b005b6101a6610524565b5f83116101eb5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561024f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027391906106b0565b10156102c15760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420555344432062616c616e63650000000000000060448201526064016101e2565b6103156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610552565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663779b432d845f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f5f1b88886b18d8dd1c0b599bdc9dd85c9960a21b5f1b6040516020016103b191815260200190565b6040516020818303038152906040526040518963ffffffff1660e01b81526004016103e39897969594939291906106c7565b5f604051808303815f87803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b506104669250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000005f610552565b604080518481525f602082018190527f00000000000000000000000000000000000000000000000000000000000000008284015260608201526080810184905263ffffffff831660a08201526b18d8dd1c0b599bdc9dd85c9960a21b60c0820152905133917f3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6919081900360e00190a261051f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b61052c6105cc565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61055e8383835f610610565b61051f5761056f83835f6001610610565b61059757604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b6105a48383836001610610565b61051f57604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361060e57604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661066657838315161561065a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f5f5f60608486031215610684575f5ffd5b8335925060208401359150604084013563ffffffff811681146106a5575f5ffd5b809150509250925092565b5f602082840312156106c0575f5ffd5b5051919050565b88815263ffffffff8816602082015286604082015260018060a01b03861660608201528460808201528360a082015263ffffffff831660c082015261010060e08201525f825180610100840152806020850161012085015e5f6101208285010152610120601f19601f830116840101915050999850505050505050505056fea2646970667358221220b76c50a6e2d835a1079f67de279f46d3362268b2a2daa5b5e1a88be179ff8e9164736f6c634300081c0033a264697066735822122028f11a1d2c5b9fe443e13fa13bed25a04fa72f1b95484d50d1d7d416100402bf64736f6c634300081c0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3E413BEE EQ PUSH2 0x43 JUMPI DUP1 PUSH4 0x46117830 EQ PUSH2 0x86 JUMPI DUP1 PUSH4 0xADA7EE88 EQ PUSH2 0xAD JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x6A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x6A PUSH2 0xBB CALLDATASIZE PUSH1 0x4 PUSH2 0x199 JUMP JUMPDEST PUSH0 PUSH32 0x0 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD PUSH2 0x10B SWAP1 PUSH2 0x18C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x144 JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE2BFC35FA05117DAEE61105A0B06DDE9B00B3F98C90EB430A7D5A05F1DC994D6 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x999 DUP1 PUSH2 0x1C7 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A9 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BF JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x999 CODESIZE SUB DUP1 PUSH2 0x999 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x16E JUMP JUMPDEST PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x496E76616C69642055534443 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x24B73B30B634B21036B2B9B9B2B733B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x94 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x125B9D985B1A59081C9958DA5C1A595B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x94 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x80 MSTORE SWAP1 DUP3 AND PUSH1 0xA0 MSTORE AND PUSH1 0xC0 DUP2 SWAP1 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x1AE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x169 JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x180 JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x189 DUP5 PUSH2 0x153 JUMP JUMPDEST SWAP3 POP PUSH2 0x197 PUSH1 0x20 DUP6 ADD PUSH2 0x153 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A5 PUSH1 0x40 DUP6 ADD PUSH2 0x153 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x77C PUSH2 0x21D PUSH0 CODECOPY PUSH0 DUP2 DUP2 PUSH2 0x167 ADD MSTORE DUP2 DUP2 PUSH2 0x348 ADD MSTORE PUSH2 0x477 ADD MSTORE PUSH0 PUSH1 0x8E ADD MSTORE PUSH0 DUP2 DUP2 PUSH1 0xF9 ADD MSTORE DUP2 DUP2 PUSH2 0x2F0 ADD MSTORE DUP2 DUP2 PUSH2 0x317 ADD MSTORE PUSH2 0x441 ADD MSTORE PUSH0 DUP2 DUP2 PUSH1 0xD2 ADD MSTORE DUP2 DUP2 PUSH2 0x202 ADD MSTORE DUP2 DUP2 PUSH2 0x2CE ADD MSTORE DUP2 DUP2 PUSH2 0x369 ADD MSTORE PUSH2 0x41D ADD MSTORE PUSH2 0x77C PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x85 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xACEF1C57 GT PUSH2 0x58 JUMPI DUP1 PUSH4 0xACEF1C57 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0xC6DB9C87 EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0xC74EE957 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0xDCCF9846 EQ PUSH2 0x189 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 PUSH4 0x9BDF150 EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0x3E413BEE EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x46117830 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x62CEF4B9 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xB0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x137 PUSH0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x122 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL DUP2 JUMP JUMPDEST PUSH2 0x122 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x672 JUMP JUMPDEST PUSH2 0x19E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1A6 PUSH2 0x524 JUMP JUMPDEST PUSH0 DUP4 GT PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x125B9D985B1A5908185B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x6B0 JUMP JUMPDEST LT ISZERO PUSH2 0x2C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E73756666696369656E7420555344432062616C616E636500000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x315 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP6 PUSH2 0x552 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x779B432D DUP5 PUSH0 PUSH32 0x0 PUSH32 0x0 PUSH0 PUSH0 SHL DUP9 DUP9 PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH0 SHL PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x3B1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3E3 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6C7 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3FA JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x40C JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP PUSH2 0x466 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 POP PUSH32 0x0 PUSH0 PUSH2 0x552 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH12 0x18D8DD1C0B599BDC9DD85C99 PUSH1 0xA2 SHL PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x3F298CACAEFADF0A6BFEF4DFEEAF3ECA0C68D70E5CB8F1B5288E7540A9E95ED6 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xE0 ADD SWAP1 LOG2 PUSH2 0x51F PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x52C PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE JUMP JUMPDEST PUSH2 0x55E DUP4 DUP4 DUP4 PUSH0 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH2 0x56F DUP4 DUP4 PUSH0 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x597 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x5A4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SLOAD PUSH1 0x2 SUB PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 DUP6 SWAP1 MSTORE SWAP2 PUSH1 0x20 DUP4 PUSH1 0x44 DUP2 DUP1 DUP12 GAS CALL SWAP3 POP PUSH1 0x1 PUSH0 MLOAD EQ DUP4 AND PUSH2 0x666 JUMPI DUP4 DUP4 ISZERO AND ISZERO PUSH2 0x65A JUMPI RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST PUSH0 DUP8 EXTCODESIZE GT RETURNDATASIZE ISZERO AND DUP4 AND SWAP3 POP JUMPDEST PUSH1 0x40 MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x684 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6A5 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6C0 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP9 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE DUP5 PUSH1 0x80 DUP3 ADD MSTORE DUP4 PUSH1 0xA0 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x100 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 DUP3 MLOAD DUP1 PUSH2 0x100 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD PUSH2 0x120 DUP6 ADD MCOPY PUSH0 PUSH2 0x120 DUP3 DUP6 ADD ADD MSTORE PUSH2 0x120 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB7 PUSH13 0x50A6E2D835A1079F67DE279F46 0xD3 CALLDATASIZE 0x22 PUSH9 0xB2A2DAA5B5E1A88BE1 PUSH26 0xFF8E9164736F6C634300081C0033A264697066735822122028F1 BYTE SAR 0x2C JUMPDEST SWAP16 0xE4 NUMBER 0xE1 EXTCODEHASH LOG1 EXTCODESIZE 0xED 0x25 LOG0 0x4F 0xA7 0x2F SHL SWAP6 BASEFEE 0x4D POP 0xD1 0xD7 0xD4 AND LT DIV MUL 0xBF PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ", + "sourceMap": "126:773:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;170:29;;;;;;;;-1:-1:-1;;;;;178:32:17;;;160:51;;148:2;133:18;170:29:13;;;;;;;205:39;;;;;624:273;;;;;;:::i;:::-;699:18;776:4;782:14;798:21;750:70;;;;;:::i;:::-;-1:-1:-1;;;;;733:32:17;;;715:51;;802:32;;;797:2;782:18;;775:60;871:32;;;866:2;851:18;;844:60;703:2;688:18;750:70:13;;;;;;;;;;;;;;;;;;;;;;;729:92;;868:21;-1:-1:-1;;;;;837:53:13;856:10;-1:-1:-1;;;;;837:53:13;;;;;;;;;;;624:273;;;:::o;-1:-1:-1:-;;;;;;;;:::o;222:286:17:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;376:23;;-1:-1:-1;;;;;428:31:17;;418:42;;408:70;;474:1;471;464:12;408:70;497:5;222:286;-1:-1:-1;;;222:286:17:o" + }, + "methodIdentifiers": { + "deploySettlement(address)": "ada7ee88", + "tokenMessenger()": "46117830", + "usdc()": "3e413bee" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usdc\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenMessenger\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"settlement\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ethereumMintRecipient\",\"type\":\"address\"}],\"name\":\"SettlementDeployed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ethereumMintRecipient\",\"type\":\"address\"}],\"name\":\"deploySettlement\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"settlement\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usdc\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PerUserCctpSettlementFactory.sol\":\"PerUserCctpSettlementFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x304d732678032a9781ae85c8f204c8fba3d3a5e31c02616964e75cfdc5049098\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://299ced486011781dc98f638059678323c03079fefae1482abaa2135b22fa92d0\",\"dweb:/ipfs/QmbZNbcPTBxNvwChavN2kkZZs7xHhYL7mv51KrxMhsMs3j\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99\",\"dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/PerUserCctpSettlement.sol\":{\"keccak256\":\"0x1eaa6c053c75db64c9becd970a5bc68290f4bac370fa1890bcac06a583523fe3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78f3ab328218231068e46ff821fb884b336568ba107901d735c539f81cff4ee\",\"dweb:/ipfs/QmdziTBm4eVJCNTBG7P5fX79mMASGajbn3KYMTxEcaCfoQ\"]},\"contracts/PerUserCctpSettlementFactory.sol\":{\"keccak256\":\"0xcb41e3e663e5b3c04ed40092c85e0019f2776725251c6436f4319e798878cc1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c9b2d0b6bc47f2ef1898dc509d74dd27fceda2c5596fc79c567e1c656533d02\",\"dweb:/ipfs/QmRVckZuLbP6n26uZQCK2EqTj3zifRGszT5363Hy2ngWyr\"]},\"contracts/interfaces/ITokenMessengerV2.sol\":{\"keccak256\":\"0x76b7d85feaf149e32f9fa3b2202d9a8436265a8424b2074dd792c9fa5bba6c42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9868ed7e99cc1def8409878c58151bd11322145864b1f3a705fb2be5494a37e7\",\"dweb:/ipfs/QmTiMymy6cHS7HYDDwEs15e1Qzo7H5JiLYNyzmZnVBGmsF\"]}},\"version\":1}" + } + } + }, + "sources": { + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", + "exportedSymbols": { + "IERC20Errors": [131], + "IERC721Errors": [179], + "IERC1155Errors": [226] + }, + "id": 227, + "license": "MIT", + "nodes": [ + { + "id": 91, + "literals": ["solidity", ">=", "0.8", ".4"], + "nodeType": "PragmaDirective", + "src": "113:24:3" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC20Errors", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 92, + "nodeType": "StructuredDocumentation", + "src": "139:141:3", + "text": " @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens." + }, + "fullyImplemented": true, + "id": 131, + "linearizedBaseContracts": [131], + "name": "IERC20Errors", + "nameLocation": "291:12:3", + "nodes": [ + { + "documentation": { + "id": 93, + "nodeType": "StructuredDocumentation", + "src": "310:309:3", + "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer." + }, + "errorSelector": "e450d38c", + "id": 101, + "name": "ERC20InsufficientBalance", + "nameLocation": "630:24:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 95, + "mutability": "mutable", + "name": "sender", + "nameLocation": "663:6:3", + "nodeType": "VariableDeclaration", + "scope": 101, + "src": "655:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 94, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "655:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 97, + "mutability": "mutable", + "name": "balance", + "nameLocation": "679:7:3", + "nodeType": "VariableDeclaration", + "scope": 101, + "src": "671:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 96, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "671:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 99, + "mutability": "mutable", + "name": "needed", + "nameLocation": "696:6:3", + "nodeType": "VariableDeclaration", + "scope": 101, + "src": "688:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 98, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "688:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "654:49:3" + }, + "src": "624:80:3" + }, + { + "documentation": { + "id": 102, + "nodeType": "StructuredDocumentation", + "src": "710:152:3", + "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred." + }, + "errorSelector": "96c6fd1e", + "id": 106, + "name": "ERC20InvalidSender", + "nameLocation": "873:18:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 105, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 104, + "mutability": "mutable", + "name": "sender", + "nameLocation": "900:6:3", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "892:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 103, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "892:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "891:16:3" + }, + "src": "867:41:3" + }, + { + "documentation": { + "id": 107, + "nodeType": "StructuredDocumentation", + "src": "914:159:3", + "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred." + }, + "errorSelector": "ec442f05", + "id": 111, + "name": "ERC20InvalidReceiver", + "nameLocation": "1084:20:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 110, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 109, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "1113:8:3", + "nodeType": "VariableDeclaration", + "scope": 111, + "src": "1105:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 108, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1105:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1104:18:3" + }, + "src": "1078:45:3" + }, + { + "documentation": { + "id": 112, + "nodeType": "StructuredDocumentation", + "src": "1129:345:3", + "text": " @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer." + }, + "errorSelector": "fb8f41b2", + "id": 120, + "name": "ERC20InsufficientAllowance", + "nameLocation": "1485:26:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 119, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 114, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1520:7:3", + "nodeType": "VariableDeclaration", + "scope": 120, + "src": "1512:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 113, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1512:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 116, + "mutability": "mutable", + "name": "allowance", + "nameLocation": "1537:9:3", + "nodeType": "VariableDeclaration", + "scope": 120, + "src": "1529:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 115, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1529:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 118, + "mutability": "mutable", + "name": "needed", + "nameLocation": "1556:6:3", + "nodeType": "VariableDeclaration", + "scope": 120, + "src": "1548:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 117, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1548:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1511:52:3" + }, + "src": "1479:85:3" + }, + { + "documentation": { + "id": 121, + "nodeType": "StructuredDocumentation", + "src": "1570:174:3", + "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation." + }, + "errorSelector": "e602df05", + "id": 125, + "name": "ERC20InvalidApprover", + "nameLocation": "1755:20:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 124, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 123, + "mutability": "mutable", + "name": "approver", + "nameLocation": "1784:8:3", + "nodeType": "VariableDeclaration", + "scope": 125, + "src": "1776:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 122, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1776:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1775:18:3" + }, + "src": "1749:45:3" + }, + { + "documentation": { + "id": 126, + "nodeType": "StructuredDocumentation", + "src": "1800:195:3", + "text": " @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner." + }, + "errorSelector": "94280d62", + "id": 130, + "name": "ERC20InvalidSpender", + "nameLocation": "2006:19:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 129, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 128, + "mutability": "mutable", + "name": "spender", + "nameLocation": "2034:7:3", + "nodeType": "VariableDeclaration", + "scope": 130, + "src": "2026:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 127, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2026:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2025:17:3" + }, + "src": "2000:43:3" + } + ], + "nodeType": "ContractDefinition", + "scope": 227, + "src": "281:1764:3", + "usedErrors": [101, 106, 111, 120, 125, 130], + "usedEvents": [] + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC721Errors", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 132, + "nodeType": "StructuredDocumentation", + "src": "2047:143:3", + "text": " @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens." + }, + "fullyImplemented": true, + "id": 179, + "linearizedBaseContracts": [179], + "name": "IERC721Errors", + "nameLocation": "2201:13:3", + "nodes": [ + { + "documentation": { + "id": 133, + "nodeType": "StructuredDocumentation", + "src": "2221:220:3", + "text": " @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721.\n Used in balance queries.\n @param owner Address of the current owner of a token." + }, + "errorSelector": "89c62b64", + "id": 137, + "name": "ERC721InvalidOwner", + "nameLocation": "2452:18:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 136, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 135, + "mutability": "mutable", + "name": "owner", + "nameLocation": "2479:5:3", + "nodeType": "VariableDeclaration", + "scope": 137, + "src": "2471:13:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 134, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2471:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2470:15:3" + }, + "src": "2446:40:3" + }, + { + "documentation": { + "id": 138, + "nodeType": "StructuredDocumentation", + "src": "2492:132:3", + "text": " @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token." + }, + "errorSelector": "7e273289", + "id": 142, + "name": "ERC721NonexistentToken", + "nameLocation": "2635:22:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 141, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 140, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "2666:7:3", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "2658:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 139, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2658:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2657:17:3" + }, + "src": "2629:46:3" + }, + { + "documentation": { + "id": 143, + "nodeType": "StructuredDocumentation", + "src": "2681:289:3", + "text": " @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token." + }, + "errorSelector": "64283d7b", + "id": 151, + "name": "ERC721IncorrectOwner", + "nameLocation": "2981:20:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 150, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 145, + "mutability": "mutable", + "name": "sender", + "nameLocation": "3010:6:3", + "nodeType": "VariableDeclaration", + "scope": 151, + "src": "3002:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 144, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3002:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 147, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "3026:7:3", + "nodeType": "VariableDeclaration", + "scope": 151, + "src": "3018:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 146, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3018:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 149, + "mutability": "mutable", + "name": "owner", + "nameLocation": "3043:5:3", + "nodeType": "VariableDeclaration", + "scope": 151, + "src": "3035:13:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 148, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3035:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3001:48:3" + }, + "src": "2975:75:3" + }, + { + "documentation": { + "id": 152, + "nodeType": "StructuredDocumentation", + "src": "3056:152:3", + "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred." + }, + "errorSelector": "73c6ac6e", + "id": 156, + "name": "ERC721InvalidSender", + "nameLocation": "3219:19:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 154, + "mutability": "mutable", + "name": "sender", + "nameLocation": "3247:6:3", + "nodeType": "VariableDeclaration", + "scope": 156, + "src": "3239:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 153, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3239:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3238:16:3" + }, + "src": "3213:42:3" + }, + { + "documentation": { + "id": 157, + "nodeType": "StructuredDocumentation", + "src": "3261:159:3", + "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred." + }, + "errorSelector": "64a0ae92", + "id": 161, + "name": "ERC721InvalidReceiver", + "nameLocation": "3431:21:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 160, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 159, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "3461:8:3", + "nodeType": "VariableDeclaration", + "scope": 161, + "src": "3453:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 158, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3453:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3452:18:3" + }, + "src": "3425:46:3" + }, + { + "documentation": { + "id": 162, + "nodeType": "StructuredDocumentation", + "src": "3477:247:3", + "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token." + }, + "errorSelector": "177e802f", + "id": 168, + "name": "ERC721InsufficientApproval", + "nameLocation": "3735:26:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 167, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 164, + "mutability": "mutable", + "name": "operator", + "nameLocation": "3770:8:3", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3762:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 163, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3762:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 166, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "3788:7:3", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3780:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 165, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3780:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3761:35:3" + }, + "src": "3729:68:3" + }, + { + "documentation": { + "id": 169, + "nodeType": "StructuredDocumentation", + "src": "3803:174:3", + "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation." + }, + "errorSelector": "a9fbf51f", + "id": 173, + "name": "ERC721InvalidApprover", + "nameLocation": "3988:21:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 171, + "mutability": "mutable", + "name": "approver", + "nameLocation": "4018:8:3", + "nodeType": "VariableDeclaration", + "scope": 173, + "src": "4010:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 170, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4010:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4009:18:3" + }, + "src": "3982:46:3" + }, + { + "documentation": { + "id": 174, + "nodeType": "StructuredDocumentation", + "src": "4034:197:3", + "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner." + }, + "errorSelector": "5b08ba18", + "id": 178, + "name": "ERC721InvalidOperator", + "nameLocation": "4242:21:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 177, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 176, + "mutability": "mutable", + "name": "operator", + "nameLocation": "4272:8:3", + "nodeType": "VariableDeclaration", + "scope": 178, + "src": "4264:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 175, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4264:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4263:18:3" + }, + "src": "4236:46:3" + } + ], + "nodeType": "ContractDefinition", + "scope": 227, + "src": "2191:2093:3", + "usedErrors": [137, 142, 151, 156, 161, 168, 173, 178], + "usedEvents": [] + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC1155Errors", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 180, + "nodeType": "StructuredDocumentation", + "src": "4286:145:3", + "text": " @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens." + }, + "fullyImplemented": true, + "id": 226, + "linearizedBaseContracts": [226], + "name": "IERC1155Errors", + "nameLocation": "4442:14:3", + "nodes": [ + { + "documentation": { + "id": 181, + "nodeType": "StructuredDocumentation", + "src": "4463:361:3", + "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token." + }, + "errorSelector": "03dee4c5", + "id": 191, + "name": "ERC1155InsufficientBalance", + "nameLocation": "4835:26:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 190, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 183, + "mutability": "mutable", + "name": "sender", + "nameLocation": "4870:6:3", + "nodeType": "VariableDeclaration", + "scope": 191, + "src": "4862:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 182, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4862:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 185, + "mutability": "mutable", + "name": "balance", + "nameLocation": "4886:7:3", + "nodeType": "VariableDeclaration", + "scope": 191, + "src": "4878:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 184, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4878:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 187, + "mutability": "mutable", + "name": "needed", + "nameLocation": "4903:6:3", + "nodeType": "VariableDeclaration", + "scope": 191, + "src": "4895:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 186, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4895:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 189, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "4919:7:3", + "nodeType": "VariableDeclaration", + "scope": 191, + "src": "4911:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 188, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4911:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4861:66:3" + }, + "src": "4829:99:3" + }, + { + "documentation": { + "id": 192, + "nodeType": "StructuredDocumentation", + "src": "4934:152:3", + "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred." + }, + "errorSelector": "01a83514", + "id": 196, + "name": "ERC1155InvalidSender", + "nameLocation": "5097:20:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 194, + "mutability": "mutable", + "name": "sender", + "nameLocation": "5126:6:3", + "nodeType": "VariableDeclaration", + "scope": 196, + "src": "5118:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 193, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5118:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5117:16:3" + }, + "src": "5091:43:3" + }, + { + "documentation": { + "id": 197, + "nodeType": "StructuredDocumentation", + "src": "5140:159:3", + "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred." + }, + "errorSelector": "57f447ce", + "id": 201, + "name": "ERC1155InvalidReceiver", + "nameLocation": "5310:22:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 200, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 199, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "5341:8:3", + "nodeType": "VariableDeclaration", + "scope": 201, + "src": "5333:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 198, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5333:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5332:18:3" + }, + "src": "5304:47:3" + }, + { + "documentation": { + "id": 202, + "nodeType": "StructuredDocumentation", + "src": "5357:256:3", + "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token." + }, + "errorSelector": "e237d922", + "id": 208, + "name": "ERC1155MissingApprovalForAll", + "nameLocation": "5624:28:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 207, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 204, + "mutability": "mutable", + "name": "operator", + "nameLocation": "5661:8:3", + "nodeType": "VariableDeclaration", + "scope": 208, + "src": "5653:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 203, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5653:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 206, + "mutability": "mutable", + "name": "owner", + "nameLocation": "5679:5:3", + "nodeType": "VariableDeclaration", + "scope": 208, + "src": "5671:13:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 205, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5671:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5652:33:3" + }, + "src": "5618:68:3" + }, + { + "documentation": { + "id": 209, + "nodeType": "StructuredDocumentation", + "src": "5692:174:3", + "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation." + }, + "errorSelector": "3e31884e", + "id": 213, + "name": "ERC1155InvalidApprover", + "nameLocation": "5877:22:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 212, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 211, + "mutability": "mutable", + "name": "approver", + "nameLocation": "5908:8:3", + "nodeType": "VariableDeclaration", + "scope": 213, + "src": "5900:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 210, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5900:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5899:18:3" + }, + "src": "5871:47:3" + }, + { + "documentation": { + "id": 214, + "nodeType": "StructuredDocumentation", + "src": "5924:197:3", + "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner." + }, + "errorSelector": "ced3e100", + "id": 218, + "name": "ERC1155InvalidOperator", + "nameLocation": "6132:22:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 217, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 216, + "mutability": "mutable", + "name": "operator", + "nameLocation": "6163:8:3", + "nodeType": "VariableDeclaration", + "scope": 218, + "src": "6155:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 215, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6155:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6154:18:3" + }, + "src": "6126:47:3" + }, + { + "documentation": { + "id": 219, + "nodeType": "StructuredDocumentation", + "src": "6179:280:3", + "text": " @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts" + }, + "errorSelector": "5b059991", + "id": 225, + "name": "ERC1155InvalidArrayLength", + "nameLocation": "6470:25:3", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 224, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 221, + "mutability": "mutable", + "name": "idsLength", + "nameLocation": "6504:9:3", + "nodeType": "VariableDeclaration", + "scope": 225, + "src": "6496:17:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 220, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6496:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 223, + "mutability": "mutable", + "name": "valuesLength", + "nameLocation": "6523:12:3", + "nodeType": "VariableDeclaration", + "scope": 225, + "src": "6515:20:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 222, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6515:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6495:41:3" + }, + "src": "6464:73:3" + } + ], + "nodeType": "ContractDefinition", + "scope": 227, + "src": "4432:2107:3", + "usedErrors": [191, 196, 201, 208, 213, 218, 225], + "usedEvents": [] + } + ], + "nodeType": "SourceUnit", + "src": "113:6427:3" + }, + "id": 3 + }, + "@openzeppelin/contracts/interfaces/IERC20.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC20.sol", + "exportedSymbols": { + "IERC20": [819] + }, + "id": 90, + "license": "MIT", + "nodes": [ + { + "id": 87, + "literals": ["solidity", ">=", "0.4", ".16"], + "nodeType": "PragmaDirective", + "src": "105:25:2" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "../token/ERC20/IERC20.sol", + "id": 89, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 90, + "sourceUnit": 820, + "src": "132:49:2", + "symbolAliases": [ + { + "foreign": { + "id": 88, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "140:6:2", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + } + ], + "nodeType": "SourceUnit", + "src": "105:77:2" + }, + "id": 2 + }, + "@openzeppelin/contracts/interfaces/IERC165.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol", + "exportedSymbols": { + "IERC165": [1579] + }, + "id": 86, + "license": "MIT", + "nodes": [ + { + "id": 83, + "literals": ["solidity", ">=", "0.4", ".16"], + "nodeType": "PragmaDirective", + "src": "106:25:1" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "file": "../utils/introspection/IERC165.sol", + "id": 85, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 86, + "sourceUnit": 1580, + "src": "133:59:1", + "symbolAliases": [ + { + "foreign": { + "id": 84, + "name": "IERC165", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1579, + "src": "141:7:1", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + } + ], + "nodeType": "SourceUnit", + "src": "106:87:1" + }, + "id": 1 + }, + "@openzeppelin/contracts/interfaces/IERC1363.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC1363.sol", + "exportedSymbols": { + "IERC20": [819], + "IERC165": [1579], + "IERC1363": [81] + }, + "id": 82, + "license": "MIT", + "nodes": [ + { + "id": 1, + "literals": ["solidity", ">=", "0.6", ".2"], + "nodeType": "PragmaDirective", + "src": "107:24:0" + }, + { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC20.sol", + "file": "./IERC20.sol", + "id": 3, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 82, + "sourceUnit": 90, + "src": "133:36:0", + "symbolAliases": [ + { + "foreign": { + "id": 2, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "141:6:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol", + "file": "./IERC165.sol", + "id": 5, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 82, + "sourceUnit": 86, + "src": "170:38:0", + "symbolAliases": [ + { + "foreign": { + "id": 4, + "name": "IERC165", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1579, + "src": "178:7:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 7, + "name": "IERC20", + "nameLocations": ["590:6:0"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "590:6:0" + }, + "id": 8, + "nodeType": "InheritanceSpecifier", + "src": "590:6:0" + }, + { + "baseName": { + "id": 9, + "name": "IERC165", + "nameLocations": ["598:7:0"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1579, + "src": "598:7:0" + }, + "id": 10, + "nodeType": "InheritanceSpecifier", + "src": "598:7:0" + } + ], + "canonicalName": "IERC1363", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 6, + "nodeType": "StructuredDocumentation", + "src": "210:357:0", + "text": " @title IERC1363\n @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction." + }, + "fullyImplemented": false, + "id": 81, + "linearizedBaseContracts": [81, 1579, 819], + "name": "IERC1363", + "nameLocation": "578:8:0", + "nodes": [ + { + "documentation": { + "id": 11, + "nodeType": "StructuredDocumentation", + "src": "1148:370:0", + "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing." + }, + "functionSelector": "1296ee62", + "id": 20, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferAndCall", + "nameLocation": "1532:15:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13, + "mutability": "mutable", + "name": "to", + "nameLocation": "1556:2:0", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "1548:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1548:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15, + "mutability": "mutable", + "name": "value", + "nameLocation": "1568:5:0", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "1560:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1560:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1547:27:0" + }, + "returnParameters": { + "id": 19, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 18, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 20, + "src": "1593:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 17, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1593:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1592:6:0" + }, + "scope": 81, + "src": "1523:76:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 21, + "nodeType": "StructuredDocumentation", + "src": "1605:453:0", + "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing." + }, + "functionSelector": "4000aea0", + "id": 32, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferAndCall", + "nameLocation": "2072:15:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 28, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 23, + "mutability": "mutable", + "name": "to", + "nameLocation": "2096:2:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "2088:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 22, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2088:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25, + "mutability": "mutable", + "name": "value", + "nameLocation": "2108:5:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "2100:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 24, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2100:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 27, + "mutability": "mutable", + "name": "data", + "nameLocation": "2130:4:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "2115:19:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 26, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2115:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2087:48:0" + }, + "returnParameters": { + "id": 31, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 30, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "2154:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 29, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2154:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2153:6:0" + }, + "scope": 81, + "src": "2063:97:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 33, + "nodeType": "StructuredDocumentation", + "src": "2166:453:0", + "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing." + }, + "functionSelector": "d8fbe994", + "id": 44, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFromAndCall", + "nameLocation": "2633:19:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 40, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 35, + "mutability": "mutable", + "name": "from", + "nameLocation": "2661:4:0", + "nodeType": "VariableDeclaration", + "scope": 44, + "src": "2653:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 34, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2653:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 37, + "mutability": "mutable", + "name": "to", + "nameLocation": "2675:2:0", + "nodeType": "VariableDeclaration", + "scope": 44, + "src": "2667:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 36, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2667:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 39, + "mutability": "mutable", + "name": "value", + "nameLocation": "2687:5:0", + "nodeType": "VariableDeclaration", + "scope": 44, + "src": "2679:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 38, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2679:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2652:41:0" + }, + "returnParameters": { + "id": 43, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 42, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 44, + "src": "2712:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 41, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2712:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2711:6:0" + }, + "scope": 81, + "src": "2624:94:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 45, + "nodeType": "StructuredDocumentation", + "src": "2724:536:0", + "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing." + }, + "functionSelector": "c1d34b89", + "id": 58, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFromAndCall", + "nameLocation": "3274:19:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 54, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 47, + "mutability": "mutable", + "name": "from", + "nameLocation": "3302:4:0", + "nodeType": "VariableDeclaration", + "scope": 58, + "src": "3294:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 46, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3294:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49, + "mutability": "mutable", + "name": "to", + "nameLocation": "3316:2:0", + "nodeType": "VariableDeclaration", + "scope": 58, + "src": "3308:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 48, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3308:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 51, + "mutability": "mutable", + "name": "value", + "nameLocation": "3328:5:0", + "nodeType": "VariableDeclaration", + "scope": 58, + "src": "3320:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 50, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3320:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 53, + "mutability": "mutable", + "name": "data", + "nameLocation": "3350:4:0", + "nodeType": "VariableDeclaration", + "scope": 58, + "src": "3335:19:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 52, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3335:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3293:62:0" + }, + "returnParameters": { + "id": 57, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 56, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 58, + "src": "3374:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 55, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3374:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3373:6:0" + }, + "scope": 81, + "src": "3265:115:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 59, + "nodeType": "StructuredDocumentation", + "src": "3386:390:0", + "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @return A boolean value indicating whether the operation succeeded unless throwing." + }, + "functionSelector": "3177029f", + "id": 68, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approveAndCall", + "nameLocation": "3790:14:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 64, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61, + "mutability": "mutable", + "name": "spender", + "nameLocation": "3813:7:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "3805:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3805:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63, + "mutability": "mutable", + "name": "value", + "nameLocation": "3830:5:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "3822:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3822:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3804:32:0" + }, + "returnParameters": { + "id": 67, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 66, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "3855:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 65, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3855:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3854:6:0" + }, + "scope": 81, + "src": "3781:80:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 69, + "nodeType": "StructuredDocumentation", + "src": "3867:478:0", + "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @param data Additional data with no specified format, sent in call to `spender`.\n @return A boolean value indicating whether the operation succeeded unless throwing." + }, + "functionSelector": "cae9ca51", + "id": 80, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approveAndCall", + "nameLocation": "4359:14:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 76, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 71, + "mutability": "mutable", + "name": "spender", + "nameLocation": "4382:7:0", + "nodeType": "VariableDeclaration", + "scope": 80, + "src": "4374:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 70, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4374:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 73, + "mutability": "mutable", + "name": "value", + "nameLocation": "4399:5:0", + "nodeType": "VariableDeclaration", + "scope": 80, + "src": "4391:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 72, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4391:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 75, + "mutability": "mutable", + "name": "data", + "nameLocation": "4421:4:0", + "nodeType": "VariableDeclaration", + "scope": 80, + "src": "4406:19:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 74, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4406:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4373:53:0" + }, + "returnParameters": { + "id": 79, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 80, + "src": "4445:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 77, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4445:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4444:6:0" + }, + "scope": 81, + "src": "4350:101:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 82, + "src": "568:3885:0", + "usedErrors": [], + "usedEvents": [753, 762] + } + ], + "nodeType": "SourceUnit", + "src": "107:4347:0" + }, + "id": 0 + }, + "@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "exportedSymbols": { + "Context": [1330], + "ERC20": [741], + "IERC20": [819], + "IERC20Errors": [131], + "IERC20Metadata": [845] + }, + "id": 742, + "license": "MIT", + "nodes": [ + { + "id": 228, + "literals": ["solidity", "^", "0.8", ".20"], + "nodeType": "PragmaDirective", + "src": "105:24:4" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "./IERC20.sol", + "id": 230, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 742, + "sourceUnit": 820, + "src": "131:36:4", + "symbolAliases": [ + { + "foreign": { + "id": 229, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "139:6:4", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "file": "./extensions/IERC20Metadata.sol", + "id": 232, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 742, + "sourceUnit": 846, + "src": "168:63:4", + "symbolAliases": [ + { + "foreign": { + "id": 231, + "name": "IERC20Metadata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 845, + "src": "176:14:4", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/Context.sol", + "file": "../../utils/Context.sol", + "id": 234, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 742, + "sourceUnit": 1331, + "src": "232:48:4", + "symbolAliases": [ + { + "foreign": { + "id": 233, + "name": "Context", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1330, + "src": "240:7:4", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", + "file": "../../interfaces/draft-IERC6093.sol", + "id": 236, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 742, + "sourceUnit": 227, + "src": "281:65:4", + "symbolAliases": [ + { + "foreign": { + "id": 235, + "name": "IERC20Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 131, + "src": "289:12:4", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 238, + "name": "Context", + "nameLocations": ["1133:7:4"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1330, + "src": "1133:7:4" + }, + "id": 239, + "nodeType": "InheritanceSpecifier", + "src": "1133:7:4" + }, + { + "baseName": { + "id": 240, + "name": "IERC20", + "nameLocations": ["1142:6:4"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "1142:6:4" + }, + "id": 241, + "nodeType": "InheritanceSpecifier", + "src": "1142:6:4" + }, + { + "baseName": { + "id": 242, + "name": "IERC20Metadata", + "nameLocations": ["1150:14:4"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 845, + "src": "1150:14:4" + }, + "id": 243, + "nodeType": "InheritanceSpecifier", + "src": "1150:14:4" + }, + { + "baseName": { + "id": 244, + "name": "IERC20Errors", + "nameLocations": ["1166:12:4"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 131, + "src": "1166:12:4" + }, + "id": 245, + "nodeType": "InheritanceSpecifier", + "src": "1166:12:4" + } + ], + "canonicalName": "ERC20", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 237, + "nodeType": "StructuredDocumentation", + "src": "348:757:4", + "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC-20\n applications." + }, + "fullyImplemented": true, + "id": 741, + "linearizedBaseContracts": [741, 131, 845, 819, 1330], + "name": "ERC20", + "nameLocation": "1124:5:4", + "nodes": [ + { + "constant": false, + "id": 249, + "mutability": "mutable", + "name": "_balances", + "nameLocation": "1229:9:4", + "nodeType": "VariableDeclaration", + "scope": 741, + "src": "1185:53:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 248, + "keyName": "account", + "keyNameLocation": "1201:7:4", + "keyType": { + "id": 246, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1193:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1185:35:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 247, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1212:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 255, + "mutability": "mutable", + "name": "_allowances", + "nameLocation": "1317:11:4", + "nodeType": "VariableDeclaration", + "scope": 741, + "src": "1245:83:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "typeName": { + "id": 254, + "keyName": "account", + "keyNameLocation": "1261:7:4", + "keyType": { + "id": 250, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1253:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1245:63:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 253, + "keyName": "spender", + "keyNameLocation": "1288:7:4", + "keyType": { + "id": 251, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1280:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1272:35:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 252, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1299:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 257, + "mutability": "mutable", + "name": "_totalSupply", + "nameLocation": "1351:12:4", + "nodeType": "VariableDeclaration", + "scope": 741, + "src": "1335:28:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 256, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1335:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 259, + "mutability": "mutable", + "name": "_name", + "nameLocation": "1385:5:4", + "nodeType": "VariableDeclaration", + "scope": 741, + "src": "1370:20:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 258, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1370:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 261, + "mutability": "mutable", + "name": "_symbol", + "nameLocation": "1411:7:4", + "nodeType": "VariableDeclaration", + "scope": 741, + "src": "1396:22:4", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 260, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1396:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 277, + "nodeType": "Block", + "src": "1638:57:4", + "statements": [ + { + "expression": { + "id": 271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 269, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 259, + "src": "1648:5:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 270, + "name": "name_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 264, + "src": "1656:5:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "1648:13:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 272, + "nodeType": "ExpressionStatement", + "src": "1648:13:4" + }, + { + "expression": { + "id": 275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 273, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "1671:7:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 274, + "name": "symbol_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 266, + "src": "1681:7:4", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "1671:17:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 276, + "nodeType": "ExpressionStatement", + "src": "1671:17:4" + } + ] + }, + "documentation": { + "id": 262, + "nodeType": "StructuredDocumentation", + "src": "1425:152:4", + "text": " @dev Sets the values for {name} and {symbol}.\n Both values are immutable: they can only be set once during construction." + }, + "id": 278, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 264, + "mutability": "mutable", + "name": "name_", + "nameLocation": "1608:5:4", + "nodeType": "VariableDeclaration", + "scope": 278, + "src": "1594:19:4", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 263, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1594:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 266, + "mutability": "mutable", + "name": "symbol_", + "nameLocation": "1629:7:4", + "nodeType": "VariableDeclaration", + "scope": 278, + "src": "1615:21:4", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 265, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1615:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1593:44:4" + }, + "returnParameters": { + "id": 268, + "nodeType": "ParameterList", + "parameters": [], + "src": "1638:0:4" + }, + "scope": 741, + "src": "1582:113:4", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [832], + "body": { + "id": 286, + "nodeType": "Block", + "src": "1820:29:4", + "statements": [ + { + "expression": { + "id": 284, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 259, + "src": "1837:5:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 283, + "id": 285, + "nodeType": "Return", + "src": "1830:12:4" + } + ] + }, + "documentation": { + "id": 279, + "nodeType": "StructuredDocumentation", + "src": "1701:54:4", + "text": " @dev Returns the name of the token." + }, + "functionSelector": "06fdde03", + "id": 287, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "name", + "nameLocation": "1769:4:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 280, + "nodeType": "ParameterList", + "parameters": [], + "src": "1773:2:4" + }, + "returnParameters": { + "id": 283, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 282, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 287, + "src": "1805:13:4", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 281, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1805:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1804:15:4" + }, + "scope": 741, + "src": "1760:89:4", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [838], + "body": { + "id": 295, + "nodeType": "Block", + "src": "2024:31:4", + "statements": [ + { + "expression": { + "id": 293, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "2041:7:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 292, + "id": 294, + "nodeType": "Return", + "src": "2034:14:4" + } + ] + }, + "documentation": { + "id": 288, + "nodeType": "StructuredDocumentation", + "src": "1855:102:4", + "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name." + }, + "functionSelector": "95d89b41", + "id": 296, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "symbol", + "nameLocation": "1971:6:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 289, + "nodeType": "ParameterList", + "parameters": [], + "src": "1977:2:4" + }, + "returnParameters": { + "id": 292, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 291, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 296, + "src": "2009:13:4", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 290, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2009:6:4", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2008:15:4" + }, + "scope": 741, + "src": "1962:93:4", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [844], + "body": { + "id": 304, + "nodeType": "Block", + "src": "2744:26:4", + "statements": [ + { + "expression": { + "hexValue": "3138", + "id": 302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2761:2:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "functionReturnParameters": 301, + "id": 303, + "nodeType": "Return", + "src": "2754:9:4" + } + ] + }, + "documentation": { + "id": 297, + "nodeType": "StructuredDocumentation", + "src": "2061:622:4", + "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}." + }, + "functionSelector": "313ce567", + "id": 305, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nameLocation": "2697:8:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 298, + "nodeType": "ParameterList", + "parameters": [], + "src": "2705:2:4" + }, + "returnParameters": { + "id": 301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 300, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 305, + "src": "2737:5:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 299, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "2737:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "2736:7:4" + }, + "scope": 741, + "src": "2688:82:4", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [768], + "body": { + "id": 313, + "nodeType": "Block", + "src": "2864:36:4", + "statements": [ + { + "expression": { + "id": 311, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 257, + "src": "2881:12:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 310, + "id": 312, + "nodeType": "Return", + "src": "2874:19:4" + } + ] + }, + "documentation": { + "id": 306, + "nodeType": "StructuredDocumentation", + "src": "2776:22:4", + "text": "@inheritdoc IERC20" + }, + "functionSelector": "18160ddd", + "id": 314, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nameLocation": "2812:11:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 307, + "nodeType": "ParameterList", + "parameters": [], + "src": "2823:2:4" + }, + "returnParameters": { + "id": 310, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 309, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 314, + "src": "2855:7:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2855:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2854:9:4" + }, + "scope": 741, + "src": "2803:97:4", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [776], + "body": { + "id": 326, + "nodeType": "Block", + "src": "3007:42:4", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 322, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 249, + "src": "3024:9:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 324, + "indexExpression": { + "id": 323, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 317, + "src": "3034:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3024:18:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 321, + "id": 325, + "nodeType": "Return", + "src": "3017:25:4" + } + ] + }, + "documentation": { + "id": 315, + "nodeType": "StructuredDocumentation", + "src": "2906:22:4", + "text": "@inheritdoc IERC20" + }, + "functionSelector": "70a08231", + "id": 327, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nameLocation": "2942:9:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 318, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 317, + "mutability": "mutable", + "name": "account", + "nameLocation": "2960:7:4", + "nodeType": "VariableDeclaration", + "scope": 327, + "src": "2952:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 316, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2952:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2951:17:4" + }, + "returnParameters": { + "id": 321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 327, + "src": "2998:7:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 319, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2998:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2997:9:4" + }, + "scope": 741, + "src": "2933:116:4", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [786], + "body": { + "id": 350, + "nodeType": "Block", + "src": "3319:103:4", + "statements": [ + { + "assignments": [338], + "declarations": [ + { + "constant": false, + "id": 338, + "mutability": "mutable", + "name": "owner", + "nameLocation": "3337:5:4", + "nodeType": "VariableDeclaration", + "scope": 350, + "src": "3329:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 337, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3329:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 341, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 339, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1312, + "src": "3345:10:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3345:12:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3329:28:4" + }, + { + "expression": { + "arguments": [ + { + "id": 343, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 338, + "src": "3377:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 344, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 330, + "src": "3384:2:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 345, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 332, + "src": "3388:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 342, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 471, + "src": "3367:9:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3367:27:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 347, + "nodeType": "ExpressionStatement", + "src": "3367:27:4" + }, + { + "expression": { + "hexValue": "74727565", + "id": 348, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3411:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 336, + "id": 349, + "nodeType": "Return", + "src": "3404:11:4" + } + ] + }, + "documentation": { + "id": 328, + "nodeType": "StructuredDocumentation", + "src": "3055:184:4", + "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`." + }, + "functionSelector": "a9059cbb", + "id": 351, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nameLocation": "3253:8:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 333, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 330, + "mutability": "mutable", + "name": "to", + "nameLocation": "3270:2:4", + "nodeType": "VariableDeclaration", + "scope": 351, + "src": "3262:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 329, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3262:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 332, + "mutability": "mutable", + "name": "value", + "nameLocation": "3282:5:4", + "nodeType": "VariableDeclaration", + "scope": 351, + "src": "3274:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 331, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3274:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3261:27:4" + }, + "returnParameters": { + "id": 336, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 335, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 351, + "src": "3313:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 334, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3313:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3312:6:4" + }, + "scope": 741, + "src": "3244:178:4", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [796], + "body": { + "id": 367, + "nodeType": "Block", + "src": "3544:51:4", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 361, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 255, + "src": "3561:11:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 363, + "indexExpression": { + "id": 362, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 354, + "src": "3573:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3561:18:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 365, + "indexExpression": { + "id": 364, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 356, + "src": "3580:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3561:27:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 360, + "id": 366, + "nodeType": "Return", + "src": "3554:34:4" + } + ] + }, + "documentation": { + "id": 352, + "nodeType": "StructuredDocumentation", + "src": "3428:22:4", + "text": "@inheritdoc IERC20" + }, + "functionSelector": "dd62ed3e", + "id": 368, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nameLocation": "3464:9:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 357, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 354, + "mutability": "mutable", + "name": "owner", + "nameLocation": "3482:5:4", + "nodeType": "VariableDeclaration", + "scope": 368, + "src": "3474:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 353, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3474:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 356, + "mutability": "mutable", + "name": "spender", + "nameLocation": "3497:7:4", + "nodeType": "VariableDeclaration", + "scope": 368, + "src": "3489:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 355, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3489:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3473:32:4" + }, + "returnParameters": { + "id": 360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 359, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 368, + "src": "3535:7:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3535:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3534:9:4" + }, + "scope": 741, + "src": "3455:140:4", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [806], + "body": { + "id": 391, + "nodeType": "Block", + "src": "3981:107:4", + "statements": [ + { + "assignments": [379], + "declarations": [ + { + "constant": false, + "id": 379, + "mutability": "mutable", + "name": "owner", + "nameLocation": "3999:5:4", + "nodeType": "VariableDeclaration", + "scope": 391, + "src": "3991:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 378, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3991:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 382, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 380, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1312, + "src": "4007:10:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4007:12:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3991:28:4" + }, + { + "expression": { + "arguments": [ + { + "id": 384, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 379, + "src": "4038:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 385, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 371, + "src": "4045:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 386, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 373, + "src": "4054:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 383, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [632, 692], + "referencedDeclaration": 632, + "src": "4029:8:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4029:31:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 388, + "nodeType": "ExpressionStatement", + "src": "4029:31:4" + }, + { + "expression": { + "hexValue": "74727565", + "id": 389, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4077:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 377, + "id": 390, + "nodeType": "Return", + "src": "4070:11:4" + } + ] + }, + "documentation": { + "id": 369, + "nodeType": "StructuredDocumentation", + "src": "3601:296:4", + "text": " @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address." + }, + "functionSelector": "095ea7b3", + "id": 392, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "approve", + "nameLocation": "3911:7:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 374, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 371, + "mutability": "mutable", + "name": "spender", + "nameLocation": "3927:7:4", + "nodeType": "VariableDeclaration", + "scope": 392, + "src": "3919:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 370, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3919:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 373, + "mutability": "mutable", + "name": "value", + "nameLocation": "3944:5:4", + "nodeType": "VariableDeclaration", + "scope": 392, + "src": "3936:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 372, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3936:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3918:32:4" + }, + "returnParameters": { + "id": 377, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 376, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 392, + "src": "3975:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 375, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3975:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3974:6:4" + }, + "scope": 741, + "src": "3902:186:4", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [818], + "body": { + "id": 423, + "nodeType": "Block", + "src": "4773:151:4", + "statements": [ + { + "assignments": [405], + "declarations": [ + { + "constant": false, + "id": 405, + "mutability": "mutable", + "name": "spender", + "nameLocation": "4791:7:4", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "4783:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 404, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4783:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 408, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 406, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1312, + "src": "4801:10:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4801:12:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4783:30:4" + }, + { + "expression": { + "arguments": [ + { + "id": 410, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 395, + "src": "4839:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 411, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 405, + "src": "4845:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 412, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 399, + "src": "4854:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 409, + "name": "_spendAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 740, + "src": "4823:15:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4823:37:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 414, + "nodeType": "ExpressionStatement", + "src": "4823:37:4" + }, + { + "expression": { + "arguments": [ + { + "id": 416, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 395, + "src": "4880:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 417, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 397, + "src": "4886:2:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 418, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 399, + "src": "4890:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 415, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 471, + "src": "4870:9:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4870:26:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 420, + "nodeType": "ExpressionStatement", + "src": "4870:26:4" + }, + { + "expression": { + "hexValue": "74727565", + "id": 421, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4913:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 403, + "id": 422, + "nodeType": "Return", + "src": "4906:11:4" + } + ] + }, + "documentation": { + "id": 393, + "nodeType": "StructuredDocumentation", + "src": "4094:581:4", + "text": " @dev See {IERC20-transferFrom}.\n Skips emitting an {Approval} event indicating an allowance update. This is not\n required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`." + }, + "functionSelector": "23b872dd", + "id": 424, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nameLocation": "4689:12:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 400, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 395, + "mutability": "mutable", + "name": "from", + "nameLocation": "4710:4:4", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "4702:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 394, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4702:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 397, + "mutability": "mutable", + "name": "to", + "nameLocation": "4724:2:4", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "4716:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 396, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4716:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 399, + "mutability": "mutable", + "name": "value", + "nameLocation": "4736:5:4", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "4728:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 398, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4728:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4701:41:4" + }, + "returnParameters": { + "id": 403, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 402, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "4767:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 401, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4767:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4766:6:4" + }, + "scope": 741, + "src": "4680:244:4", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 470, + "nodeType": "Block", + "src": "5366:231:4", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 434, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 427, + "src": "5380:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 437, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5396:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 436, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5388:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 435, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5388:7:4", + "typeDescriptions": {} + } + }, + "id": 438, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5388:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5380:18:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 448, + "nodeType": "IfStatement", + "src": "5376:86:4", + "trueBody": { + "id": 447, + "nodeType": "Block", + "src": "5400:62:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 443, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5448:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5440:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 441, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5440:7:4", + "typeDescriptions": {} + } + }, + "id": 444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5440:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 440, + "name": "ERC20InvalidSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 106, + "src": "5421:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5421:30:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 446, + "nodeType": "RevertStatement", + "src": "5414:37:4" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 449, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 429, + "src": "5475:2:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 452, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5489:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 451, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5481:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 450, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5481:7:4", + "typeDescriptions": {} + } + }, + "id": 453, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5481:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5475:16:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 463, + "nodeType": "IfStatement", + "src": "5471:86:4", + "trueBody": { + "id": 462, + "nodeType": "Block", + "src": "5493:64:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 458, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5543:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 457, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5535:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 456, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5535:7:4", + "typeDescriptions": {} + } + }, + "id": 459, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5535:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 455, + "name": "ERC20InvalidReceiver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 111, + "src": "5514:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5514:32:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 461, + "nodeType": "RevertStatement", + "src": "5507:39:4" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 465, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 427, + "src": "5574:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 466, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 429, + "src": "5580:2:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 467, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 431, + "src": "5584:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 464, + "name": "_update", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 548, + "src": "5566:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5566:24:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 469, + "nodeType": "ExpressionStatement", + "src": "5566:24:4" + } + ] + }, + "documentation": { + "id": 425, + "nodeType": "StructuredDocumentation", + "src": "4930:362:4", + "text": " @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead." + }, + "id": 471, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transfer", + "nameLocation": "5306:9:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 432, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 427, + "mutability": "mutable", + "name": "from", + "nameLocation": "5324:4:4", + "nodeType": "VariableDeclaration", + "scope": 471, + "src": "5316:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 426, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5316:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 429, + "mutability": "mutable", + "name": "to", + "nameLocation": "5338:2:4", + "nodeType": "VariableDeclaration", + "scope": 471, + "src": "5330:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 428, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5330:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 431, + "mutability": "mutable", + "name": "value", + "nameLocation": "5350:5:4", + "nodeType": "VariableDeclaration", + "scope": 471, + "src": "5342:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 430, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5342:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5315:41:4" + }, + "returnParameters": { + "id": 433, + "nodeType": "ParameterList", + "parameters": [], + "src": "5366:0:4" + }, + "scope": 741, + "src": "5297:300:4", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 547, + "nodeType": "Block", + "src": "5987:1032:4", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 481, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 474, + "src": "6001:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 484, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6017:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 483, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6009:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 482, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6009:7:4", + "typeDescriptions": {} + } + }, + "id": 485, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6009:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6001:18:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 518, + "nodeType": "Block", + "src": "6175:362:4", + "statements": [ + { + "assignments": [493], + "declarations": [ + { + "constant": false, + "id": 493, + "mutability": "mutable", + "name": "fromBalance", + "nameLocation": "6197:11:4", + "nodeType": "VariableDeclaration", + "scope": 518, + "src": "6189:19:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 492, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6189:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 497, + "initialValue": { + "baseExpression": { + "id": 494, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 249, + "src": "6211:9:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 496, + "indexExpression": { + "id": 495, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 474, + "src": "6221:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6211:15:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6189:37:4" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 498, + "name": "fromBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "6244:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 499, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 478, + "src": "6258:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6244:19:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 508, + "nodeType": "IfStatement", + "src": "6240:115:4", + "trueBody": { + "id": 507, + "nodeType": "Block", + "src": "6265:90:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 502, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 474, + "src": "6315:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 503, + "name": "fromBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "6321:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 504, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 478, + "src": "6334:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 501, + "name": "ERC20InsufficientBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 101, + "src": "6290:24:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256,uint256) pure returns (error)" + } + }, + "id": 505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6290:50:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 506, + "nodeType": "RevertStatement", + "src": "6283:57:4" + } + ] + } + }, + { + "id": 517, + "nodeType": "UncheckedBlock", + "src": "6368:159:4", + "statements": [ + { + "expression": { + "id": 515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "baseExpression": { + "id": 509, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 249, + "src": "6475:9:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 511, + "indexExpression": { + "id": 510, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 474, + "src": "6485:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6475:15:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 514, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 512, + "name": "fromBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "6493:11:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 513, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 478, + "src": "6507:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6493:19:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6475:37:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 516, + "nodeType": "ExpressionStatement", + "src": "6475:37:4" + } + ] + } + ] + }, + "id": 519, + "nodeType": "IfStatement", + "src": "5997:540:4", + "trueBody": { + "id": 491, + "nodeType": "Block", + "src": "6021:148:4", + "statements": [ + { + "expression": { + "id": 489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 487, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 257, + "src": "6137:12:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 488, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 478, + "src": "6153:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6137:21:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 490, + "nodeType": "ExpressionStatement", + "src": "6137:21:4" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 520, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 476, + "src": "6551:2:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 523, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6565:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 522, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6557:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 521, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6557:7:4", + "typeDescriptions": {} + } + }, + "id": 524, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6557:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6551:16:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 539, + "nodeType": "Block", + "src": "6766:206:4", + "statements": [ + { + "id": 538, + "nodeType": "UncheckedBlock", + "src": "6780:182:4", + "statements": [ + { + "expression": { + "id": 536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "baseExpression": { + "id": 532, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 249, + "src": "6925:9:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 534, + "indexExpression": { + "id": 533, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 476, + "src": "6935:2:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6925:13:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 535, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 478, + "src": "6942:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6925:22:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 537, + "nodeType": "ExpressionStatement", + "src": "6925:22:4" + } + ] + } + ] + }, + "id": 540, + "nodeType": "IfStatement", + "src": "6547:425:4", + "trueBody": { + "id": 531, + "nodeType": "Block", + "src": "6569:191:4", + "statements": [ + { + "id": 530, + "nodeType": "UncheckedBlock", + "src": "6583:167:4", + "statements": [ + { + "expression": { + "id": 528, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 526, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 257, + "src": "6714:12:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 527, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 478, + "src": "6730:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6714:21:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 529, + "nodeType": "ExpressionStatement", + "src": "6714:21:4" + } + ] + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 542, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 474, + "src": "6996:4:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 543, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 476, + "src": "7002:2:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 544, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 478, + "src": "7006:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 541, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 753, + "src": "6987:8:4", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6987:25:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 546, + "nodeType": "EmitStatement", + "src": "6982:30:4" + } + ] + }, + "documentation": { + "id": 472, + "nodeType": "StructuredDocumentation", + "src": "5603:304:4", + "text": " @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event." + }, + "id": 548, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_update", + "nameLocation": "5921:7:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 479, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 474, + "mutability": "mutable", + "name": "from", + "nameLocation": "5937:4:4", + "nodeType": "VariableDeclaration", + "scope": 548, + "src": "5929:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 473, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5929:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 476, + "mutability": "mutable", + "name": "to", + "nameLocation": "5951:2:4", + "nodeType": "VariableDeclaration", + "scope": 548, + "src": "5943:10:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 475, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5943:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 478, + "mutability": "mutable", + "name": "value", + "nameLocation": "5963:5:4", + "nodeType": "VariableDeclaration", + "scope": 548, + "src": "5955:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 477, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5955:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5928:41:4" + }, + "returnParameters": { + "id": 480, + "nodeType": "ParameterList", + "parameters": [], + "src": "5987:0:4" + }, + "scope": 741, + "src": "5912:1107:4", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 580, + "nodeType": "Block", + "src": "7418:152:4", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 556, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 551, + "src": "7432:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 559, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7451:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7443:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 557, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7443:7:4", + "typeDescriptions": {} + } + }, + "id": 560, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7443:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7432:21:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 570, + "nodeType": "IfStatement", + "src": "7428:91:4", + "trueBody": { + "id": 569, + "nodeType": "Block", + "src": "7455:64:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7505:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 564, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7497:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 563, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7497:7:4", + "typeDescriptions": {} + } + }, + "id": 566, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7497:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 562, + "name": "ERC20InvalidReceiver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 111, + "src": "7476:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7476:32:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 568, + "nodeType": "RevertStatement", + "src": "7469:39:4" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 574, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7544:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 573, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7536:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 572, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7536:7:4", + "typeDescriptions": {} + } + }, + "id": 575, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7536:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 576, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 551, + "src": "7548:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 577, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 553, + "src": "7557:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 571, + "name": "_update", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 548, + "src": "7528:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7528:35:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 579, + "nodeType": "ExpressionStatement", + "src": "7528:35:4" + } + ] + }, + "documentation": { + "id": 549, + "nodeType": "StructuredDocumentation", + "src": "7025:332:4", + "text": " @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead." + }, + "id": 581, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mint", + "nameLocation": "7371:5:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 554, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 551, + "mutability": "mutable", + "name": "account", + "nameLocation": "7385:7:4", + "nodeType": "VariableDeclaration", + "scope": 581, + "src": "7377:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 550, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7377:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 553, + "mutability": "mutable", + "name": "value", + "nameLocation": "7402:5:4", + "nodeType": "VariableDeclaration", + "scope": 581, + "src": "7394:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 552, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7394:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7376:32:4" + }, + "returnParameters": { + "id": 555, + "nodeType": "ParameterList", + "parameters": [], + "src": "7418:0:4" + }, + "scope": 741, + "src": "7362:208:4", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 613, + "nodeType": "Block", + "src": "7944:150:4", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 589, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 584, + "src": "7958:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7977:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 591, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7969:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 590, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7969:7:4", + "typeDescriptions": {} + } + }, + "id": 593, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7969:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7958:21:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 603, + "nodeType": "IfStatement", + "src": "7954:89:4", + "trueBody": { + "id": 602, + "nodeType": "Block", + "src": "7981:62:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 598, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8029:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8021:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 596, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8021:7:4", + "typeDescriptions": {} + } + }, + "id": 599, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8021:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 595, + "name": "ERC20InvalidSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 106, + "src": "8002:18:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8002:30:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 601, + "nodeType": "RevertStatement", + "src": "7995:37:4" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 605, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 584, + "src": "8060:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 608, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8077:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 607, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8069:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 606, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8069:7:4", + "typeDescriptions": {} + } + }, + "id": 609, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8069:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 610, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 586, + "src": "8081:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 604, + "name": "_update", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 548, + "src": "8052:7:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8052:35:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 612, + "nodeType": "ExpressionStatement", + "src": "8052:35:4" + } + ] + }, + "documentation": { + "id": 582, + "nodeType": "StructuredDocumentation", + "src": "7576:307:4", + "text": " @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead" + }, + "id": 614, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burn", + "nameLocation": "7897:5:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 587, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 584, + "mutability": "mutable", + "name": "account", + "nameLocation": "7911:7:4", + "nodeType": "VariableDeclaration", + "scope": 614, + "src": "7903:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 583, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7903:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 586, + "mutability": "mutable", + "name": "value", + "nameLocation": "7928:5:4", + "nodeType": "VariableDeclaration", + "scope": 614, + "src": "7920:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 585, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7920:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7902:32:4" + }, + "returnParameters": { + "id": 588, + "nodeType": "ParameterList", + "parameters": [], + "src": "7944:0:4" + }, + "scope": 741, + "src": "7888:206:4", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 631, + "nodeType": "Block", + "src": "8704:54:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 625, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 617, + "src": "8723:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 626, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 619, + "src": "8730:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 627, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 621, + "src": "8739:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "74727565", + "id": 628, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8746:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 624, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [632, 692], + "referencedDeclaration": 692, + "src": "8714:8:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", + "typeString": "function (address,address,uint256,bool)" + } + }, + "id": 629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8714:37:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 630, + "nodeType": "ExpressionStatement", + "src": "8714:37:4" + } + ] + }, + "documentation": { + "id": 615, + "nodeType": "StructuredDocumentation", + "src": "8100:525:4", + "text": " @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument." + }, + "id": 632, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_approve", + "nameLocation": "8639:8:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 622, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 617, + "mutability": "mutable", + "name": "owner", + "nameLocation": "8656:5:4", + "nodeType": "VariableDeclaration", + "scope": 632, + "src": "8648:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 616, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8648:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 619, + "mutability": "mutable", + "name": "spender", + "nameLocation": "8671:7:4", + "nodeType": "VariableDeclaration", + "scope": 632, + "src": "8663:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 618, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8663:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 621, + "mutability": "mutable", + "name": "value", + "nameLocation": "8688:5:4", + "nodeType": "VariableDeclaration", + "scope": 632, + "src": "8680:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 620, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8680:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8647:47:4" + }, + "returnParameters": { + "id": 623, + "nodeType": "ParameterList", + "parameters": [], + "src": "8704:0:4" + }, + "scope": 741, + "src": "8630:128:4", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 691, + "nodeType": "Block", + "src": "9705:334:4", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 644, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 635, + "src": "9719:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9736:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 646, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9728:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 645, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9728:7:4", + "typeDescriptions": {} + } + }, + "id": 648, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9728:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "9719:19:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 658, + "nodeType": "IfStatement", + "src": "9715:89:4", + "trueBody": { + "id": 657, + "nodeType": "Block", + "src": "9740:64:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 653, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9790:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 652, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9782:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 651, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9782:7:4", + "typeDescriptions": {} + } + }, + "id": 654, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9782:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 650, + "name": "ERC20InvalidApprover", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "9761:20:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9761:32:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 656, + "nodeType": "RevertStatement", + "src": "9754:39:4" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 659, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 637, + "src": "9817:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 662, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9836:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 661, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9828:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 660, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9828:7:4", + "typeDescriptions": {} + } + }, + "id": 663, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9828:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "9817:21:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 673, + "nodeType": "IfStatement", + "src": "9813:90:4", + "trueBody": { + "id": 672, + "nodeType": "Block", + "src": "9840:63:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 668, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9889:1:4", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 667, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9881:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9881:7:4", + "typeDescriptions": {} + } + }, + "id": 669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9881:10:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 665, + "name": "ERC20InvalidSpender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 130, + "src": "9861:19:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9861:31:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 671, + "nodeType": "RevertStatement", + "src": "9854:38:4" + } + ] + } + }, + { + "expression": { + "id": 680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 674, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 255, + "src": "9912:11:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 677, + "indexExpression": { + "id": 675, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 635, + "src": "9924:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9912:18:4", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 678, + "indexExpression": { + "id": 676, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 637, + "src": "9931:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9912:27:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 679, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 639, + "src": "9942:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9912:35:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 681, + "nodeType": "ExpressionStatement", + "src": "9912:35:4" + }, + { + "condition": { + "id": 682, + "name": "emitEvent", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 641, + "src": "9961:9:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 690, + "nodeType": "IfStatement", + "src": "9957:76:4", + "trueBody": { + "id": 689, + "nodeType": "Block", + "src": "9972:61:4", + "statements": [ + { + "eventCall": { + "arguments": [ + { + "id": 684, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 635, + "src": "10000:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 685, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 637, + "src": "10007:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 686, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 639, + "src": "10016:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 683, + "name": "Approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 762, + "src": "9991:8:4", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9991:31:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 688, + "nodeType": "EmitStatement", + "src": "9986:36:4" + } + ] + } + } + ] + }, + "documentation": { + "id": 633, + "nodeType": "StructuredDocumentation", + "src": "8764:838:4", + "text": " @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation sets the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the `transferFrom` operation can force the flag to\n true using the following override:\n ```solidity\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}." + }, + "id": 692, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_approve", + "nameLocation": "9616:8:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 635, + "mutability": "mutable", + "name": "owner", + "nameLocation": "9633:5:4", + "nodeType": "VariableDeclaration", + "scope": 692, + "src": "9625:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 634, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9625:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 637, + "mutability": "mutable", + "name": "spender", + "nameLocation": "9648:7:4", + "nodeType": "VariableDeclaration", + "scope": 692, + "src": "9640:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 636, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9640:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 639, + "mutability": "mutable", + "name": "value", + "nameLocation": "9665:5:4", + "nodeType": "VariableDeclaration", + "scope": 692, + "src": "9657:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 638, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9657:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 641, + "mutability": "mutable", + "name": "emitEvent", + "nameLocation": "9677:9:4", + "nodeType": "VariableDeclaration", + "scope": 692, + "src": "9672:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 640, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9672:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9624:63:4" + }, + "returnParameters": { + "id": 643, + "nodeType": "ParameterList", + "parameters": [], + "src": "9705:0:4" + }, + "scope": 741, + "src": "9607:432:4", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 739, + "nodeType": "Block", + "src": "10410:387:4", + "statements": [ + { + "assignments": [703], + "declarations": [ + { + "constant": false, + "id": 703, + "mutability": "mutable", + "name": "currentAllowance", + "nameLocation": "10428:16:4", + "nodeType": "VariableDeclaration", + "scope": 739, + "src": "10420:24:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 702, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10420:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 708, + "initialValue": { + "arguments": [ + { + "id": 705, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 695, + "src": "10457:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 706, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 697, + "src": "10464:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 704, + "name": "allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 368, + "src": "10447:9:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view returns (uint256)" + } + }, + "id": 707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10447:25:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10420:52:4" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 709, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 703, + "src": "10486:16:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 712, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10510:7:4", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 711, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10510:7:4", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 710, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "10505:4:4", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 713, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10505:13:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 714, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "10519:3:4", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "10505:17:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10486:36:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 738, + "nodeType": "IfStatement", + "src": "10482:309:4", + "trueBody": { + "id": 737, + "nodeType": "Block", + "src": "10524:267:4", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 716, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 703, + "src": "10542:16:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 717, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 699, + "src": "10561:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10542:24:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 726, + "nodeType": "IfStatement", + "src": "10538:130:4", + "trueBody": { + "id": 725, + "nodeType": "Block", + "src": "10568:100:4", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 720, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 697, + "src": "10620:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 721, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 703, + "src": "10629:16:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 722, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 699, + "src": "10647:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 719, + "name": "ERC20InsufficientAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 120, + "src": "10593:26:4", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256,uint256) pure returns (error)" + } + }, + "id": 723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10593:60:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 724, + "nodeType": "RevertStatement", + "src": "10586:67:4" + } + ] + } + }, + { + "id": 736, + "nodeType": "UncheckedBlock", + "src": "10681:100:4", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 728, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 695, + "src": "10718:5:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 729, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 697, + "src": "10725:7:4", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 730, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 703, + "src": "10734:16:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 731, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 699, + "src": "10753:5:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10734:24:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "66616c7365", + "id": 733, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10760:5:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 727, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [632, 692], + "referencedDeclaration": 692, + "src": "10709:8:4", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", + "typeString": "function (address,address,uint256,bool)" + } + }, + "id": 734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10709:57:4", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 735, + "nodeType": "ExpressionStatement", + "src": "10709:57:4" + } + ] + } + ] + } + } + ] + }, + "documentation": { + "id": 693, + "nodeType": "StructuredDocumentation", + "src": "10045:271:4", + "text": " @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event." + }, + "id": 740, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_spendAllowance", + "nameLocation": "10330:15:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 700, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 695, + "mutability": "mutable", + "name": "owner", + "nameLocation": "10354:5:4", + "nodeType": "VariableDeclaration", + "scope": 740, + "src": "10346:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 694, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10346:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 697, + "mutability": "mutable", + "name": "spender", + "nameLocation": "10369:7:4", + "nodeType": "VariableDeclaration", + "scope": 740, + "src": "10361:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10361:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 699, + "mutability": "mutable", + "name": "value", + "nameLocation": "10386:5:4", + "nodeType": "VariableDeclaration", + "scope": 740, + "src": "10378:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 698, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10378:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10345:47:4" + }, + "returnParameters": { + "id": 701, + "nodeType": "ParameterList", + "parameters": [], + "src": "10410:0:4" + }, + "scope": 741, + "src": "10321:476:4", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "nodeType": "ContractDefinition", + "scope": 742, + "src": "1106:9693:4", + "usedErrors": [101, 106, 111, 120, 125, 130], + "usedEvents": [753, 762] + } + ], + "nodeType": "SourceUnit", + "src": "105:10695:4" + }, + "id": 4 + }, + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "exportedSymbols": { + "IERC20": [819], + "IERC20Metadata": [845] + }, + "id": 846, + "license": "MIT", + "nodes": [ + { + "id": 821, + "literals": ["solidity", ">=", "0.6", ".2"], + "nodeType": "PragmaDirective", + "src": "125:24:6" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "../IERC20.sol", + "id": 823, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 846, + "sourceUnit": 820, + "src": "151:37:6", + "symbolAliases": [ + { + "foreign": { + "id": 822, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "159:6:6", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 825, + "name": "IERC20", + "nameLocations": ["306:6:6"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "306:6:6" + }, + "id": 826, + "nodeType": "InheritanceSpecifier", + "src": "306:6:6" + } + ], + "canonicalName": "IERC20Metadata", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 824, + "nodeType": "StructuredDocumentation", + "src": "190:87:6", + "text": " @dev Interface for the optional metadata functions from the ERC-20 standard." + }, + "fullyImplemented": false, + "id": 845, + "linearizedBaseContracts": [845, 819], + "name": "IERC20Metadata", + "nameLocation": "288:14:6", + "nodes": [ + { + "documentation": { + "id": 827, + "nodeType": "StructuredDocumentation", + "src": "319:54:6", + "text": " @dev Returns the name of the token." + }, + "functionSelector": "06fdde03", + "id": 832, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "name", + "nameLocation": "387:4:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 828, + "nodeType": "ParameterList", + "parameters": [], + "src": "391:2:6" + }, + "returnParameters": { + "id": 831, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 830, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 832, + "src": "417:13:6", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 829, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "417:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "416:15:6" + }, + "scope": 845, + "src": "378:54:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 833, + "nodeType": "StructuredDocumentation", + "src": "438:56:6", + "text": " @dev Returns the symbol of the token." + }, + "functionSelector": "95d89b41", + "id": 838, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "symbol", + "nameLocation": "508:6:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 834, + "nodeType": "ParameterList", + "parameters": [], + "src": "514:2:6" + }, + "returnParameters": { + "id": 837, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 836, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 838, + "src": "540:13:6", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 835, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "540:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "539:15:6" + }, + "scope": 845, + "src": "499:56:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 839, + "nodeType": "StructuredDocumentation", + "src": "561:65:6", + "text": " @dev Returns the decimals places of the token." + }, + "functionSelector": "313ce567", + "id": 844, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nameLocation": "640:8:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 840, + "nodeType": "ParameterList", + "parameters": [], + "src": "648:2:6" + }, + "returnParameters": { + "id": 843, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 842, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 844, + "src": "674:5:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 841, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "674:5:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "673:7:6" + }, + "scope": 845, + "src": "631:50:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 846, + "src": "278:405:6", + "usedErrors": [], + "usedEvents": [753, 762] + } + ], + "nodeType": "SourceUnit", + "src": "125:559:6" + }, + "id": 6 + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "exportedSymbols": { + "IERC20": [819] + }, + "id": 820, + "license": "MIT", + "nodes": [ + { + "id": 743, + "literals": ["solidity", ">=", "0.4", ".16"], + "nodeType": "PragmaDirective", + "src": "106:25:5" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC20", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 744, + "nodeType": "StructuredDocumentation", + "src": "133:71:5", + "text": " @dev Interface of the ERC-20 standard as defined in the ERC." + }, + "fullyImplemented": false, + "id": 819, + "linearizedBaseContracts": [819], + "name": "IERC20", + "nameLocation": "215:6:5", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 745, + "nodeType": "StructuredDocumentation", + "src": "228:158:5", + "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." + }, + "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "id": 753, + "name": "Transfer", + "nameLocation": "397:8:5", + "nodeType": "EventDefinition", + "parameters": { + "id": 752, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 747, + "indexed": true, + "mutability": "mutable", + "name": "from", + "nameLocation": "422:4:5", + "nodeType": "VariableDeclaration", + "scope": 753, + "src": "406:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 746, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "406:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 749, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nameLocation": "444:2:5", + "nodeType": "VariableDeclaration", + "scope": 753, + "src": "428:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 748, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "428:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 751, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nameLocation": "456:5:5", + "nodeType": "VariableDeclaration", + "scope": 753, + "src": "448:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 750, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "448:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "405:57:5" + }, + "src": "391:72:5" + }, + { + "anonymous": false, + "documentation": { + "id": 754, + "nodeType": "StructuredDocumentation", + "src": "469:148:5", + "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance." + }, + "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "id": 762, + "name": "Approval", + "nameLocation": "628:8:5", + "nodeType": "EventDefinition", + "parameters": { + "id": 761, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 756, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "653:5:5", + "nodeType": "VariableDeclaration", + "scope": 762, + "src": "637:21:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 755, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "637:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 758, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nameLocation": "676:7:5", + "nodeType": "VariableDeclaration", + "scope": 762, + "src": "660:23:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 757, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "660:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 760, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nameLocation": "693:5:5", + "nodeType": "VariableDeclaration", + "scope": 762, + "src": "685:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 759, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "685:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "636:63:5" + }, + "src": "622:78:5" + }, + { + "documentation": { + "id": 763, + "nodeType": "StructuredDocumentation", + "src": "706:65:5", + "text": " @dev Returns the value of tokens in existence." + }, + "functionSelector": "18160ddd", + "id": 768, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nameLocation": "785:11:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 764, + "nodeType": "ParameterList", + "parameters": [], + "src": "796:2:5" + }, + "returnParameters": { + "id": 767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 766, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 768, + "src": "822:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 765, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "822:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "821:9:5" + }, + "scope": 819, + "src": "776:55:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 769, + "nodeType": "StructuredDocumentation", + "src": "837:71:5", + "text": " @dev Returns the value of tokens owned by `account`." + }, + "functionSelector": "70a08231", + "id": 776, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nameLocation": "922:9:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 772, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 771, + "mutability": "mutable", + "name": "account", + "nameLocation": "940:7:5", + "nodeType": "VariableDeclaration", + "scope": 776, + "src": "932:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 770, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "932:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "931:17:5" + }, + "returnParameters": { + "id": 775, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 774, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 776, + "src": "972:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 773, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "972:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "971:9:5" + }, + "scope": 819, + "src": "913:68:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 777, + "nodeType": "StructuredDocumentation", + "src": "987:213:5", + "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "a9059cbb", + "id": 786, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nameLocation": "1214:8:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 782, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 779, + "mutability": "mutable", + "name": "to", + "nameLocation": "1231:2:5", + "nodeType": "VariableDeclaration", + "scope": 786, + "src": "1223:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 778, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1223:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 781, + "mutability": "mutable", + "name": "value", + "nameLocation": "1243:5:5", + "nodeType": "VariableDeclaration", + "scope": 786, + "src": "1235:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 780, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1235:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1222:27:5" + }, + "returnParameters": { + "id": 785, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 784, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 786, + "src": "1268:4:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 783, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1268:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1267:6:5" + }, + "scope": 819, + "src": "1205:69:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 787, + "nodeType": "StructuredDocumentation", + "src": "1280:264:5", + "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called." + }, + "functionSelector": "dd62ed3e", + "id": 796, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nameLocation": "1558:9:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 792, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 789, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1576:5:5", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "1568:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 788, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1568:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 791, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1591:7:5", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "1583:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 790, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1583:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1567:32:5" + }, + "returnParameters": { + "id": 795, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 794, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "1623:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 793, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1623:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1622:9:5" + }, + "scope": 819, + "src": "1549:83:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 797, + "nodeType": "StructuredDocumentation", + "src": "1638:667:5", + "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event." + }, + "functionSelector": "095ea7b3", + "id": 806, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approve", + "nameLocation": "2319:7:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 802, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 799, + "mutability": "mutable", + "name": "spender", + "nameLocation": "2335:7:5", + "nodeType": "VariableDeclaration", + "scope": 806, + "src": "2327:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 798, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2327:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 801, + "mutability": "mutable", + "name": "value", + "nameLocation": "2352:5:5", + "nodeType": "VariableDeclaration", + "scope": 806, + "src": "2344:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 800, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2344:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2326:32:5" + }, + "returnParameters": { + "id": 805, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 804, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 806, + "src": "2377:4:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 803, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2377:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2376:6:5" + }, + "scope": 819, + "src": "2310:73:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 807, + "nodeType": "StructuredDocumentation", + "src": "2389:297:5", + "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "23b872dd", + "id": 818, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nameLocation": "2700:12:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 814, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 809, + "mutability": "mutable", + "name": "from", + "nameLocation": "2721:4:5", + "nodeType": "VariableDeclaration", + "scope": 818, + "src": "2713:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 808, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2713:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 811, + "mutability": "mutable", + "name": "to", + "nameLocation": "2735:2:5", + "nodeType": "VariableDeclaration", + "scope": 818, + "src": "2727:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 810, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2727:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 813, + "mutability": "mutable", + "name": "value", + "nameLocation": "2747:5:5", + "nodeType": "VariableDeclaration", + "scope": 818, + "src": "2739:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 812, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2739:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2712:41:5" + }, + "returnParameters": { + "id": 817, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 816, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 818, + "src": "2772:4:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 815, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2772:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2771:6:5" + }, + "scope": 819, + "src": "2691:87:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 820, + "src": "205:2575:5", + "usedErrors": [], + "usedEvents": [753, 762] + } + ], + "nodeType": "SourceUnit", + "src": "106:2675:5" + }, + "id": 5 + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "exportedSymbols": { + "IERC20": [819], + "IERC1363": [81], + "SafeERC20": [1300] + }, + "id": 1301, + "license": "MIT", + "nodes": [ + { + "id": 847, + "literals": ["solidity", "^", "0.8", ".20"], + "nodeType": "PragmaDirective", + "src": "115:24:7" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "../IERC20.sol", + "id": 849, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1301, + "sourceUnit": 820, + "src": "141:37:7", + "symbolAliases": [ + { + "foreign": { + "id": 848, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "149:6:7", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC1363.sol", + "file": "../../../interfaces/IERC1363.sol", + "id": 851, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1301, + "sourceUnit": 82, + "src": "179:58:7", + "symbolAliases": [ + { + "foreign": { + "id": 850, + "name": "IERC1363", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 81, + "src": "187:8:7", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "SafeERC20", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 852, + "nodeType": "StructuredDocumentation", + "src": "239:458:7", + "text": " @title SafeERC20\n @dev Wrappers around ERC-20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc." + }, + "fullyImplemented": true, + "id": 1300, + "linearizedBaseContracts": [1300], + "name": "SafeERC20", + "nameLocation": "706:9:7", + "nodes": [ + { + "documentation": { + "id": 853, + "nodeType": "StructuredDocumentation", + "src": "722:65:7", + "text": " @dev An operation with an ERC-20 token failed." + }, + "errorSelector": "5274afe7", + "id": 857, + "name": "SafeERC20FailedOperation", + "nameLocation": "798:24:7", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 856, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 855, + "mutability": "mutable", + "name": "token", + "nameLocation": "831:5:7", + "nodeType": "VariableDeclaration", + "scope": 857, + "src": "823:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 854, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "823:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "822:15:7" + }, + "src": "792:46:7" + }, + { + "documentation": { + "id": 858, + "nodeType": "StructuredDocumentation", + "src": "844:71:7", + "text": " @dev Indicates a failed `decreaseAllowance` request." + }, + "errorSelector": "e570110f", + "id": 866, + "name": "SafeERC20FailedDecreaseAllowance", + "nameLocation": "926:32:7", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 865, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 860, + "mutability": "mutable", + "name": "spender", + "nameLocation": "967:7:7", + "nodeType": "VariableDeclaration", + "scope": 866, + "src": "959:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 859, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "959:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 862, + "mutability": "mutable", + "name": "currentAllowance", + "nameLocation": "984:16:7", + "nodeType": "VariableDeclaration", + "scope": 866, + "src": "976:24:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 861, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "976:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 864, + "mutability": "mutable", + "name": "requestedDecrease", + "nameLocation": "1010:17:7", + "nodeType": "VariableDeclaration", + "scope": 866, + "src": "1002:25:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 863, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1002:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "958:70:7" + }, + "src": "920:109:7" + }, + { + "body": { + "id": 893, + "nodeType": "Block", + "src": "1291:132:7", + "statements": [ + { + "condition": { + "id": 883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1305:38:7", + "subExpression": { + "arguments": [ + { + "id": 878, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 870, + "src": "1320:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 879, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 872, + "src": "1327:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 880, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 874, + "src": "1331:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "74727565", + "id": 881, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1338:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 877, + "name": "_safeTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1251, + "src": "1306:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (contract IERC20,address,uint256,bool) returns (bool)" + } + }, + "id": 882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1306:37:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 892, + "nodeType": "IfStatement", + "src": "1301:116:7", + "trueBody": { + "id": 891, + "nodeType": "Block", + "src": "1345:72:7", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 887, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 870, + "src": "1399:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + ], + "id": 886, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1391:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 885, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1391:7:7", + "typeDescriptions": {} + } + }, + "id": 888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1391:14:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 884, + "name": "SafeERC20FailedOperation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 857, + "src": "1366:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1366:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 890, + "nodeType": "RevertStatement", + "src": "1359:47:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 867, + "nodeType": "StructuredDocumentation", + "src": "1035:179:7", + "text": " @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful." + }, + "id": 894, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeTransfer", + "nameLocation": "1228:12:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 875, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 870, + "mutability": "mutable", + "name": "token", + "nameLocation": "1248:5:7", + "nodeType": "VariableDeclaration", + "scope": 894, + "src": "1241:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 869, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 868, + "name": "IERC20", + "nameLocations": ["1241:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "1241:6:7" + }, + "referencedDeclaration": 819, + "src": "1241:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 872, + "mutability": "mutable", + "name": "to", + "nameLocation": "1263:2:7", + "nodeType": "VariableDeclaration", + "scope": 894, + "src": "1255:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 871, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1255:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 874, + "mutability": "mutable", + "name": "value", + "nameLocation": "1275:5:7", + "nodeType": "VariableDeclaration", + "scope": 894, + "src": "1267:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 873, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1267:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1240:41:7" + }, + "returnParameters": { + "id": 876, + "nodeType": "ParameterList", + "parameters": [], + "src": "1291:0:7" + }, + "scope": 1300, + "src": "1219:204:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 924, + "nodeType": "Block", + "src": "1752:142:7", + "statements": [ + { + "condition": { + "id": 914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1766:48:7", + "subExpression": { + "arguments": [ + { + "id": 908, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 898, + "src": "1785:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 909, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 900, + "src": "1792:4:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 910, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "1798:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 911, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 904, + "src": "1802:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "74727565", + "id": 912, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1809:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 907, + "name": "_safeTransferFrom", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1276, + "src": "1767:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (contract IERC20,address,address,uint256,bool) returns (bool)" + } + }, + "id": 913, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1767:47:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 923, + "nodeType": "IfStatement", + "src": "1762:126:7", + "trueBody": { + "id": 922, + "nodeType": "Block", + "src": "1816:72:7", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 918, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 898, + "src": "1870:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + ], + "id": 917, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1862:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 916, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1862:7:7", + "typeDescriptions": {} + } + }, + "id": 919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1862:14:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 915, + "name": "SafeERC20FailedOperation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 857, + "src": "1837:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1837:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 921, + "nodeType": "RevertStatement", + "src": "1830:47:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 895, + "nodeType": "StructuredDocumentation", + "src": "1429:228:7", + "text": " @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful." + }, + "id": 925, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeTransferFrom", + "nameLocation": "1671:16:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 905, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 898, + "mutability": "mutable", + "name": "token", + "nameLocation": "1695:5:7", + "nodeType": "VariableDeclaration", + "scope": 925, + "src": "1688:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 897, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 896, + "name": "IERC20", + "nameLocations": ["1688:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "1688:6:7" + }, + "referencedDeclaration": 819, + "src": "1688:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 900, + "mutability": "mutable", + "name": "from", + "nameLocation": "1710:4:7", + "nodeType": "VariableDeclaration", + "scope": 925, + "src": "1702:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 899, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1702:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 902, + "mutability": "mutable", + "name": "to", + "nameLocation": "1724:2:7", + "nodeType": "VariableDeclaration", + "scope": 925, + "src": "1716:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 901, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1716:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 904, + "mutability": "mutable", + "name": "value", + "nameLocation": "1736:5:7", + "nodeType": "VariableDeclaration", + "scope": 925, + "src": "1728:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 903, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1728:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1687:55:7" + }, + "returnParameters": { + "id": 906, + "nodeType": "ParameterList", + "parameters": [], + "src": "1752:0:7" + }, + "scope": 1300, + "src": "1662:232:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 945, + "nodeType": "Block", + "src": "2121:62:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 939, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 929, + "src": "2152:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 940, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 931, + "src": "2159:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 941, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 933, + "src": "2163:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "66616c7365", + "id": 942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2170:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 938, + "name": "_safeTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1251, + "src": "2138:13:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (contract IERC20,address,uint256,bool) returns (bool)" + } + }, + "id": 943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2138:38:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 937, + "id": 944, + "nodeType": "Return", + "src": "2131:45:7" + } + ] + }, + "documentation": { + "id": 926, + "nodeType": "StructuredDocumentation", + "src": "1900:126:7", + "text": " @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful." + }, + "id": 946, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "trySafeTransfer", + "nameLocation": "2040:15:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 934, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 929, + "mutability": "mutable", + "name": "token", + "nameLocation": "2063:5:7", + "nodeType": "VariableDeclaration", + "scope": 946, + "src": "2056:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 928, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 927, + "name": "IERC20", + "nameLocations": ["2056:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "2056:6:7" + }, + "referencedDeclaration": 819, + "src": "2056:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 931, + "mutability": "mutable", + "name": "to", + "nameLocation": "2078:2:7", + "nodeType": "VariableDeclaration", + "scope": 946, + "src": "2070:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 930, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2070:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 933, + "mutability": "mutable", + "name": "value", + "nameLocation": "2090:5:7", + "nodeType": "VariableDeclaration", + "scope": 946, + "src": "2082:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 932, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2082:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2055:41:7" + }, + "returnParameters": { + "id": 937, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 936, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 946, + "src": "2115:4:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 935, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2115:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2114:6:7" + }, + "scope": 1300, + "src": "2031:152:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 969, + "nodeType": "Block", + "src": "2432:72:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 962, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 950, + "src": "2467:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 963, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 952, + "src": "2474:4:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 964, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 954, + "src": "2480:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 965, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 956, + "src": "2484:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "66616c7365", + "id": 966, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2491:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 961, + "name": "_safeTransferFrom", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1276, + "src": "2449:17:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (contract IERC20,address,address,uint256,bool) returns (bool)" + } + }, + "id": 967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2449:48:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 960, + "id": 968, + "nodeType": "Return", + "src": "2442:55:7" + } + ] + }, + "documentation": { + "id": 947, + "nodeType": "StructuredDocumentation", + "src": "2189:130:7", + "text": " @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful." + }, + "id": 970, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "trySafeTransferFrom", + "nameLocation": "2333:19:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 957, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 950, + "mutability": "mutable", + "name": "token", + "nameLocation": "2360:5:7", + "nodeType": "VariableDeclaration", + "scope": 970, + "src": "2353:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 949, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 948, + "name": "IERC20", + "nameLocations": ["2353:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "2353:6:7" + }, + "referencedDeclaration": 819, + "src": "2353:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 952, + "mutability": "mutable", + "name": "from", + "nameLocation": "2375:4:7", + "nodeType": "VariableDeclaration", + "scope": 970, + "src": "2367:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 951, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2367:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 954, + "mutability": "mutable", + "name": "to", + "nameLocation": "2389:2:7", + "nodeType": "VariableDeclaration", + "scope": 970, + "src": "2381:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 953, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2381:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 956, + "mutability": "mutable", + "name": "value", + "nameLocation": "2401:5:7", + "nodeType": "VariableDeclaration", + "scope": 970, + "src": "2393:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 955, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2393:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2352:55:7" + }, + "returnParameters": { + "id": 960, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 959, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 970, + "src": "2426:4:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 958, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2426:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2425:6:7" + }, + "scope": 1300, + "src": "2324:180:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1000, + "nodeType": "Block", + "src": "3246:139:7", + "statements": [ + { + "assignments": [982], + "declarations": [ + { + "constant": false, + "id": 982, + "mutability": "mutable", + "name": "oldAllowance", + "nameLocation": "3264:12:7", + "nodeType": "VariableDeclaration", + "scope": 1000, + "src": "3256:20:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 981, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3256:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 991, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 987, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3303:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeERC20_$1300", + "typeString": "library SafeERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SafeERC20_$1300", + "typeString": "library SafeERC20" + } + ], + "id": 986, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3295:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 985, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3295:7:7", + "typeDescriptions": {} + } + }, + "id": 988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3295:13:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 989, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 976, + "src": "3310:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 983, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 974, + "src": "3279:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "id": 984, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3285:9:7", + "memberName": "allowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 796, + "src": "3279:15:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view external returns (uint256)" + } + }, + "id": 990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3279:39:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3256:62:7" + }, + { + "expression": { + "arguments": [ + { + "id": 993, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 974, + "src": "3341:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 994, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 976, + "src": "3348:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 995, + "name": "oldAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 982, + "src": "3357:12:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 996, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 978, + "src": "3372:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3357:20:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 992, + "name": "forceApprove", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "3328:12:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3328:50:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 999, + "nodeType": "ExpressionStatement", + "src": "3328:50:7" + } + ] + }, + "documentation": { + "id": 971, + "nodeType": "StructuredDocumentation", + "src": "2510:645:7", + "text": " @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior." + }, + "id": 1001, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeIncreaseAllowance", + "nameLocation": "3169:21:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 979, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 974, + "mutability": "mutable", + "name": "token", + "nameLocation": "3198:5:7", + "nodeType": "VariableDeclaration", + "scope": 1001, + "src": "3191:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 973, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 972, + "name": "IERC20", + "nameLocations": ["3191:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "3191:6:7" + }, + "referencedDeclaration": 819, + "src": "3191:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 976, + "mutability": "mutable", + "name": "spender", + "nameLocation": "3213:7:7", + "nodeType": "VariableDeclaration", + "scope": 1001, + "src": "3205:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 975, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3205:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 978, + "mutability": "mutable", + "name": "value", + "nameLocation": "3230:5:7", + "nodeType": "VariableDeclaration", + "scope": 1001, + "src": "3222:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 977, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3222:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3190:46:7" + }, + "returnParameters": { + "id": 980, + "nodeType": "ParameterList", + "parameters": [], + "src": "3246:0:7" + }, + "scope": 1300, + "src": "3160:225:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1043, + "nodeType": "Block", + "src": "4151:370:7", + "statements": [ + { + "id": 1042, + "nodeType": "UncheckedBlock", + "src": "4161:354:7", + "statements": [ + { + "assignments": [1013], + "declarations": [ + { + "constant": false, + "id": 1013, + "mutability": "mutable", + "name": "currentAllowance", + "nameLocation": "4193:16:7", + "nodeType": "VariableDeclaration", + "scope": 1042, + "src": "4185:24:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1012, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4185:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 1022, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 1018, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4236:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeERC20_$1300", + "typeString": "library SafeERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SafeERC20_$1300", + "typeString": "library SafeERC20" + } + ], + "id": 1017, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4228:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1016, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4228:7:7", + "typeDescriptions": {} + } + }, + "id": 1019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4228:13:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1020, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1007, + "src": "4243:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 1014, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1005, + "src": "4212:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "id": 1015, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4218:9:7", + "memberName": "allowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 796, + "src": "4212:15:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view external returns (uint256)" + } + }, + "id": 1021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4212:39:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4185:66:7" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1023, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1013, + "src": "4269:16:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 1024, + "name": "requestedDecrease", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1009, + "src": "4288:17:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4269:36:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1033, + "nodeType": "IfStatement", + "src": "4265:160:7", + "trueBody": { + "id": 1032, + "nodeType": "Block", + "src": "4307:118:7", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 1027, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1007, + "src": "4365:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1028, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1013, + "src": "4374:16:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1029, + "name": "requestedDecrease", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1009, + "src": "4392:17:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1026, + "name": "SafeERC20FailedDecreaseAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 866, + "src": "4332:32:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256,uint256) pure returns (error)" + } + }, + "id": 1030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4332:78:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 1031, + "nodeType": "RevertStatement", + "src": "4325:85:7" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 1035, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1005, + "src": "4451:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 1036, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1007, + "src": "4458:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1039, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1037, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1013, + "src": "4467:16:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 1038, + "name": "requestedDecrease", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1009, + "src": "4486:17:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4467:36:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1034, + "name": "forceApprove", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "4438:12:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4438:66:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1041, + "nodeType": "ExpressionStatement", + "src": "4438:66:7" + } + ] + } + ] + }, + "documentation": { + "id": 1002, + "nodeType": "StructuredDocumentation", + "src": "3391:657:7", + "text": " @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior." + }, + "id": 1044, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeDecreaseAllowance", + "nameLocation": "4062:21:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1010, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1005, + "mutability": "mutable", + "name": "token", + "nameLocation": "4091:5:7", + "nodeType": "VariableDeclaration", + "scope": 1044, + "src": "4084:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1004, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1003, + "name": "IERC20", + "nameLocations": ["4084:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "4084:6:7" + }, + "referencedDeclaration": 819, + "src": "4084:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1007, + "mutability": "mutable", + "name": "spender", + "nameLocation": "4106:7:7", + "nodeType": "VariableDeclaration", + "scope": 1044, + "src": "4098:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1006, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4098:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1009, + "mutability": "mutable", + "name": "requestedDecrease", + "nameLocation": "4123:17:7", + "nodeType": "VariableDeclaration", + "scope": 1044, + "src": "4115:25:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1008, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4115:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4083:58:7" + }, + "returnParameters": { + "id": 1011, + "nodeType": "ParameterList", + "parameters": [], + "src": "4151:0:7" + }, + "scope": 1300, + "src": "4053:468:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1094, + "nodeType": "Block", + "src": "5175:290:7", + "statements": [ + { + "condition": { + "id": 1061, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5189:43:7", + "subExpression": { + "arguments": [ + { + "id": 1056, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "5203:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 1057, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1050, + "src": "5210:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1058, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1052, + "src": "5219:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "66616c7365", + "id": 1059, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5226:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1055, + "name": "_safeApprove", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1299, + "src": "5190:12:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (contract IERC20,address,uint256,bool) returns (bool)" + } + }, + "id": 1060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5190:42:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1093, + "nodeType": "IfStatement", + "src": "5185:274:7", + "trueBody": { + "id": 1092, + "nodeType": "Block", + "src": "5234:225:7", + "statements": [ + { + "condition": { + "id": 1068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5252:38:7", + "subExpression": { + "arguments": [ + { + "id": 1063, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "5266:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 1064, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1050, + "src": "5273:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "30", + "id": 1065, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5282:1:7", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "74727565", + "id": 1066, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5285:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1062, + "name": "_safeApprove", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1299, + "src": "5253:12:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (contract IERC20,address,uint256,bool) returns (bool)" + } + }, + "id": 1067, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5253:37:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1076, + "nodeType": "IfStatement", + "src": "5248:91:7", + "trueBody": { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 1072, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "5332:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + ], + "id": 1071, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5324:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1070, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5324:7:7", + "typeDescriptions": {} + } + }, + "id": 1073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5324:14:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1069, + "name": "SafeERC20FailedOperation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 857, + "src": "5299:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 1074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5299:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 1075, + "nodeType": "RevertStatement", + "src": "5292:47:7" + } + }, + { + "condition": { + "id": 1083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5357:42:7", + "subExpression": { + "arguments": [ + { + "id": 1078, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "5371:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + { + "id": 1079, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1050, + "src": "5378:7:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1080, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1052, + "src": "5387:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "74727565", + "id": 1081, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5394:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1077, + "name": "_safeApprove", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1299, + "src": "5358:12:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (contract IERC20,address,uint256,bool) returns (bool)" + } + }, + "id": 1082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5358:41:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1091, + "nodeType": "IfStatement", + "src": "5353:95:7", + "trueBody": { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 1087, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "5441:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + ], + "id": 1086, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5433:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1085, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5433:7:7", + "typeDescriptions": {} + } + }, + "id": 1088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5433:14:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1084, + "name": "SafeERC20FailedOperation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 857, + "src": "5408:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 1089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5408:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 1090, + "nodeType": "RevertStatement", + "src": "5401:47:7" + } + } + ] + } + } + ] + }, + "documentation": { + "id": 1045, + "nodeType": "StructuredDocumentation", + "src": "4527:566:7", + "text": " @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT.\n NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n set here." + }, + "id": 1095, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "forceApprove", + "nameLocation": "5107:12:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1053, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1048, + "mutability": "mutable", + "name": "token", + "nameLocation": "5127:5:7", + "nodeType": "VariableDeclaration", + "scope": 1095, + "src": "5120:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1047, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1046, + "name": "IERC20", + "nameLocations": ["5120:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "5120:6:7" + }, + "referencedDeclaration": 819, + "src": "5120:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1050, + "mutability": "mutable", + "name": "spender", + "nameLocation": "5142:7:7", + "nodeType": "VariableDeclaration", + "scope": 1095, + "src": "5134:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1049, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5134:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1052, + "mutability": "mutable", + "name": "value", + "nameLocation": "5159:5:7", + "nodeType": "VariableDeclaration", + "scope": 1095, + "src": "5151:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1051, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5151:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5119:46:7" + }, + "returnParameters": { + "id": 1054, + "nodeType": "ParameterList", + "parameters": [], + "src": "5175:0:7" + }, + "scope": 1300, + "src": "5098:367:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1137, + "nodeType": "Block", + "src": "5914:219:7", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "expression": { + "expression": { + "id": 1108, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1101, + "src": "5928:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5931:4:7", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "5928:7:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 1110, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5936:6:7", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5928:14:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 1111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5946:1:7", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5928:19:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "id": 1126, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "6014:39:7", + "subExpression": { + "arguments": [ + { + "id": 1122, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1101, + "src": "6037:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1123, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1103, + "src": "6041:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1124, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1105, + "src": "6048:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 1120, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1099, + "src": "6015:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + "id": 1121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6021:15:7", + "memberName": "transferAndCall", + "nodeType": "MemberAccess", + "referencedDeclaration": 32, + "src": "6015:21:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,uint256,bytes memory) external returns (bool)" + } + }, + "id": 1125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6015:38:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1135, + "nodeType": "IfStatement", + "src": "6010:117:7", + "trueBody": { + "id": 1134, + "nodeType": "Block", + "src": "6055:72:7", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 1130, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1099, + "src": "6109:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + ], + "id": 1129, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6101:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1128, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6101:7:7", + "typeDescriptions": {} + } + }, + "id": 1131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6101:14:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1127, + "name": "SafeERC20FailedOperation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 857, + "src": "6076:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 1132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6076:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 1133, + "nodeType": "RevertStatement", + "src": "6069:47:7" + } + ] + } + }, + "id": 1136, + "nodeType": "IfStatement", + "src": "5924:203:7", + "trueBody": { + "id": 1119, + "nodeType": "Block", + "src": "5949:55:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 1114, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1099, + "src": "5976:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + { + "id": 1115, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1101, + "src": "5983:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1116, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1103, + "src": "5987:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1113, + "name": "safeTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 894, + "src": "5963:12:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5963:30:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1118, + "nodeType": "ExpressionStatement", + "src": "5963:30:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 1096, + "nodeType": "StructuredDocumentation", + "src": "5471:335:7", + "text": " @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that relies on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`." + }, + "id": 1138, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferAndCallRelaxed", + "nameLocation": "5820:22:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1106, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1099, + "mutability": "mutable", + "name": "token", + "nameLocation": "5852:5:7", + "nodeType": "VariableDeclaration", + "scope": 1138, + "src": "5843:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + }, + "typeName": { + "id": 1098, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1097, + "name": "IERC1363", + "nameLocations": ["5843:8:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 81, + "src": "5843:8:7" + }, + "referencedDeclaration": 81, + "src": "5843:8:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1101, + "mutability": "mutable", + "name": "to", + "nameLocation": "5867:2:7", + "nodeType": "VariableDeclaration", + "scope": 1138, + "src": "5859:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1100, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5859:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1103, + "mutability": "mutable", + "name": "value", + "nameLocation": "5879:5:7", + "nodeType": "VariableDeclaration", + "scope": 1138, + "src": "5871:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5871:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1105, + "mutability": "mutable", + "name": "data", + "nameLocation": "5899:4:7", + "nodeType": "VariableDeclaration", + "scope": 1138, + "src": "5886:17:7", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1104, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5886:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5842:62:7" + }, + "returnParameters": { + "id": 1107, + "nodeType": "ParameterList", + "parameters": [], + "src": "5914:0:7" + }, + "scope": 1300, + "src": "5811:322:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1184, + "nodeType": "Block", + "src": "6654:239:7", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1157, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "expression": { + "expression": { + "id": 1153, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1146, + "src": "6668:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6671:4:7", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "6668:7:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 1155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6676:6:7", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6668:14:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 1156, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6686:1:7", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6668:19:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "id": 1173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "6764:49:7", + "subExpression": { + "arguments": [ + { + "id": 1168, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1144, + "src": "6791:4:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1169, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1146, + "src": "6797:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1170, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1148, + "src": "6801:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1171, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1150, + "src": "6808:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 1166, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1142, + "src": "6765:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + "id": 1167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6771:19:7", + "memberName": "transferFromAndCall", + "nodeType": "MemberAccess", + "referencedDeclaration": 58, + "src": "6765:25:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,address,uint256,bytes memory) external returns (bool)" + } + }, + "id": 1172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6765:48:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1182, + "nodeType": "IfStatement", + "src": "6760:127:7", + "trueBody": { + "id": 1181, + "nodeType": "Block", + "src": "6815:72:7", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 1177, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1142, + "src": "6869:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + ], + "id": 1176, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6861:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1175, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6861:7:7", + "typeDescriptions": {} + } + }, + "id": 1178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6861:14:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1174, + "name": "SafeERC20FailedOperation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 857, + "src": "6836:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 1179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6836:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 1180, + "nodeType": "RevertStatement", + "src": "6829:47:7" + } + ] + } + }, + "id": 1183, + "nodeType": "IfStatement", + "src": "6664:223:7", + "trueBody": { + "id": 1165, + "nodeType": "Block", + "src": "6689:65:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 1159, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1142, + "src": "6720:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + { + "id": 1160, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1144, + "src": "6727:4:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1161, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1146, + "src": "6733:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1162, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1148, + "src": "6737:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1158, + "name": "safeTransferFrom", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 925, + "src": "6703:16:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,address,address,uint256)" + } + }, + "id": 1163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6703:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1164, + "nodeType": "ExpressionStatement", + "src": "6703:40:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 1139, + "nodeType": "StructuredDocumentation", + "src": "6139:343:7", + "text": " @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n has no code. This can be used to implement an {ERC721}-like safe transfer that relies on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`." + }, + "id": 1185, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFromAndCallRelaxed", + "nameLocation": "6496:26:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1142, + "mutability": "mutable", + "name": "token", + "nameLocation": "6541:5:7", + "nodeType": "VariableDeclaration", + "scope": 1185, + "src": "6532:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + }, + "typeName": { + "id": 1141, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1140, + "name": "IERC1363", + "nameLocations": ["6532:8:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 81, + "src": "6532:8:7" + }, + "referencedDeclaration": 81, + "src": "6532:8:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1144, + "mutability": "mutable", + "name": "from", + "nameLocation": "6564:4:7", + "nodeType": "VariableDeclaration", + "scope": 1185, + "src": "6556:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1143, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6556:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1146, + "mutability": "mutable", + "name": "to", + "nameLocation": "6586:2:7", + "nodeType": "VariableDeclaration", + "scope": 1185, + "src": "6578:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1145, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6578:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1148, + "mutability": "mutable", + "name": "value", + "nameLocation": "6606:5:7", + "nodeType": "VariableDeclaration", + "scope": 1185, + "src": "6598:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1147, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6598:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1150, + "mutability": "mutable", + "name": "data", + "nameLocation": "6634:4:7", + "nodeType": "VariableDeclaration", + "scope": 1185, + "src": "6621:17:7", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1149, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6621:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6522:122:7" + }, + "returnParameters": { + "id": 1152, + "nodeType": "ParameterList", + "parameters": [], + "src": "6654:0:7" + }, + "scope": 1300, + "src": "6487:406:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1227, + "nodeType": "Block", + "src": "7661:218:7", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "expression": { + "expression": { + "id": 1198, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1191, + "src": "7675:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7678:4:7", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "7675:7:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 1200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7683:6:7", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7675:14:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 1201, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7693:1:7", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7675:19:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "id": 1216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7761:38:7", + "subExpression": { + "arguments": [ + { + "id": 1212, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1191, + "src": "7783:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1213, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1193, + "src": "7787:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1214, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1195, + "src": "7794:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 1210, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1189, + "src": "7762:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + "id": 1211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7768:14:7", + "memberName": "approveAndCall", + "nodeType": "MemberAccess", + "referencedDeclaration": 80, + "src": "7762:20:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,uint256,bytes memory) external returns (bool)" + } + }, + "id": 1215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7762:37:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1225, + "nodeType": "IfStatement", + "src": "7757:116:7", + "trueBody": { + "id": 1224, + "nodeType": "Block", + "src": "7801:72:7", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 1220, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1189, + "src": "7855:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + ], + "id": 1219, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7847:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1218, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7847:7:7", + "typeDescriptions": {} + } + }, + "id": 1221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7847:14:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1217, + "name": "SafeERC20FailedOperation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 857, + "src": "7822:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 1222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7822:40:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 1223, + "nodeType": "RevertStatement", + "src": "7815:47:7" + } + ] + } + }, + "id": 1226, + "nodeType": "IfStatement", + "src": "7671:202:7", + "trueBody": { + "id": 1209, + "nodeType": "Block", + "src": "7696:55:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 1204, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1189, + "src": "7723:5:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + { + "id": 1205, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1191, + "src": "7730:2:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1206, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1193, + "src": "7734:5:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1203, + "name": "forceApprove", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "7710:12:7", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1207, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7710:30:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1208, + "nodeType": "ExpressionStatement", + "src": "7710:30:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 1186, + "nodeType": "StructuredDocumentation", + "src": "6899:655:7", + "text": " @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n Oppositely, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n once without retrying, and relies on the returned value to be true.\n Reverts if the returned value is other than `true`." + }, + "id": 1228, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "approveAndCallRelaxed", + "nameLocation": "7568:21:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1196, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1189, + "mutability": "mutable", + "name": "token", + "nameLocation": "7599:5:7", + "nodeType": "VariableDeclaration", + "scope": 1228, + "src": "7590:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + }, + "typeName": { + "id": 1188, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1187, + "name": "IERC1363", + "nameLocations": ["7590:8:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 81, + "src": "7590:8:7" + }, + "referencedDeclaration": 81, + "src": "7590:8:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1363_$81", + "typeString": "contract IERC1363" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1191, + "mutability": "mutable", + "name": "to", + "nameLocation": "7614:2:7", + "nodeType": "VariableDeclaration", + "scope": 1228, + "src": "7606:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1190, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7606:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1193, + "mutability": "mutable", + "name": "value", + "nameLocation": "7626:5:7", + "nodeType": "VariableDeclaration", + "scope": 1228, + "src": "7618:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7618:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1195, + "mutability": "mutable", + "name": "data", + "nameLocation": "7646:4:7", + "nodeType": "VariableDeclaration", + "scope": 1228, + "src": "7633:17:7", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1194, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7633:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "7589:62:7" + }, + "returnParameters": { + "id": 1197, + "nodeType": "ParameterList", + "parameters": [], + "src": "7661:0:7" + }, + "scope": 1300, + "src": "7559:320:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1250, + "nodeType": "Block", + "src": "8481:1136:7", + "statements": [ + { + "assignments": [1244], + "declarations": [ + { + "constant": false, + "id": 1244, + "mutability": "mutable", + "name": "selector", + "nameLocation": "8498:8:7", + "nodeType": "VariableDeclaration", + "scope": 1250, + "src": "8491:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 1243, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "8491:6:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 1248, + "initialValue": { + "expression": { + "expression": { + "id": 1245, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "8509:6:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$819_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 1246, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8516:8:7", + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 786, + "src": "8509:15:7", + "typeDescriptions": { + "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function IERC20.transfer(address,uint256) returns (bool)" + } + }, + "id": 1247, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8525:8:7", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "8509:24:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8491:42:7" + }, + { + "AST": { + "nativeSrc": "8569:1042:7", + "nodeType": "YulBlock", + "src": "8569:1042:7", + "statements": [ + { + "nativeSrc": "8583:22:7", + "nodeType": "YulVariableDeclaration", + "src": "8583:22:7", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8600:4:7", + "nodeType": "YulLiteral", + "src": "8600:4:7", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "8594:5:7", + "nodeType": "YulIdentifier", + "src": "8594:5:7" + }, + "nativeSrc": "8594:11:7", + "nodeType": "YulFunctionCall", + "src": "8594:11:7" + }, + "variables": [ + { + "name": "fmp", + "nativeSrc": "8587:3:7", + "nodeType": "YulTypedName", + "src": "8587:3:7", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8625:4:7", + "nodeType": "YulLiteral", + "src": "8625:4:7", + "type": "", + "value": "0x00" + }, + { + "name": "selector", + "nativeSrc": "8631:8:7", + "nodeType": "YulIdentifier", + "src": "8631:8:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "8618:6:7", + "nodeType": "YulIdentifier", + "src": "8618:6:7" + }, + "nativeSrc": "8618:22:7", + "nodeType": "YulFunctionCall", + "src": "8618:22:7" + }, + "nativeSrc": "8618:22:7", + "nodeType": "YulExpressionStatement", + "src": "8618:22:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8660:4:7", + "nodeType": "YulLiteral", + "src": "8660:4:7", + "type": "", + "value": "0x04" + }, + { + "arguments": [ + { + "name": "to", + "nativeSrc": "8670:2:7", + "nodeType": "YulIdentifier", + "src": "8670:2:7" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8678:2:7", + "nodeType": "YulLiteral", + "src": "8678:2:7", + "type": "", + "value": "96" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8686:1:7", + "nodeType": "YulLiteral", + "src": "8686:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "8682:3:7", + "nodeType": "YulIdentifier", + "src": "8682:3:7" + }, + "nativeSrc": "8682:6:7", + "nodeType": "YulFunctionCall", + "src": "8682:6:7" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "8674:3:7", + "nodeType": "YulIdentifier", + "src": "8674:3:7" + }, + "nativeSrc": "8674:15:7", + "nodeType": "YulFunctionCall", + "src": "8674:15:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "8666:3:7", + "nodeType": "YulIdentifier", + "src": "8666:3:7" + }, + "nativeSrc": "8666:24:7", + "nodeType": "YulFunctionCall", + "src": "8666:24:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "8653:6:7", + "nodeType": "YulIdentifier", + "src": "8653:6:7" + }, + "nativeSrc": "8653:38:7", + "nodeType": "YulFunctionCall", + "src": "8653:38:7" + }, + "nativeSrc": "8653:38:7", + "nodeType": "YulExpressionStatement", + "src": "8653:38:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8711:4:7", + "nodeType": "YulLiteral", + "src": "8711:4:7", + "type": "", + "value": "0x24" + }, + { + "name": "value", + "nativeSrc": "8717:5:7", + "nodeType": "YulIdentifier", + "src": "8717:5:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "8704:6:7", + "nodeType": "YulIdentifier", + "src": "8704:6:7" + }, + "nativeSrc": "8704:19:7", + "nodeType": "YulFunctionCall", + "src": "8704:19:7" + }, + "nativeSrc": "8704:19:7", + "nodeType": "YulExpressionStatement", + "src": "8704:19:7" + }, + { + "nativeSrc": "8736:56:7", + "nodeType": "YulAssignment", + "src": "8736:56:7", + "value": { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nativeSrc": "8752:3:7", + "nodeType": "YulIdentifier", + "src": "8752:3:7" + }, + "nativeSrc": "8752:5:7", + "nodeType": "YulFunctionCall", + "src": "8752:5:7" + }, + { + "name": "token", + "nativeSrc": "8759:5:7", + "nodeType": "YulIdentifier", + "src": "8759:5:7" + }, + { + "kind": "number", + "nativeSrc": "8766:1:7", + "nodeType": "YulLiteral", + "src": "8766:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "8769:4:7", + "nodeType": "YulLiteral", + "src": "8769:4:7", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nativeSrc": "8775:4:7", + "nodeType": "YulLiteral", + "src": "8775:4:7", + "type": "", + "value": "0x44" + }, + { + "kind": "number", + "nativeSrc": "8781:4:7", + "nodeType": "YulLiteral", + "src": "8781:4:7", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nativeSrc": "8787:4:7", + "nodeType": "YulLiteral", + "src": "8787:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "call", + "nativeSrc": "8747:4:7", + "nodeType": "YulIdentifier", + "src": "8747:4:7" + }, + "nativeSrc": "8747:45:7", + "nodeType": "YulFunctionCall", + "src": "8747:45:7" + }, + "variableNames": [ + { + "name": "success", + "nativeSrc": "8736:7:7", + "nodeType": "YulIdentifier", + "src": "8736:7:7" + } + ] + }, + { + "body": { + "nativeSrc": "9009:562:7", + "nodeType": "YulBlock", + "src": "9009:562:7", + "statements": [ + { + "body": { + "nativeSrc": "9144:133:7", + "nodeType": "YulBlock", + "src": "9144:133:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "fmp", + "nativeSrc": "9181:3:7", + "nodeType": "YulIdentifier", + "src": "9181:3:7" + }, + { + "kind": "number", + "nativeSrc": "9186:4:7", + "nodeType": "YulLiteral", + "src": "9186:4:7", + "type": "", + "value": "0x00" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "9192:14:7", + "nodeType": "YulIdentifier", + "src": "9192:14:7" + }, + "nativeSrc": "9192:16:7", + "nodeType": "YulFunctionCall", + "src": "9192:16:7" + } + ], + "functionName": { + "name": "returndatacopy", + "nativeSrc": "9166:14:7", + "nodeType": "YulIdentifier", + "src": "9166:14:7" + }, + "nativeSrc": "9166:43:7", + "nodeType": "YulFunctionCall", + "src": "9166:43:7" + }, + "nativeSrc": "9166:43:7", + "nodeType": "YulExpressionStatement", + "src": "9166:43:7" + }, + { + "expression": { + "arguments": [ + { + "name": "fmp", + "nativeSrc": "9237:3:7", + "nodeType": "YulIdentifier", + "src": "9237:3:7" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "9242:14:7", + "nodeType": "YulIdentifier", + "src": "9242:14:7" + }, + "nativeSrc": "9242:16:7", + "nodeType": "YulFunctionCall", + "src": "9242:16:7" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "9230:6:7", + "nodeType": "YulIdentifier", + "src": "9230:6:7" + }, + "nativeSrc": "9230:29:7", + "nodeType": "YulFunctionCall", + "src": "9230:29:7" + }, + "nativeSrc": "9230:29:7", + "nodeType": "YulExpressionStatement", + "src": "9230:29:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "success", + "nativeSrc": "9126:7:7", + "nodeType": "YulIdentifier", + "src": "9126:7:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "9119:6:7", + "nodeType": "YulIdentifier", + "src": "9119:6:7" + }, + "nativeSrc": "9119:15:7", + "nodeType": "YulFunctionCall", + "src": "9119:15:7" + }, + { + "name": "bubble", + "nativeSrc": "9136:6:7", + "nodeType": "YulIdentifier", + "src": "9136:6:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "9115:3:7", + "nodeType": "YulIdentifier", + "src": "9115:3:7" + }, + "nativeSrc": "9115:28:7", + "nodeType": "YulFunctionCall", + "src": "9115:28:7" + }, + "nativeSrc": "9112:165:7", + "nodeType": "YulIf", + "src": "9112:165:7" + }, + { + "nativeSrc": "9476:81:7", + "nodeType": "YulAssignment", + "src": "9476:81:7", + "value": { + "arguments": [ + { + "name": "success", + "nativeSrc": "9491:7:7", + "nodeType": "YulIdentifier", + "src": "9491:7:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "9511:14:7", + "nodeType": "YulIdentifier", + "src": "9511:14:7" + }, + "nativeSrc": "9511:16:7", + "nodeType": "YulFunctionCall", + "src": "9511:16:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "9504:6:7", + "nodeType": "YulIdentifier", + "src": "9504:6:7" + }, + "nativeSrc": "9504:24:7", + "nodeType": "YulFunctionCall", + "src": "9504:24:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "token", + "nativeSrc": "9545:5:7", + "nodeType": "YulIdentifier", + "src": "9545:5:7" + } + ], + "functionName": { + "name": "extcodesize", + "nativeSrc": "9533:11:7", + "nodeType": "YulIdentifier", + "src": "9533:11:7" + }, + "nativeSrc": "9533:18:7", + "nodeType": "YulFunctionCall", + "src": "9533:18:7" + }, + { + "kind": "number", + "nativeSrc": "9553:1:7", + "nodeType": "YulLiteral", + "src": "9553:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "9530:2:7", + "nodeType": "YulIdentifier", + "src": "9530:2:7" + }, + "nativeSrc": "9530:25:7", + "nodeType": "YulFunctionCall", + "src": "9530:25:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "9500:3:7", + "nodeType": "YulIdentifier", + "src": "9500:3:7" + }, + "nativeSrc": "9500:56:7", + "nodeType": "YulFunctionCall", + "src": "9500:56:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "9487:3:7", + "nodeType": "YulIdentifier", + "src": "9487:3:7" + }, + "nativeSrc": "9487:70:7", + "nodeType": "YulFunctionCall", + "src": "9487:70:7" + }, + "variableNames": [ + { + "name": "success", + "nativeSrc": "9476:7:7", + "nodeType": "YulIdentifier", + "src": "9476:7:7" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "success", + "nativeSrc": "8979:7:7", + "nodeType": "YulIdentifier", + "src": "8979:7:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8997:4:7", + "nodeType": "YulLiteral", + "src": "8997:4:7", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "8991:5:7", + "nodeType": "YulIdentifier", + "src": "8991:5:7" + }, + "nativeSrc": "8991:11:7", + "nodeType": "YulFunctionCall", + "src": "8991:11:7" + }, + { + "kind": "number", + "nativeSrc": "9004:1:7", + "nodeType": "YulLiteral", + "src": "9004:1:7", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "8988:2:7", + "nodeType": "YulIdentifier", + "src": "8988:2:7" + }, + "nativeSrc": "8988:18:7", + "nodeType": "YulFunctionCall", + "src": "8988:18:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "8975:3:7", + "nodeType": "YulIdentifier", + "src": "8975:3:7" + }, + "nativeSrc": "8975:32:7", + "nodeType": "YulFunctionCall", + "src": "8975:32:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "8968:6:7", + "nodeType": "YulIdentifier", + "src": "8968:6:7" + }, + "nativeSrc": "8968:40:7", + "nodeType": "YulFunctionCall", + "src": "8968:40:7" + }, + "nativeSrc": "8965:606:7", + "nodeType": "YulIf", + "src": "8965:606:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "9591:4:7", + "nodeType": "YulLiteral", + "src": "9591:4:7", + "type": "", + "value": "0x40" + }, + { + "name": "fmp", + "nativeSrc": "9597:3:7", + "nodeType": "YulIdentifier", + "src": "9597:3:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9584:6:7", + "nodeType": "YulIdentifier", + "src": "9584:6:7" + }, + "nativeSrc": "9584:17:7", + "nodeType": "YulFunctionCall", + "src": "9584:17:7" + }, + "nativeSrc": "9584:17:7", + "nodeType": "YulExpressionStatement", + "src": "9584:17:7" + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1238, + "isOffset": false, + "isSlot": false, + "src": "9136:6:7", + "valueSize": 1 + }, + { + "declaration": 1244, + "isOffset": false, + "isSlot": false, + "src": "8631:8:7", + "valueSize": 1 + }, + { + "declaration": 1241, + "isOffset": false, + "isSlot": false, + "src": "8736:7:7", + "valueSize": 1 + }, + { + "declaration": 1241, + "isOffset": false, + "isSlot": false, + "src": "8979:7:7", + "valueSize": 1 + }, + { + "declaration": 1241, + "isOffset": false, + "isSlot": false, + "src": "9126:7:7", + "valueSize": 1 + }, + { + "declaration": 1241, + "isOffset": false, + "isSlot": false, + "src": "9476:7:7", + "valueSize": 1 + }, + { + "declaration": 1241, + "isOffset": false, + "isSlot": false, + "src": "9491:7:7", + "valueSize": 1 + }, + { + "declaration": 1234, + "isOffset": false, + "isSlot": false, + "src": "8670:2:7", + "valueSize": 1 + }, + { + "declaration": 1232, + "isOffset": false, + "isSlot": false, + "src": "8759:5:7", + "valueSize": 1 + }, + { + "declaration": 1232, + "isOffset": false, + "isSlot": false, + "src": "9545:5:7", + "valueSize": 1 + }, + { + "declaration": 1236, + "isOffset": false, + "isSlot": false, + "src": "8717:5:7", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1249, + "nodeType": "InlineAssembly", + "src": "8544:1067:7" + } + ] + }, + "documentation": { + "id": 1229, + "nodeType": "StructuredDocumentation", + "src": "7885:483:7", + "text": " @dev Imitates a Solidity `token.transfer(to, value)` call, relaxing the requirement on the return value: the\n return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param to The recipient of the tokens\n @param value The amount of token to transfer\n @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean." + }, + "id": 1251, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_safeTransfer", + "nameLocation": "8382:13:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1239, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1232, + "mutability": "mutable", + "name": "token", + "nameLocation": "8403:5:7", + "nodeType": "VariableDeclaration", + "scope": 1251, + "src": "8396:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1231, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1230, + "name": "IERC20", + "nameLocations": ["8396:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "8396:6:7" + }, + "referencedDeclaration": 819, + "src": "8396:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1234, + "mutability": "mutable", + "name": "to", + "nameLocation": "8418:2:7", + "nodeType": "VariableDeclaration", + "scope": 1251, + "src": "8410:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1233, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8410:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1236, + "mutability": "mutable", + "name": "value", + "nameLocation": "8430:5:7", + "nodeType": "VariableDeclaration", + "scope": 1251, + "src": "8422:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1235, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8422:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1238, + "mutability": "mutable", + "name": "bubble", + "nameLocation": "8442:6:7", + "nodeType": "VariableDeclaration", + "scope": 1251, + "src": "8437:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1237, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8437:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8395:54:7" + }, + "returnParameters": { + "id": 1242, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1241, + "mutability": "mutable", + "name": "success", + "nameLocation": "8472:7:7", + "nodeType": "VariableDeclaration", + "scope": 1251, + "src": "8467:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1240, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8467:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8466:14:7" + }, + "scope": 1300, + "src": "8373:1244:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 1275, + "nodeType": "Block", + "src": "10337:1221:7", + "statements": [ + { + "assignments": [1269], + "declarations": [ + { + "constant": false, + "id": 1269, + "mutability": "mutable", + "name": "selector", + "nameLocation": "10354:8:7", + "nodeType": "VariableDeclaration", + "scope": 1275, + "src": "10347:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 1268, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "10347:6:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 1273, + "initialValue": { + "expression": { + "expression": { + "id": 1270, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "10365:6:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$819_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 1271, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "10372:12:7", + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 818, + "src": "10365:19:7", + "typeDescriptions": { + "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function IERC20.transferFrom(address,address,uint256) returns (bool)" + } + }, + "id": 1272, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "10385:8:7", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "10365:28:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10347:46:7" + }, + { + "AST": { + "nativeSrc": "10429:1123:7", + "nodeType": "YulBlock", + "src": "10429:1123:7", + "statements": [ + { + "nativeSrc": "10443:22:7", + "nodeType": "YulVariableDeclaration", + "src": "10443:22:7", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10460:4:7", + "nodeType": "YulLiteral", + "src": "10460:4:7", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "10454:5:7", + "nodeType": "YulIdentifier", + "src": "10454:5:7" + }, + "nativeSrc": "10454:11:7", + "nodeType": "YulFunctionCall", + "src": "10454:11:7" + }, + "variables": [ + { + "name": "fmp", + "nativeSrc": "10447:3:7", + "nodeType": "YulTypedName", + "src": "10447:3:7", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10485:4:7", + "nodeType": "YulLiteral", + "src": "10485:4:7", + "type": "", + "value": "0x00" + }, + { + "name": "selector", + "nativeSrc": "10491:8:7", + "nodeType": "YulIdentifier", + "src": "10491:8:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10478:6:7", + "nodeType": "YulIdentifier", + "src": "10478:6:7" + }, + "nativeSrc": "10478:22:7", + "nodeType": "YulFunctionCall", + "src": "10478:22:7" + }, + "nativeSrc": "10478:22:7", + "nodeType": "YulExpressionStatement", + "src": "10478:22:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10520:4:7", + "nodeType": "YulLiteral", + "src": "10520:4:7", + "type": "", + "value": "0x04" + }, + { + "arguments": [ + { + "name": "from", + "nativeSrc": "10530:4:7", + "nodeType": "YulIdentifier", + "src": "10530:4:7" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10540:2:7", + "nodeType": "YulLiteral", + "src": "10540:2:7", + "type": "", + "value": "96" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10548:1:7", + "nodeType": "YulLiteral", + "src": "10548:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "10544:3:7", + "nodeType": "YulIdentifier", + "src": "10544:3:7" + }, + "nativeSrc": "10544:6:7", + "nodeType": "YulFunctionCall", + "src": "10544:6:7" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "10536:3:7", + "nodeType": "YulIdentifier", + "src": "10536:3:7" + }, + "nativeSrc": "10536:15:7", + "nodeType": "YulFunctionCall", + "src": "10536:15:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "10526:3:7", + "nodeType": "YulIdentifier", + "src": "10526:3:7" + }, + "nativeSrc": "10526:26:7", + "nodeType": "YulFunctionCall", + "src": "10526:26:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10513:6:7", + "nodeType": "YulIdentifier", + "src": "10513:6:7" + }, + "nativeSrc": "10513:40:7", + "nodeType": "YulFunctionCall", + "src": "10513:40:7" + }, + "nativeSrc": "10513:40:7", + "nodeType": "YulExpressionStatement", + "src": "10513:40:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10573:4:7", + "nodeType": "YulLiteral", + "src": "10573:4:7", + "type": "", + "value": "0x24" + }, + { + "arguments": [ + { + "name": "to", + "nativeSrc": "10583:2:7", + "nodeType": "YulIdentifier", + "src": "10583:2:7" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10591:2:7", + "nodeType": "YulLiteral", + "src": "10591:2:7", + "type": "", + "value": "96" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10599:1:7", + "nodeType": "YulLiteral", + "src": "10599:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "10595:3:7", + "nodeType": "YulIdentifier", + "src": "10595:3:7" + }, + "nativeSrc": "10595:6:7", + "nodeType": "YulFunctionCall", + "src": "10595:6:7" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "10587:3:7", + "nodeType": "YulIdentifier", + "src": "10587:3:7" + }, + "nativeSrc": "10587:15:7", + "nodeType": "YulFunctionCall", + "src": "10587:15:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "10579:3:7", + "nodeType": "YulIdentifier", + "src": "10579:3:7" + }, + "nativeSrc": "10579:24:7", + "nodeType": "YulFunctionCall", + "src": "10579:24:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10566:6:7", + "nodeType": "YulIdentifier", + "src": "10566:6:7" + }, + "nativeSrc": "10566:38:7", + "nodeType": "YulFunctionCall", + "src": "10566:38:7" + }, + "nativeSrc": "10566:38:7", + "nodeType": "YulExpressionStatement", + "src": "10566:38:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10624:4:7", + "nodeType": "YulLiteral", + "src": "10624:4:7", + "type": "", + "value": "0x44" + }, + { + "name": "value", + "nativeSrc": "10630:5:7", + "nodeType": "YulIdentifier", + "src": "10630:5:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10617:6:7", + "nodeType": "YulIdentifier", + "src": "10617:6:7" + }, + "nativeSrc": "10617:19:7", + "nodeType": "YulFunctionCall", + "src": "10617:19:7" + }, + "nativeSrc": "10617:19:7", + "nodeType": "YulExpressionStatement", + "src": "10617:19:7" + }, + { + "nativeSrc": "10649:56:7", + "nodeType": "YulAssignment", + "src": "10649:56:7", + "value": { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nativeSrc": "10665:3:7", + "nodeType": "YulIdentifier", + "src": "10665:3:7" + }, + "nativeSrc": "10665:5:7", + "nodeType": "YulFunctionCall", + "src": "10665:5:7" + }, + { + "name": "token", + "nativeSrc": "10672:5:7", + "nodeType": "YulIdentifier", + "src": "10672:5:7" + }, + { + "kind": "number", + "nativeSrc": "10679:1:7", + "nodeType": "YulLiteral", + "src": "10679:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "10682:4:7", + "nodeType": "YulLiteral", + "src": "10682:4:7", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nativeSrc": "10688:4:7", + "nodeType": "YulLiteral", + "src": "10688:4:7", + "type": "", + "value": "0x64" + }, + { + "kind": "number", + "nativeSrc": "10694:4:7", + "nodeType": "YulLiteral", + "src": "10694:4:7", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nativeSrc": "10700:4:7", + "nodeType": "YulLiteral", + "src": "10700:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "call", + "nativeSrc": "10660:4:7", + "nodeType": "YulIdentifier", + "src": "10660:4:7" + }, + "nativeSrc": "10660:45:7", + "nodeType": "YulFunctionCall", + "src": "10660:45:7" + }, + "variableNames": [ + { + "name": "success", + "nativeSrc": "10649:7:7", + "nodeType": "YulIdentifier", + "src": "10649:7:7" + } + ] + }, + { + "body": { + "nativeSrc": "10922:562:7", + "nodeType": "YulBlock", + "src": "10922:562:7", + "statements": [ + { + "body": { + "nativeSrc": "11057:133:7", + "nodeType": "YulBlock", + "src": "11057:133:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "fmp", + "nativeSrc": "11094:3:7", + "nodeType": "YulIdentifier", + "src": "11094:3:7" + }, + { + "kind": "number", + "nativeSrc": "11099:4:7", + "nodeType": "YulLiteral", + "src": "11099:4:7", + "type": "", + "value": "0x00" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "11105:14:7", + "nodeType": "YulIdentifier", + "src": "11105:14:7" + }, + "nativeSrc": "11105:16:7", + "nodeType": "YulFunctionCall", + "src": "11105:16:7" + } + ], + "functionName": { + "name": "returndatacopy", + "nativeSrc": "11079:14:7", + "nodeType": "YulIdentifier", + "src": "11079:14:7" + }, + "nativeSrc": "11079:43:7", + "nodeType": "YulFunctionCall", + "src": "11079:43:7" + }, + "nativeSrc": "11079:43:7", + "nodeType": "YulExpressionStatement", + "src": "11079:43:7" + }, + { + "expression": { + "arguments": [ + { + "name": "fmp", + "nativeSrc": "11150:3:7", + "nodeType": "YulIdentifier", + "src": "11150:3:7" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "11155:14:7", + "nodeType": "YulIdentifier", + "src": "11155:14:7" + }, + "nativeSrc": "11155:16:7", + "nodeType": "YulFunctionCall", + "src": "11155:16:7" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "11143:6:7", + "nodeType": "YulIdentifier", + "src": "11143:6:7" + }, + "nativeSrc": "11143:29:7", + "nodeType": "YulFunctionCall", + "src": "11143:29:7" + }, + "nativeSrc": "11143:29:7", + "nodeType": "YulExpressionStatement", + "src": "11143:29:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "success", + "nativeSrc": "11039:7:7", + "nodeType": "YulIdentifier", + "src": "11039:7:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "11032:6:7", + "nodeType": "YulIdentifier", + "src": "11032:6:7" + }, + "nativeSrc": "11032:15:7", + "nodeType": "YulFunctionCall", + "src": "11032:15:7" + }, + { + "name": "bubble", + "nativeSrc": "11049:6:7", + "nodeType": "YulIdentifier", + "src": "11049:6:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "11028:3:7", + "nodeType": "YulIdentifier", + "src": "11028:3:7" + }, + "nativeSrc": "11028:28:7", + "nodeType": "YulFunctionCall", + "src": "11028:28:7" + }, + "nativeSrc": "11025:165:7", + "nodeType": "YulIf", + "src": "11025:165:7" + }, + { + "nativeSrc": "11389:81:7", + "nodeType": "YulAssignment", + "src": "11389:81:7", + "value": { + "arguments": [ + { + "name": "success", + "nativeSrc": "11404:7:7", + "nodeType": "YulIdentifier", + "src": "11404:7:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "11424:14:7", + "nodeType": "YulIdentifier", + "src": "11424:14:7" + }, + "nativeSrc": "11424:16:7", + "nodeType": "YulFunctionCall", + "src": "11424:16:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "11417:6:7", + "nodeType": "YulIdentifier", + "src": "11417:6:7" + }, + "nativeSrc": "11417:24:7", + "nodeType": "YulFunctionCall", + "src": "11417:24:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "token", + "nativeSrc": "11458:5:7", + "nodeType": "YulIdentifier", + "src": "11458:5:7" + } + ], + "functionName": { + "name": "extcodesize", + "nativeSrc": "11446:11:7", + "nodeType": "YulIdentifier", + "src": "11446:11:7" + }, + "nativeSrc": "11446:18:7", + "nodeType": "YulFunctionCall", + "src": "11446:18:7" + }, + { + "kind": "number", + "nativeSrc": "11466:1:7", + "nodeType": "YulLiteral", + "src": "11466:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "11443:2:7", + "nodeType": "YulIdentifier", + "src": "11443:2:7" + }, + "nativeSrc": "11443:25:7", + "nodeType": "YulFunctionCall", + "src": "11443:25:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "11413:3:7", + "nodeType": "YulIdentifier", + "src": "11413:3:7" + }, + "nativeSrc": "11413:56:7", + "nodeType": "YulFunctionCall", + "src": "11413:56:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "11400:3:7", + "nodeType": "YulIdentifier", + "src": "11400:3:7" + }, + "nativeSrc": "11400:70:7", + "nodeType": "YulFunctionCall", + "src": "11400:70:7" + }, + "variableNames": [ + { + "name": "success", + "nativeSrc": "11389:7:7", + "nodeType": "YulIdentifier", + "src": "11389:7:7" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "success", + "nativeSrc": "10892:7:7", + "nodeType": "YulIdentifier", + "src": "10892:7:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10910:4:7", + "nodeType": "YulLiteral", + "src": "10910:4:7", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "10904:5:7", + "nodeType": "YulIdentifier", + "src": "10904:5:7" + }, + "nativeSrc": "10904:11:7", + "nodeType": "YulFunctionCall", + "src": "10904:11:7" + }, + { + "kind": "number", + "nativeSrc": "10917:1:7", + "nodeType": "YulLiteral", + "src": "10917:1:7", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "10901:2:7", + "nodeType": "YulIdentifier", + "src": "10901:2:7" + }, + "nativeSrc": "10901:18:7", + "nodeType": "YulFunctionCall", + "src": "10901:18:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "10888:3:7", + "nodeType": "YulIdentifier", + "src": "10888:3:7" + }, + "nativeSrc": "10888:32:7", + "nodeType": "YulFunctionCall", + "src": "10888:32:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "10881:6:7", + "nodeType": "YulIdentifier", + "src": "10881:6:7" + }, + "nativeSrc": "10881:40:7", + "nodeType": "YulFunctionCall", + "src": "10881:40:7" + }, + "nativeSrc": "10878:606:7", + "nodeType": "YulIf", + "src": "10878:606:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11504:4:7", + "nodeType": "YulLiteral", + "src": "11504:4:7", + "type": "", + "value": "0x40" + }, + { + "name": "fmp", + "nativeSrc": "11510:3:7", + "nodeType": "YulIdentifier", + "src": "11510:3:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11497:6:7", + "nodeType": "YulIdentifier", + "src": "11497:6:7" + }, + "nativeSrc": "11497:17:7", + "nodeType": "YulFunctionCall", + "src": "11497:17:7" + }, + "nativeSrc": "11497:17:7", + "nodeType": "YulExpressionStatement", + "src": "11497:17:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11534:4:7", + "nodeType": "YulLiteral", + "src": "11534:4:7", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nativeSrc": "11540:1:7", + "nodeType": "YulLiteral", + "src": "11540:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11527:6:7", + "nodeType": "YulIdentifier", + "src": "11527:6:7" + }, + "nativeSrc": "11527:15:7", + "nodeType": "YulFunctionCall", + "src": "11527:15:7" + }, + "nativeSrc": "11527:15:7", + "nodeType": "YulExpressionStatement", + "src": "11527:15:7" + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1263, + "isOffset": false, + "isSlot": false, + "src": "11049:6:7", + "valueSize": 1 + }, + { + "declaration": 1257, + "isOffset": false, + "isSlot": false, + "src": "10530:4:7", + "valueSize": 1 + }, + { + "declaration": 1269, + "isOffset": false, + "isSlot": false, + "src": "10491:8:7", + "valueSize": 1 + }, + { + "declaration": 1266, + "isOffset": false, + "isSlot": false, + "src": "10649:7:7", + "valueSize": 1 + }, + { + "declaration": 1266, + "isOffset": false, + "isSlot": false, + "src": "10892:7:7", + "valueSize": 1 + }, + { + "declaration": 1266, + "isOffset": false, + "isSlot": false, + "src": "11039:7:7", + "valueSize": 1 + }, + { + "declaration": 1266, + "isOffset": false, + "isSlot": false, + "src": "11389:7:7", + "valueSize": 1 + }, + { + "declaration": 1266, + "isOffset": false, + "isSlot": false, + "src": "11404:7:7", + "valueSize": 1 + }, + { + "declaration": 1259, + "isOffset": false, + "isSlot": false, + "src": "10583:2:7", + "valueSize": 1 + }, + { + "declaration": 1255, + "isOffset": false, + "isSlot": false, + "src": "10672:5:7", + "valueSize": 1 + }, + { + "declaration": 1255, + "isOffset": false, + "isSlot": false, + "src": "11458:5:7", + "valueSize": 1 + }, + { + "declaration": 1261, + "isOffset": false, + "isSlot": false, + "src": "10630:5:7", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1274, + "nodeType": "InlineAssembly", + "src": "10404:1148:7" + } + ] + }, + "documentation": { + "id": 1252, + "nodeType": "StructuredDocumentation", + "src": "9623:537:7", + "text": " @dev Imitates a Solidity `token.transferFrom(from, to, value)` call, relaxing the requirement on the return\n value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param from The sender of the tokens\n @param to The recipient of the tokens\n @param value The amount of token to transfer\n @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean." + }, + "id": 1276, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_safeTransferFrom", + "nameLocation": "10174:17:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1264, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1255, + "mutability": "mutable", + "name": "token", + "nameLocation": "10208:5:7", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "10201:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1254, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1253, + "name": "IERC20", + "nameLocations": ["10201:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "10201:6:7" + }, + "referencedDeclaration": 819, + "src": "10201:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1257, + "mutability": "mutable", + "name": "from", + "nameLocation": "10231:4:7", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "10223:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1256, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10223:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1259, + "mutability": "mutable", + "name": "to", + "nameLocation": "10253:2:7", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "10245:10:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1258, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10245:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1261, + "mutability": "mutable", + "name": "value", + "nameLocation": "10273:5:7", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "10265:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10265:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1263, + "mutability": "mutable", + "name": "bubble", + "nameLocation": "10293:6:7", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "10288:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1262, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10288:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10191:114:7" + }, + "returnParameters": { + "id": 1267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1266, + "mutability": "mutable", + "name": "success", + "nameLocation": "10328:7:7", + "nodeType": "VariableDeclaration", + "scope": 1276, + "src": "10323:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1265, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10323:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10322:14:7" + }, + "scope": 1300, + "src": "10165:1393:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 1298, + "nodeType": "Block", + "src": "12171:1140:7", + "statements": [ + { + "assignments": [1292], + "declarations": [ + { + "constant": false, + "id": 1292, + "mutability": "mutable", + "name": "selector", + "nameLocation": "12188:8:7", + "nodeType": "VariableDeclaration", + "scope": 1298, + "src": "12181:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 1291, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "12181:6:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 1296, + "initialValue": { + "expression": { + "expression": { + "id": 1293, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "12199:6:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$819_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 1294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "12206:7:7", + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 806, + "src": "12199:14:7", + "typeDescriptions": { + "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function IERC20.approve(address,uint256) returns (bool)" + } + }, + "id": 1295, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "12214:8:7", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "12199:23:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12181:41:7" + }, + { + "AST": { + "nativeSrc": "12258:1047:7", + "nodeType": "YulBlock", + "src": "12258:1047:7", + "statements": [ + { + "nativeSrc": "12272:22:7", + "nodeType": "YulVariableDeclaration", + "src": "12272:22:7", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12289:4:7", + "nodeType": "YulLiteral", + "src": "12289:4:7", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12283:5:7", + "nodeType": "YulIdentifier", + "src": "12283:5:7" + }, + "nativeSrc": "12283:11:7", + "nodeType": "YulFunctionCall", + "src": "12283:11:7" + }, + "variables": [ + { + "name": "fmp", + "nativeSrc": "12276:3:7", + "nodeType": "YulTypedName", + "src": "12276:3:7", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12314:4:7", + "nodeType": "YulLiteral", + "src": "12314:4:7", + "type": "", + "value": "0x00" + }, + { + "name": "selector", + "nativeSrc": "12320:8:7", + "nodeType": "YulIdentifier", + "src": "12320:8:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12307:6:7", + "nodeType": "YulIdentifier", + "src": "12307:6:7" + }, + "nativeSrc": "12307:22:7", + "nodeType": "YulFunctionCall", + "src": "12307:22:7" + }, + "nativeSrc": "12307:22:7", + "nodeType": "YulExpressionStatement", + "src": "12307:22:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12349:4:7", + "nodeType": "YulLiteral", + "src": "12349:4:7", + "type": "", + "value": "0x04" + }, + { + "arguments": [ + { + "name": "spender", + "nativeSrc": "12359:7:7", + "nodeType": "YulIdentifier", + "src": "12359:7:7" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12372:2:7", + "nodeType": "YulLiteral", + "src": "12372:2:7", + "type": "", + "value": "96" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12380:1:7", + "nodeType": "YulLiteral", + "src": "12380:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "12376:3:7", + "nodeType": "YulIdentifier", + "src": "12376:3:7" + }, + "nativeSrc": "12376:6:7", + "nodeType": "YulFunctionCall", + "src": "12376:6:7" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "12368:3:7", + "nodeType": "YulIdentifier", + "src": "12368:3:7" + }, + "nativeSrc": "12368:15:7", + "nodeType": "YulFunctionCall", + "src": "12368:15:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "12355:3:7", + "nodeType": "YulIdentifier", + "src": "12355:3:7" + }, + "nativeSrc": "12355:29:7", + "nodeType": "YulFunctionCall", + "src": "12355:29:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12342:6:7", + "nodeType": "YulIdentifier", + "src": "12342:6:7" + }, + "nativeSrc": "12342:43:7", + "nodeType": "YulFunctionCall", + "src": "12342:43:7" + }, + "nativeSrc": "12342:43:7", + "nodeType": "YulExpressionStatement", + "src": "12342:43:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12405:4:7", + "nodeType": "YulLiteral", + "src": "12405:4:7", + "type": "", + "value": "0x24" + }, + { + "name": "value", + "nativeSrc": "12411:5:7", + "nodeType": "YulIdentifier", + "src": "12411:5:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12398:6:7", + "nodeType": "YulIdentifier", + "src": "12398:6:7" + }, + "nativeSrc": "12398:19:7", + "nodeType": "YulFunctionCall", + "src": "12398:19:7" + }, + "nativeSrc": "12398:19:7", + "nodeType": "YulExpressionStatement", + "src": "12398:19:7" + }, + { + "nativeSrc": "12430:56:7", + "nodeType": "YulAssignment", + "src": "12430:56:7", + "value": { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nativeSrc": "12446:3:7", + "nodeType": "YulIdentifier", + "src": "12446:3:7" + }, + "nativeSrc": "12446:5:7", + "nodeType": "YulFunctionCall", + "src": "12446:5:7" + }, + { + "name": "token", + "nativeSrc": "12453:5:7", + "nodeType": "YulIdentifier", + "src": "12453:5:7" + }, + { + "kind": "number", + "nativeSrc": "12460:1:7", + "nodeType": "YulLiteral", + "src": "12460:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "12463:4:7", + "nodeType": "YulLiteral", + "src": "12463:4:7", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nativeSrc": "12469:4:7", + "nodeType": "YulLiteral", + "src": "12469:4:7", + "type": "", + "value": "0x44" + }, + { + "kind": "number", + "nativeSrc": "12475:4:7", + "nodeType": "YulLiteral", + "src": "12475:4:7", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nativeSrc": "12481:4:7", + "nodeType": "YulLiteral", + "src": "12481:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "call", + "nativeSrc": "12441:4:7", + "nodeType": "YulIdentifier", + "src": "12441:4:7" + }, + "nativeSrc": "12441:45:7", + "nodeType": "YulFunctionCall", + "src": "12441:45:7" + }, + "variableNames": [ + { + "name": "success", + "nativeSrc": "12430:7:7", + "nodeType": "YulIdentifier", + "src": "12430:7:7" + } + ] + }, + { + "body": { + "nativeSrc": "12703:562:7", + "nodeType": "YulBlock", + "src": "12703:562:7", + "statements": [ + { + "body": { + "nativeSrc": "12838:133:7", + "nodeType": "YulBlock", + "src": "12838:133:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "fmp", + "nativeSrc": "12875:3:7", + "nodeType": "YulIdentifier", + "src": "12875:3:7" + }, + { + "kind": "number", + "nativeSrc": "12880:4:7", + "nodeType": "YulLiteral", + "src": "12880:4:7", + "type": "", + "value": "0x00" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "12886:14:7", + "nodeType": "YulIdentifier", + "src": "12886:14:7" + }, + "nativeSrc": "12886:16:7", + "nodeType": "YulFunctionCall", + "src": "12886:16:7" + } + ], + "functionName": { + "name": "returndatacopy", + "nativeSrc": "12860:14:7", + "nodeType": "YulIdentifier", + "src": "12860:14:7" + }, + "nativeSrc": "12860:43:7", + "nodeType": "YulFunctionCall", + "src": "12860:43:7" + }, + "nativeSrc": "12860:43:7", + "nodeType": "YulExpressionStatement", + "src": "12860:43:7" + }, + { + "expression": { + "arguments": [ + { + "name": "fmp", + "nativeSrc": "12931:3:7", + "nodeType": "YulIdentifier", + "src": "12931:3:7" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "12936:14:7", + "nodeType": "YulIdentifier", + "src": "12936:14:7" + }, + "nativeSrc": "12936:16:7", + "nodeType": "YulFunctionCall", + "src": "12936:16:7" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "12924:6:7", + "nodeType": "YulIdentifier", + "src": "12924:6:7" + }, + "nativeSrc": "12924:29:7", + "nodeType": "YulFunctionCall", + "src": "12924:29:7" + }, + "nativeSrc": "12924:29:7", + "nodeType": "YulExpressionStatement", + "src": "12924:29:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "success", + "nativeSrc": "12820:7:7", + "nodeType": "YulIdentifier", + "src": "12820:7:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "12813:6:7", + "nodeType": "YulIdentifier", + "src": "12813:6:7" + }, + "nativeSrc": "12813:15:7", + "nodeType": "YulFunctionCall", + "src": "12813:15:7" + }, + { + "name": "bubble", + "nativeSrc": "12830:6:7", + "nodeType": "YulIdentifier", + "src": "12830:6:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "12809:3:7", + "nodeType": "YulIdentifier", + "src": "12809:3:7" + }, + "nativeSrc": "12809:28:7", + "nodeType": "YulFunctionCall", + "src": "12809:28:7" + }, + "nativeSrc": "12806:165:7", + "nodeType": "YulIf", + "src": "12806:165:7" + }, + { + "nativeSrc": "13170:81:7", + "nodeType": "YulAssignment", + "src": "13170:81:7", + "value": { + "arguments": [ + { + "name": "success", + "nativeSrc": "13185:7:7", + "nodeType": "YulIdentifier", + "src": "13185:7:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "13205:14:7", + "nodeType": "YulIdentifier", + "src": "13205:14:7" + }, + "nativeSrc": "13205:16:7", + "nodeType": "YulFunctionCall", + "src": "13205:16:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "13198:6:7", + "nodeType": "YulIdentifier", + "src": "13198:6:7" + }, + "nativeSrc": "13198:24:7", + "nodeType": "YulFunctionCall", + "src": "13198:24:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "token", + "nativeSrc": "13239:5:7", + "nodeType": "YulIdentifier", + "src": "13239:5:7" + } + ], + "functionName": { + "name": "extcodesize", + "nativeSrc": "13227:11:7", + "nodeType": "YulIdentifier", + "src": "13227:11:7" + }, + "nativeSrc": "13227:18:7", + "nodeType": "YulFunctionCall", + "src": "13227:18:7" + }, + { + "kind": "number", + "nativeSrc": "13247:1:7", + "nodeType": "YulLiteral", + "src": "13247:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "13224:2:7", + "nodeType": "YulIdentifier", + "src": "13224:2:7" + }, + "nativeSrc": "13224:25:7", + "nodeType": "YulFunctionCall", + "src": "13224:25:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "13194:3:7", + "nodeType": "YulIdentifier", + "src": "13194:3:7" + }, + "nativeSrc": "13194:56:7", + "nodeType": "YulFunctionCall", + "src": "13194:56:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "13181:3:7", + "nodeType": "YulIdentifier", + "src": "13181:3:7" + }, + "nativeSrc": "13181:70:7", + "nodeType": "YulFunctionCall", + "src": "13181:70:7" + }, + "variableNames": [ + { + "name": "success", + "nativeSrc": "13170:7:7", + "nodeType": "YulIdentifier", + "src": "13170:7:7" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "success", + "nativeSrc": "12673:7:7", + "nodeType": "YulIdentifier", + "src": "12673:7:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12691:4:7", + "nodeType": "YulLiteral", + "src": "12691:4:7", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12685:5:7", + "nodeType": "YulIdentifier", + "src": "12685:5:7" + }, + "nativeSrc": "12685:11:7", + "nodeType": "YulFunctionCall", + "src": "12685:11:7" + }, + { + "kind": "number", + "nativeSrc": "12698:1:7", + "nodeType": "YulLiteral", + "src": "12698:1:7", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "12682:2:7", + "nodeType": "YulIdentifier", + "src": "12682:2:7" + }, + "nativeSrc": "12682:18:7", + "nodeType": "YulFunctionCall", + "src": "12682:18:7" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "12669:3:7", + "nodeType": "YulIdentifier", + "src": "12669:3:7" + }, + "nativeSrc": "12669:32:7", + "nodeType": "YulFunctionCall", + "src": "12669:32:7" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "12662:6:7", + "nodeType": "YulIdentifier", + "src": "12662:6:7" + }, + "nativeSrc": "12662:40:7", + "nodeType": "YulFunctionCall", + "src": "12662:40:7" + }, + "nativeSrc": "12659:606:7", + "nodeType": "YulIf", + "src": "12659:606:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "13285:4:7", + "nodeType": "YulLiteral", + "src": "13285:4:7", + "type": "", + "value": "0x40" + }, + { + "name": "fmp", + "nativeSrc": "13291:3:7", + "nodeType": "YulIdentifier", + "src": "13291:3:7" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13278:6:7", + "nodeType": "YulIdentifier", + "src": "13278:6:7" + }, + "nativeSrc": "13278:17:7", + "nodeType": "YulFunctionCall", + "src": "13278:17:7" + }, + "nativeSrc": "13278:17:7", + "nodeType": "YulExpressionStatement", + "src": "13278:17:7" + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1286, + "isOffset": false, + "isSlot": false, + "src": "12830:6:7", + "valueSize": 1 + }, + { + "declaration": 1292, + "isOffset": false, + "isSlot": false, + "src": "12320:8:7", + "valueSize": 1 + }, + { + "declaration": 1282, + "isOffset": false, + "isSlot": false, + "src": "12359:7:7", + "valueSize": 1 + }, + { + "declaration": 1289, + "isOffset": false, + "isSlot": false, + "src": "12430:7:7", + "valueSize": 1 + }, + { + "declaration": 1289, + "isOffset": false, + "isSlot": false, + "src": "12673:7:7", + "valueSize": 1 + }, + { + "declaration": 1289, + "isOffset": false, + "isSlot": false, + "src": "12820:7:7", + "valueSize": 1 + }, + { + "declaration": 1289, + "isOffset": false, + "isSlot": false, + "src": "13170:7:7", + "valueSize": 1 + }, + { + "declaration": 1289, + "isOffset": false, + "isSlot": false, + "src": "13185:7:7", + "valueSize": 1 + }, + { + "declaration": 1280, + "isOffset": false, + "isSlot": false, + "src": "12453:5:7", + "valueSize": 1 + }, + { + "declaration": 1280, + "isOffset": false, + "isSlot": false, + "src": "13239:5:7", + "valueSize": 1 + }, + { + "declaration": 1284, + "isOffset": false, + "isSlot": false, + "src": "12411:5:7", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1297, + "nodeType": "InlineAssembly", + "src": "12233:1072:7" + } + ] + }, + "documentation": { + "id": 1277, + "nodeType": "StructuredDocumentation", + "src": "11564:490:7", + "text": " @dev Imitates a Solidity `token.approve(spender, value)` call, relaxing the requirement on the return value:\n the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param spender The spender of the tokens\n @param value The amount of token to transfer\n @param bubble Behavior switch if the transfer call reverts: bubble the revert reason or return a false boolean." + }, + "id": 1299, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_safeApprove", + "nameLocation": "12068:12:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1287, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1280, + "mutability": "mutable", + "name": "token", + "nameLocation": "12088:5:7", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "12081:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1279, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1278, + "name": "IERC20", + "nameLocations": ["12081:6:7"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "12081:6:7" + }, + "referencedDeclaration": 819, + "src": "12081:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1282, + "mutability": "mutable", + "name": "spender", + "nameLocation": "12103:7:7", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "12095:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1281, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12095:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1284, + "mutability": "mutable", + "name": "value", + "nameLocation": "12120:5:7", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "12112:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12112:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1286, + "mutability": "mutable", + "name": "bubble", + "nameLocation": "12132:6:7", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "12127:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1285, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12127:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12080:59:7" + }, + "returnParameters": { + "id": 1290, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1289, + "mutability": "mutable", + "name": "success", + "nameLocation": "12162:7:7", + "nodeType": "VariableDeclaration", + "scope": 1299, + "src": "12157:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1288, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12157:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12156:14:7" + }, + "scope": 1300, + "src": "12059:1252:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "nodeType": "ContractDefinition", + "scope": 1301, + "src": "698:12615:7", + "usedErrors": [857, 866], + "usedEvents": [] + } + ], + "nodeType": "SourceUnit", + "src": "115:13199:7" + }, + "id": 7 + }, + "@openzeppelin/contracts/utils/Context.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/Context.sol", + "exportedSymbols": { + "Context": [1330] + }, + "id": 1331, + "license": "MIT", + "nodes": [ + { + "id": 1302, + "literals": ["solidity", "^", "0.8", ".20"], + "nodeType": "PragmaDirective", + "src": "101:24:8" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "Context", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 1303, + "nodeType": "StructuredDocumentation", + "src": "127:496:8", + "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts." + }, + "fullyImplemented": true, + "id": 1330, + "linearizedBaseContracts": [1330], + "name": "Context", + "nameLocation": "642:7:8", + "nodes": [ + { + "body": { + "id": 1311, + "nodeType": "Block", + "src": "718:34:8", + "statements": [ + { + "expression": { + "expression": { + "id": 1308, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "735:3:8", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "739:6:8", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "735:10:8", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 1307, + "id": 1310, + "nodeType": "Return", + "src": "728:17:8" + } + ] + }, + "id": 1312, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_msgSender", + "nameLocation": "665:10:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1304, + "nodeType": "ParameterList", + "parameters": [], + "src": "675:2:8" + }, + "returnParameters": { + "id": 1307, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1306, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1312, + "src": "709:7:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1305, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "709:7:8", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "708:9:8" + }, + "scope": 1330, + "src": "656:96:8", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 1320, + "nodeType": "Block", + "src": "825:32:8", + "statements": [ + { + "expression": { + "expression": { + "id": 1317, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "842:3:8", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "846:4:8", + "memberName": "data", + "nodeType": "MemberAccess", + "src": "842:8:8", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "functionReturnParameters": 1316, + "id": 1319, + "nodeType": "Return", + "src": "835:15:8" + } + ] + }, + "id": 1321, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_msgData", + "nameLocation": "767:8:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1313, + "nodeType": "ParameterList", + "parameters": [], + "src": "775:2:8" + }, + "returnParameters": { + "id": 1316, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1315, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1321, + "src": "809:14:8", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1314, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "809:5:8", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "808:16:8" + }, + "scope": 1330, + "src": "758:99:8", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 1328, + "nodeType": "Block", + "src": "935:25:8", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 1326, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "952:1:8", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 1325, + "id": 1327, + "nodeType": "Return", + "src": "945:8:8" + } + ] + }, + "id": 1329, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_contextSuffixLength", + "nameLocation": "872:20:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1322, + "nodeType": "ParameterList", + "parameters": [], + "src": "892:2:8" + }, + "returnParameters": { + "id": 1325, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1324, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1329, + "src": "926:7:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1323, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "926:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "925:9:8" + }, + "scope": 1330, + "src": "863:97:8", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "nodeType": "ContractDefinition", + "scope": 1331, + "src": "624:338:8", + "usedErrors": [], + "usedEvents": [] + } + ], + "nodeType": "SourceUnit", + "src": "101:862:8" + }, + "id": 8 + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "exportedSymbols": { + "IERC165": [1579] + }, + "id": 1580, + "license": "MIT", + "nodes": [ + { + "id": 1569, + "literals": ["solidity", ">=", "0.4", ".16"], + "nodeType": "PragmaDirective", + "src": "115:25:11" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC165", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1570, + "nodeType": "StructuredDocumentation", + "src": "142:280:11", + "text": " @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}." + }, + "fullyImplemented": false, + "id": 1579, + "linearizedBaseContracts": [1579], + "name": "IERC165", + "nameLocation": "433:7:11", + "nodes": [ + { + "documentation": { + "id": 1571, + "nodeType": "StructuredDocumentation", + "src": "447:340:11", + "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas." + }, + "functionSelector": "01ffc9a7", + "id": 1578, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "supportsInterface", + "nameLocation": "801:17:11", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1573, + "mutability": "mutable", + "name": "interfaceId", + "nameLocation": "826:11:11", + "nodeType": "VariableDeclaration", + "scope": 1578, + "src": "819:18:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 1572, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "819:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "818:20:11" + }, + "returnParameters": { + "id": 1577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1576, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1578, + "src": "862:4:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1575, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "862:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "861:6:11" + }, + "scope": 1579, + "src": "792:76:11", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 1580, + "src": "423:447:11", + "usedErrors": [], + "usedEvents": [] + } + ], + "nodeType": "SourceUnit", + "src": "115:756:11" + }, + "id": 11 + }, + "@openzeppelin/contracts/utils/ReentrancyGuard.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", + "exportedSymbols": { + "ReentrancyGuard": [1443], + "StorageSlot": [1567] + }, + "id": 1444, + "license": "MIT", + "nodes": [ + { + "id": 1332, + "literals": ["solidity", "^", "0.8", ".20"], + "nodeType": "PragmaDirective", + "src": "109:24:9" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/StorageSlot.sol", + "file": "./StorageSlot.sol", + "id": 1334, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1444, + "sourceUnit": 1568, + "src": "135:46:9", + "symbolAliases": [ + { + "foreign": { + "id": 1333, + "name": "StorageSlot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1567, + "src": "143:11:9", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "ReentrancyGuard", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 1335, + "nodeType": "StructuredDocumentation", + "src": "183:1066:9", + "text": " @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n consider using {ReentrancyGuardTransient} instead.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced\n by the {ReentrancyGuardTransient} variant in v6.0.\n @custom:stateless" + }, + "fullyImplemented": true, + "id": 1443, + "linearizedBaseContracts": [1443], + "name": "ReentrancyGuard", + "nameLocation": "1268:15:9", + "nodes": [ + { + "global": false, + "id": 1338, + "libraryName": { + "id": 1336, + "name": "StorageSlot", + "nameLocations": ["1296:11:9"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1567, + "src": "1296:11:9" + }, + "nodeType": "UsingForDirective", + "src": "1290:30:9", + "typeName": { + "id": 1337, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1312:7:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "constant": true, + "id": 1341, + "mutability": "constant", + "name": "REENTRANCY_GUARD_STORAGE", + "nameLocation": "1470:24:9", + "nodeType": "VariableDeclaration", + "scope": 1443, + "src": "1445:126:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1339, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1445:7:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030", + "id": 1340, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1505:66:9", + "typeDescriptions": { + "typeIdentifier": "t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1", + "typeString": "int_const 7031...(69 digits omitted)...8416" + }, + "value": "0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 1344, + "mutability": "constant", + "name": "NOT_ENTERED", + "nameLocation": "2351:11:9", + "nodeType": "VariableDeclaration", + "scope": 1443, + "src": "2326:40:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1342, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2326:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 1343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2365:1:9", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 1347, + "mutability": "constant", + "name": "ENTERED", + "nameLocation": "2397:7:9", + "nodeType": "VariableDeclaration", + "scope": 1443, + "src": "2372:36:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2372:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 1346, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2407:1:9", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "private" + }, + { + "documentation": { + "id": 1348, + "nodeType": "StructuredDocumentation", + "src": "2415:52:9", + "text": " @dev Unauthorized reentrant call." + }, + "errorSelector": "3ee5aeb5", + "id": 1350, + "name": "ReentrancyGuardReentrantCall", + "nameLocation": "2478:28:9", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1349, + "nodeType": "ParameterList", + "parameters": [], + "src": "2506:2:9" + }, + "src": "2472:37:9" + }, + { + "body": { + "id": 1361, + "nodeType": "Block", + "src": "2529:83:9", + "statements": [ + { + "expression": { + "id": 1359, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1353, + "name": "_reentrancyGuardStorageSlot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1442, + "src": "2539:27:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 1354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2539:29:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 1355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2569:14:9", + "memberName": "getUint256Slot", + "nodeType": "MemberAccess", + "referencedDeclaration": 1511, + "src": "2539:44:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$1458_storage_ptr_$attached_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)" + } + }, + "id": 1356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2539:46:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Uint256Slot_$1458_storage_ptr", + "typeString": "struct StorageSlot.Uint256Slot storage pointer" + } + }, + "id": 1357, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "2586:5:9", + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": 1457, + "src": "2539:52:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1358, + "name": "NOT_ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1344, + "src": "2594:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2539:66:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1360, + "nodeType": "ExpressionStatement", + "src": "2539:66:9" + } + ] + }, + "id": 1362, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1351, + "nodeType": "ParameterList", + "parameters": [], + "src": "2526:2:9" + }, + "returnParameters": { + "id": 1352, + "nodeType": "ParameterList", + "parameters": [], + "src": "2529:0:9" + }, + "scope": 1443, + "src": "2515:97:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1372, + "nodeType": "Block", + "src": "3013:79:9", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1365, + "name": "_nonReentrantBefore", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1407, + "src": "3023:19:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3023:21:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1367, + "nodeType": "ExpressionStatement", + "src": "3023:21:9" + }, + { + "id": 1368, + "nodeType": "PlaceholderStatement", + "src": "3054:1:9" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1369, + "name": "_nonReentrantAfter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1419, + "src": "3065:18:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3065:20:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1371, + "nodeType": "ExpressionStatement", + "src": "3065:20:9" + } + ] + }, + "documentation": { + "id": 1363, + "nodeType": "StructuredDocumentation", + "src": "2618:366:9", + "text": " @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work." + }, + "id": 1373, + "name": "nonReentrant", + "nameLocation": "2998:12:9", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1364, + "nodeType": "ParameterList", + "parameters": [], + "src": "3010:2:9" + }, + "src": "2989:103:9", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1380, + "nodeType": "Block", + "src": "3527:53:9", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1376, + "name": "_nonReentrantBeforeView", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1392, + "src": "3537:23:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 1377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3537:25:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1378, + "nodeType": "ExpressionStatement", + "src": "3537:25:9" + }, + { + "id": 1379, + "nodeType": "PlaceholderStatement", + "src": "3572:1:9" + } + ] + }, + "documentation": { + "id": 1374, + "nodeType": "StructuredDocumentation", + "src": "3098:396:9", + "text": " @dev A `view` only version of {nonReentrant}. Use to block view functions\n from being called, preventing reading from inconsistent contract state.\n CAUTION: This is a \"view\" modifier and does not change the reentrancy\n status. Use it only on view functions. For payable or non-payable functions,\n use the standard {nonReentrant} modifier instead." + }, + "id": 1381, + "name": "nonReentrantView", + "nameLocation": "3508:16:9", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1375, + "nodeType": "ParameterList", + "parameters": [], + "src": "3524:2:9" + }, + "src": "3499:81:9", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1391, + "nodeType": "Block", + "src": "3634:109:9", + "statements": [ + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1384, + "name": "_reentrancyGuardEntered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1434, + "src": "3648:23:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 1385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3648:25:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1390, + "nodeType": "IfStatement", + "src": "3644:93:9", + "trueBody": { + "id": 1389, + "nodeType": "Block", + "src": "3675:62:9", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1386, + "name": "ReentrancyGuardReentrantCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "3696:28:9", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 1387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3696:30:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 1388, + "nodeType": "RevertStatement", + "src": "3689:37:9" + } + ] + } + } + ] + }, + "id": 1392, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_nonReentrantBeforeView", + "nameLocation": "3595:23:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1382, + "nodeType": "ParameterList", + "parameters": [], + "src": "3618:2:9" + }, + "returnParameters": { + "id": 1383, + "nodeType": "ParameterList", + "parameters": [], + "src": "3634:0:9" + }, + "scope": 1443, + "src": "3586:157:9", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 1406, + "nodeType": "Block", + "src": "3788:253:9", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1395, + "name": "_nonReentrantBeforeView", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1392, + "src": "3872:23:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 1396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3872:25:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1397, + "nodeType": "ExpressionStatement", + "src": "3872:25:9" + }, + { + "expression": { + "id": 1404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1398, + "name": "_reentrancyGuardStorageSlot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1442, + "src": "3972:27:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 1399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3972:29:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 1400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4002:14:9", + "memberName": "getUint256Slot", + "nodeType": "MemberAccess", + "referencedDeclaration": 1511, + "src": "3972:44:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$1458_storage_ptr_$attached_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)" + } + }, + "id": 1401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3972:46:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Uint256Slot_$1458_storage_ptr", + "typeString": "struct StorageSlot.Uint256Slot storage pointer" + } + }, + "id": 1402, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4019:5:9", + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": 1457, + "src": "3972:52:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1403, + "name": "ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1347, + "src": "4027:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3972:62:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1405, + "nodeType": "ExpressionStatement", + "src": "3972:62:9" + } + ] + }, + "id": 1407, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_nonReentrantBefore", + "nameLocation": "3758:19:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1393, + "nodeType": "ParameterList", + "parameters": [], + "src": "3777:2:9" + }, + "returnParameters": { + "id": 1394, + "nodeType": "ParameterList", + "parameters": [], + "src": "3788:0:9" + }, + "scope": 1443, + "src": "3749:292:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 1418, + "nodeType": "Block", + "src": "4085:215:9", + "statements": [ + { + "expression": { + "id": 1416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1410, + "name": "_reentrancyGuardStorageSlot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1442, + "src": "4227:27:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 1411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4227:29:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 1412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4257:14:9", + "memberName": "getUint256Slot", + "nodeType": "MemberAccess", + "referencedDeclaration": 1511, + "src": "4227:44:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$1458_storage_ptr_$attached_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)" + } + }, + "id": 1413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4227:46:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Uint256Slot_$1458_storage_ptr", + "typeString": "struct StorageSlot.Uint256Slot storage pointer" + } + }, + "id": 1414, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4274:5:9", + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": 1457, + "src": "4227:52:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1415, + "name": "NOT_ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1344, + "src": "4282:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4227:66:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1417, + "nodeType": "ExpressionStatement", + "src": "4227:66:9" + } + ] + }, + "id": 1419, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_nonReentrantAfter", + "nameLocation": "4056:18:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1408, + "nodeType": "ParameterList", + "parameters": [], + "src": "4074:2:9" + }, + "returnParameters": { + "id": 1409, + "nodeType": "ParameterList", + "parameters": [], + "src": "4085:0:9" + }, + "scope": 1443, + "src": "4047:253:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 1433, + "nodeType": "Block", + "src": "4543:87:9", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1425, + "name": "_reentrancyGuardStorageSlot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1442, + "src": "4560:27:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 1426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4560:29:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 1427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4590:14:9", + "memberName": "getUint256Slot", + "nodeType": "MemberAccess", + "referencedDeclaration": 1511, + "src": "4560:44:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$1458_storage_ptr_$attached_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)" + } + }, + "id": 1428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4560:46:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Uint256Slot_$1458_storage_ptr", + "typeString": "struct StorageSlot.Uint256Slot storage pointer" + } + }, + "id": 1429, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4607:5:9", + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": 1457, + "src": "4560:52:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 1430, + "name": "ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1347, + "src": "4616:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4560:63:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 1424, + "id": 1432, + "nodeType": "Return", + "src": "4553:70:9" + } + ] + }, + "documentation": { + "id": 1420, + "nodeType": "StructuredDocumentation", + "src": "4306:168:9", + "text": " @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack." + }, + "id": 1434, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_reentrancyGuardEntered", + "nameLocation": "4488:23:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1421, + "nodeType": "ParameterList", + "parameters": [], + "src": "4511:2:9" + }, + "returnParameters": { + "id": 1424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1423, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1434, + "src": "4537:4:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1422, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4537:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4536:6:9" + }, + "scope": 1443, + "src": "4479:151:9", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1441, + "nodeType": "Block", + "src": "4715:48:9", + "statements": [ + { + "expression": { + "id": 1439, + "name": "REENTRANCY_GUARD_STORAGE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "4732:24:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 1438, + "id": 1440, + "nodeType": "Return", + "src": "4725:31:9" + } + ] + }, + "id": 1442, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_reentrancyGuardStorageSlot", + "nameLocation": "4645:27:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1435, + "nodeType": "ParameterList", + "parameters": [], + "src": "4672:2:9" + }, + "returnParameters": { + "id": 1438, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1437, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1442, + "src": "4706:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1436, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4706:7:9", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4705:9:9" + }, + "scope": 1443, + "src": "4636:127:9", + "stateMutability": "pure", + "virtual": true, + "visibility": "internal" + } + ], + "nodeType": "ContractDefinition", + "scope": 1444, + "src": "1250:3515:9", + "usedErrors": [1350], + "usedEvents": [] + } + ], + "nodeType": "SourceUnit", + "src": "109:4657:9" + }, + "id": 9 + }, + "@openzeppelin/contracts/utils/StorageSlot.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/StorageSlot.sol", + "exportedSymbols": { + "StorageSlot": [1567] + }, + "id": 1568, + "license": "MIT", + "nodes": [ + { + "id": 1445, + "literals": ["solidity", "^", "0.8", ".20"], + "nodeType": "PragmaDirective", + "src": "193:24:10" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "StorageSlot", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 1446, + "nodeType": "StructuredDocumentation", + "src": "219:1187:10", + "text": " @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}." + }, + "fullyImplemented": true, + "id": 1567, + "linearizedBaseContracts": [1567], + "name": "StorageSlot", + "nameLocation": "1415:11:10", + "nodes": [ + { + "canonicalName": "StorageSlot.AddressSlot", + "id": 1449, + "members": [ + { + "constant": false, + "id": 1448, + "mutability": "mutable", + "name": "value", + "nameLocation": "1470:5:10", + "nodeType": "VariableDeclaration", + "scope": 1449, + "src": "1462:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1447, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1462:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "name": "AddressSlot", + "nameLocation": "1440:11:10", + "nodeType": "StructDefinition", + "scope": 1567, + "src": "1433:49:10", + "visibility": "public" + }, + { + "canonicalName": "StorageSlot.BooleanSlot", + "id": 1452, + "members": [ + { + "constant": false, + "id": 1451, + "mutability": "mutable", + "name": "value", + "nameLocation": "1522:5:10", + "nodeType": "VariableDeclaration", + "scope": 1452, + "src": "1517:10:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1450, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1517:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "BooleanSlot", + "nameLocation": "1495:11:10", + "nodeType": "StructDefinition", + "scope": 1567, + "src": "1488:46:10", + "visibility": "public" + }, + { + "canonicalName": "StorageSlot.Bytes32Slot", + "id": 1455, + "members": [ + { + "constant": false, + "id": 1454, + "mutability": "mutable", + "name": "value", + "nameLocation": "1577:5:10", + "nodeType": "VariableDeclaration", + "scope": 1455, + "src": "1569:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1453, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1569:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "name": "Bytes32Slot", + "nameLocation": "1547:11:10", + "nodeType": "StructDefinition", + "scope": 1567, + "src": "1540:49:10", + "visibility": "public" + }, + { + "canonicalName": "StorageSlot.Uint256Slot", + "id": 1458, + "members": [ + { + "constant": false, + "id": 1457, + "mutability": "mutable", + "name": "value", + "nameLocation": "1632:5:10", + "nodeType": "VariableDeclaration", + "scope": 1458, + "src": "1624:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1456, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1624:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Uint256Slot", + "nameLocation": "1602:11:10", + "nodeType": "StructDefinition", + "scope": 1567, + "src": "1595:49:10", + "visibility": "public" + }, + { + "canonicalName": "StorageSlot.Int256Slot", + "id": 1461, + "members": [ + { + "constant": false, + "id": 1460, + "mutability": "mutable", + "name": "value", + "nameLocation": "1685:5:10", + "nodeType": "VariableDeclaration", + "scope": 1461, + "src": "1678:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 1459, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1678:6:10", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "name": "Int256Slot", + "nameLocation": "1657:10:10", + "nodeType": "StructDefinition", + "scope": 1567, + "src": "1650:47:10", + "visibility": "public" + }, + { + "canonicalName": "StorageSlot.StringSlot", + "id": 1464, + "members": [ + { + "constant": false, + "id": 1463, + "mutability": "mutable", + "name": "value", + "nameLocation": "1738:5:10", + "nodeType": "VariableDeclaration", + "scope": 1464, + "src": "1731:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1462, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1731:6:10", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "name": "StringSlot", + "nameLocation": "1710:10:10", + "nodeType": "StructDefinition", + "scope": 1567, + "src": "1703:47:10", + "visibility": "public" + }, + { + "canonicalName": "StorageSlot.BytesSlot", + "id": 1467, + "members": [ + { + "constant": false, + "id": 1466, + "mutability": "mutable", + "name": "value", + "nameLocation": "1789:5:10", + "nodeType": "VariableDeclaration", + "scope": 1467, + "src": "1783:11:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1465, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1783:5:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "BytesSlot", + "nameLocation": "1763:9:10", + "nodeType": "StructDefinition", + "scope": 1567, + "src": "1756:45:10", + "visibility": "public" + }, + { + "body": { + "id": 1477, + "nodeType": "Block", + "src": "1983:79:10", + "statements": [ + { + "AST": { + "nativeSrc": "2018:38:10", + "nodeType": "YulBlock", + "src": "2018:38:10", + "statements": [ + { + "nativeSrc": "2032:14:10", + "nodeType": "YulAssignment", + "src": "2032:14:10", + "value": { + "name": "slot", + "nativeSrc": "2042:4:10", + "nodeType": "YulIdentifier", + "src": "2042:4:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "2032:6:10", + "nodeType": "YulIdentifier", + "src": "2032:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1474, + "isOffset": false, + "isSlot": true, + "src": "2032:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1470, + "isOffset": false, + "isSlot": false, + "src": "2042:4:10", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1476, + "nodeType": "InlineAssembly", + "src": "1993:63:10" + } + ] + }, + "documentation": { + "id": 1468, + "nodeType": "StructuredDocumentation", + "src": "1807:87:10", + "text": " @dev Returns an `AddressSlot` with member `value` located at `slot`." + }, + "id": 1478, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAddressSlot", + "nameLocation": "1908:14:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1471, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1470, + "mutability": "mutable", + "name": "slot", + "nameLocation": "1931:4:10", + "nodeType": "VariableDeclaration", + "scope": 1478, + "src": "1923:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1469, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1923:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1922:14:10" + }, + "returnParameters": { + "id": 1475, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1474, + "mutability": "mutable", + "name": "r", + "nameLocation": "1980:1:10", + "nodeType": "VariableDeclaration", + "scope": 1478, + "src": "1960:21:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSlot_$1449_storage_ptr", + "typeString": "struct StorageSlot.AddressSlot" + }, + "typeName": { + "id": 1473, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1472, + "name": "AddressSlot", + "nameLocations": ["1960:11:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1449, + "src": "1960:11:10" + }, + "referencedDeclaration": 1449, + "src": "1960:11:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSlot_$1449_storage_ptr", + "typeString": "struct StorageSlot.AddressSlot" + } + }, + "visibility": "internal" + } + ], + "src": "1959:23:10" + }, + "scope": 1567, + "src": "1899:163:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1488, + "nodeType": "Block", + "src": "2243:79:10", + "statements": [ + { + "AST": { + "nativeSrc": "2278:38:10", + "nodeType": "YulBlock", + "src": "2278:38:10", + "statements": [ + { + "nativeSrc": "2292:14:10", + "nodeType": "YulAssignment", + "src": "2292:14:10", + "value": { + "name": "slot", + "nativeSrc": "2302:4:10", + "nodeType": "YulIdentifier", + "src": "2302:4:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "2292:6:10", + "nodeType": "YulIdentifier", + "src": "2292:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1485, + "isOffset": false, + "isSlot": true, + "src": "2292:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1481, + "isOffset": false, + "isSlot": false, + "src": "2302:4:10", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1487, + "nodeType": "InlineAssembly", + "src": "2253:63:10" + } + ] + }, + "documentation": { + "id": 1479, + "nodeType": "StructuredDocumentation", + "src": "2068:86:10", + "text": " @dev Returns a `BooleanSlot` with member `value` located at `slot`." + }, + "id": 1489, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBooleanSlot", + "nameLocation": "2168:14:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1482, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1481, + "mutability": "mutable", + "name": "slot", + "nameLocation": "2191:4:10", + "nodeType": "VariableDeclaration", + "scope": 1489, + "src": "2183:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1480, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2183:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2182:14:10" + }, + "returnParameters": { + "id": 1486, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1485, + "mutability": "mutable", + "name": "r", + "nameLocation": "2240:1:10", + "nodeType": "VariableDeclaration", + "scope": 1489, + "src": "2220:21:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BooleanSlot_$1452_storage_ptr", + "typeString": "struct StorageSlot.BooleanSlot" + }, + "typeName": { + "id": 1484, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1483, + "name": "BooleanSlot", + "nameLocations": ["2220:11:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1452, + "src": "2220:11:10" + }, + "referencedDeclaration": 1452, + "src": "2220:11:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BooleanSlot_$1452_storage_ptr", + "typeString": "struct StorageSlot.BooleanSlot" + } + }, + "visibility": "internal" + } + ], + "src": "2219:23:10" + }, + "scope": 1567, + "src": "2159:163:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1499, + "nodeType": "Block", + "src": "2503:79:10", + "statements": [ + { + "AST": { + "nativeSrc": "2538:38:10", + "nodeType": "YulBlock", + "src": "2538:38:10", + "statements": [ + { + "nativeSrc": "2552:14:10", + "nodeType": "YulAssignment", + "src": "2552:14:10", + "value": { + "name": "slot", + "nativeSrc": "2562:4:10", + "nodeType": "YulIdentifier", + "src": "2562:4:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "2552:6:10", + "nodeType": "YulIdentifier", + "src": "2552:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1496, + "isOffset": false, + "isSlot": true, + "src": "2552:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1492, + "isOffset": false, + "isSlot": false, + "src": "2562:4:10", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1498, + "nodeType": "InlineAssembly", + "src": "2513:63:10" + } + ] + }, + "documentation": { + "id": 1490, + "nodeType": "StructuredDocumentation", + "src": "2328:86:10", + "text": " @dev Returns a `Bytes32Slot` with member `value` located at `slot`." + }, + "id": 1500, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBytes32Slot", + "nameLocation": "2428:14:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1493, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1492, + "mutability": "mutable", + "name": "slot", + "nameLocation": "2451:4:10", + "nodeType": "VariableDeclaration", + "scope": 1500, + "src": "2443:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1491, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2443:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2442:14:10" + }, + "returnParameters": { + "id": 1497, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1496, + "mutability": "mutable", + "name": "r", + "nameLocation": "2500:1:10", + "nodeType": "VariableDeclaration", + "scope": 1500, + "src": "2480:21:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Slot_$1455_storage_ptr", + "typeString": "struct StorageSlot.Bytes32Slot" + }, + "typeName": { + "id": 1495, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1494, + "name": "Bytes32Slot", + "nameLocations": ["2480:11:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1455, + "src": "2480:11:10" + }, + "referencedDeclaration": 1455, + "src": "2480:11:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Slot_$1455_storage_ptr", + "typeString": "struct StorageSlot.Bytes32Slot" + } + }, + "visibility": "internal" + } + ], + "src": "2479:23:10" + }, + "scope": 1567, + "src": "2419:163:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1510, + "nodeType": "Block", + "src": "2763:79:10", + "statements": [ + { + "AST": { + "nativeSrc": "2798:38:10", + "nodeType": "YulBlock", + "src": "2798:38:10", + "statements": [ + { + "nativeSrc": "2812:14:10", + "nodeType": "YulAssignment", + "src": "2812:14:10", + "value": { + "name": "slot", + "nativeSrc": "2822:4:10", + "nodeType": "YulIdentifier", + "src": "2822:4:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "2812:6:10", + "nodeType": "YulIdentifier", + "src": "2812:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1507, + "isOffset": false, + "isSlot": true, + "src": "2812:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1503, + "isOffset": false, + "isSlot": false, + "src": "2822:4:10", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1509, + "nodeType": "InlineAssembly", + "src": "2773:63:10" + } + ] + }, + "documentation": { + "id": 1501, + "nodeType": "StructuredDocumentation", + "src": "2588:86:10", + "text": " @dev Returns a `Uint256Slot` with member `value` located at `slot`." + }, + "id": 1511, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getUint256Slot", + "nameLocation": "2688:14:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1503, + "mutability": "mutable", + "name": "slot", + "nameLocation": "2711:4:10", + "nodeType": "VariableDeclaration", + "scope": 1511, + "src": "2703:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1502, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2703:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2702:14:10" + }, + "returnParameters": { + "id": 1508, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1507, + "mutability": "mutable", + "name": "r", + "nameLocation": "2760:1:10", + "nodeType": "VariableDeclaration", + "scope": 1511, + "src": "2740:21:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Uint256Slot_$1458_storage_ptr", + "typeString": "struct StorageSlot.Uint256Slot" + }, + "typeName": { + "id": 1506, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1505, + "name": "Uint256Slot", + "nameLocations": ["2740:11:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1458, + "src": "2740:11:10" + }, + "referencedDeclaration": 1458, + "src": "2740:11:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Uint256Slot_$1458_storage_ptr", + "typeString": "struct StorageSlot.Uint256Slot" + } + }, + "visibility": "internal" + } + ], + "src": "2739:23:10" + }, + "scope": 1567, + "src": "2679:163:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1521, + "nodeType": "Block", + "src": "3020:79:10", + "statements": [ + { + "AST": { + "nativeSrc": "3055:38:10", + "nodeType": "YulBlock", + "src": "3055:38:10", + "statements": [ + { + "nativeSrc": "3069:14:10", + "nodeType": "YulAssignment", + "src": "3069:14:10", + "value": { + "name": "slot", + "nativeSrc": "3079:4:10", + "nodeType": "YulIdentifier", + "src": "3079:4:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "3069:6:10", + "nodeType": "YulIdentifier", + "src": "3069:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1518, + "isOffset": false, + "isSlot": true, + "src": "3069:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1514, + "isOffset": false, + "isSlot": false, + "src": "3079:4:10", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1520, + "nodeType": "InlineAssembly", + "src": "3030:63:10" + } + ] + }, + "documentation": { + "id": 1512, + "nodeType": "StructuredDocumentation", + "src": "2848:85:10", + "text": " @dev Returns a `Int256Slot` with member `value` located at `slot`." + }, + "id": 1522, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getInt256Slot", + "nameLocation": "2947:13:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1515, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1514, + "mutability": "mutable", + "name": "slot", + "nameLocation": "2969:4:10", + "nodeType": "VariableDeclaration", + "scope": 1522, + "src": "2961:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1513, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2961:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2960:14:10" + }, + "returnParameters": { + "id": 1519, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1518, + "mutability": "mutable", + "name": "r", + "nameLocation": "3017:1:10", + "nodeType": "VariableDeclaration", + "scope": 1522, + "src": "2998:20:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Int256Slot_$1461_storage_ptr", + "typeString": "struct StorageSlot.Int256Slot" + }, + "typeName": { + "id": 1517, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1516, + "name": "Int256Slot", + "nameLocations": ["2998:10:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1461, + "src": "2998:10:10" + }, + "referencedDeclaration": 1461, + "src": "2998:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Int256Slot_$1461_storage_ptr", + "typeString": "struct StorageSlot.Int256Slot" + } + }, + "visibility": "internal" + } + ], + "src": "2997:22:10" + }, + "scope": 1567, + "src": "2938:161:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1532, + "nodeType": "Block", + "src": "3277:79:10", + "statements": [ + { + "AST": { + "nativeSrc": "3312:38:10", + "nodeType": "YulBlock", + "src": "3312:38:10", + "statements": [ + { + "nativeSrc": "3326:14:10", + "nodeType": "YulAssignment", + "src": "3326:14:10", + "value": { + "name": "slot", + "nativeSrc": "3336:4:10", + "nodeType": "YulIdentifier", + "src": "3336:4:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "3326:6:10", + "nodeType": "YulIdentifier", + "src": "3326:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1529, + "isOffset": false, + "isSlot": true, + "src": "3326:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1525, + "isOffset": false, + "isSlot": false, + "src": "3336:4:10", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1531, + "nodeType": "InlineAssembly", + "src": "3287:63:10" + } + ] + }, + "documentation": { + "id": 1523, + "nodeType": "StructuredDocumentation", + "src": "3105:85:10", + "text": " @dev Returns a `StringSlot` with member `value` located at `slot`." + }, + "id": 1533, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getStringSlot", + "nameLocation": "3204:13:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1526, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1525, + "mutability": "mutable", + "name": "slot", + "nameLocation": "3226:4:10", + "nodeType": "VariableDeclaration", + "scope": 1533, + "src": "3218:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1524, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3218:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3217:14:10" + }, + "returnParameters": { + "id": 1530, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1529, + "mutability": "mutable", + "name": "r", + "nameLocation": "3274:1:10", + "nodeType": "VariableDeclaration", + "scope": 1533, + "src": "3255:20:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StringSlot_$1464_storage_ptr", + "typeString": "struct StorageSlot.StringSlot" + }, + "typeName": { + "id": 1528, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1527, + "name": "StringSlot", + "nameLocations": ["3255:10:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1464, + "src": "3255:10:10" + }, + "referencedDeclaration": 1464, + "src": "3255:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StringSlot_$1464_storage_ptr", + "typeString": "struct StorageSlot.StringSlot" + } + }, + "visibility": "internal" + } + ], + "src": "3254:22:10" + }, + "scope": 1567, + "src": "3195:161:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1543, + "nodeType": "Block", + "src": "3558:85:10", + "statements": [ + { + "AST": { + "nativeSrc": "3593:44:10", + "nodeType": "YulBlock", + "src": "3593:44:10", + "statements": [ + { + "nativeSrc": "3607:20:10", + "nodeType": "YulAssignment", + "src": "3607:20:10", + "value": { + "name": "store.slot", + "nativeSrc": "3617:10:10", + "nodeType": "YulIdentifier", + "src": "3617:10:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "3607:6:10", + "nodeType": "YulIdentifier", + "src": "3607:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1540, + "isOffset": false, + "isSlot": true, + "src": "3607:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1536, + "isOffset": false, + "isSlot": true, + "src": "3617:10:10", + "suffix": "slot", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1542, + "nodeType": "InlineAssembly", + "src": "3568:69:10" + } + ] + }, + "documentation": { + "id": 1534, + "nodeType": "StructuredDocumentation", + "src": "3362:101:10", + "text": " @dev Returns an `StringSlot` representation of the string storage pointer `store`." + }, + "id": 1544, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getStringSlot", + "nameLocation": "3477:13:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1537, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1536, + "mutability": "mutable", + "name": "store", + "nameLocation": "3506:5:10", + "nodeType": "VariableDeclaration", + "scope": 1544, + "src": "3491:20:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1535, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3491:6:10", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "3490:22:10" + }, + "returnParameters": { + "id": 1541, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1540, + "mutability": "mutable", + "name": "r", + "nameLocation": "3555:1:10", + "nodeType": "VariableDeclaration", + "scope": 1544, + "src": "3536:20:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StringSlot_$1464_storage_ptr", + "typeString": "struct StorageSlot.StringSlot" + }, + "typeName": { + "id": 1539, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1538, + "name": "StringSlot", + "nameLocations": ["3536:10:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1464, + "src": "3536:10:10" + }, + "referencedDeclaration": 1464, + "src": "3536:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StringSlot_$1464_storage_ptr", + "typeString": "struct StorageSlot.StringSlot" + } + }, + "visibility": "internal" + } + ], + "src": "3535:22:10" + }, + "scope": 1567, + "src": "3468:175:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1554, + "nodeType": "Block", + "src": "3818:79:10", + "statements": [ + { + "AST": { + "nativeSrc": "3853:38:10", + "nodeType": "YulBlock", + "src": "3853:38:10", + "statements": [ + { + "nativeSrc": "3867:14:10", + "nodeType": "YulAssignment", + "src": "3867:14:10", + "value": { + "name": "slot", + "nativeSrc": "3877:4:10", + "nodeType": "YulIdentifier", + "src": "3877:4:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "3867:6:10", + "nodeType": "YulIdentifier", + "src": "3867:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1551, + "isOffset": false, + "isSlot": true, + "src": "3867:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1547, + "isOffset": false, + "isSlot": false, + "src": "3877:4:10", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1553, + "nodeType": "InlineAssembly", + "src": "3828:63:10" + } + ] + }, + "documentation": { + "id": 1545, + "nodeType": "StructuredDocumentation", + "src": "3649:84:10", + "text": " @dev Returns a `BytesSlot` with member `value` located at `slot`." + }, + "id": 1555, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBytesSlot", + "nameLocation": "3747:12:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1548, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1547, + "mutability": "mutable", + "name": "slot", + "nameLocation": "3768:4:10", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3760:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1546, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3760:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3759:14:10" + }, + "returnParameters": { + "id": 1552, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1551, + "mutability": "mutable", + "name": "r", + "nameLocation": "3815:1:10", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "3797:19:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BytesSlot_$1467_storage_ptr", + "typeString": "struct StorageSlot.BytesSlot" + }, + "typeName": { + "id": 1550, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1549, + "name": "BytesSlot", + "nameLocations": ["3797:9:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1467, + "src": "3797:9:10" + }, + "referencedDeclaration": 1467, + "src": "3797:9:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BytesSlot_$1467_storage_ptr", + "typeString": "struct StorageSlot.BytesSlot" + } + }, + "visibility": "internal" + } + ], + "src": "3796:21:10" + }, + "scope": 1567, + "src": "3738:159:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1565, + "nodeType": "Block", + "src": "4094:85:10", + "statements": [ + { + "AST": { + "nativeSrc": "4129:44:10", + "nodeType": "YulBlock", + "src": "4129:44:10", + "statements": [ + { + "nativeSrc": "4143:20:10", + "nodeType": "YulAssignment", + "src": "4143:20:10", + "value": { + "name": "store.slot", + "nativeSrc": "4153:10:10", + "nodeType": "YulIdentifier", + "src": "4153:10:10" + }, + "variableNames": [ + { + "name": "r.slot", + "nativeSrc": "4143:6:10", + "nodeType": "YulIdentifier", + "src": "4143:6:10" + } + ] + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 1562, + "isOffset": false, + "isSlot": true, + "src": "4143:6:10", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 1558, + "isOffset": false, + "isSlot": true, + "src": "4153:10:10", + "suffix": "slot", + "valueSize": 1 + } + ], + "flags": ["memory-safe"], + "id": 1564, + "nodeType": "InlineAssembly", + "src": "4104:69:10" + } + ] + }, + "documentation": { + "id": 1556, + "nodeType": "StructuredDocumentation", + "src": "3903:99:10", + "text": " @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`." + }, + "id": 1566, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBytesSlot", + "nameLocation": "4016:12:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1559, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1558, + "mutability": "mutable", + "name": "store", + "nameLocation": "4043:5:10", + "nodeType": "VariableDeclaration", + "scope": 1566, + "src": "4029:19:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1557, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4029:5:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4028:21:10" + }, + "returnParameters": { + "id": 1563, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1562, + "mutability": "mutable", + "name": "r", + "nameLocation": "4091:1:10", + "nodeType": "VariableDeclaration", + "scope": 1566, + "src": "4073:19:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BytesSlot_$1467_storage_ptr", + "typeString": "struct StorageSlot.BytesSlot" + }, + "typeName": { + "id": 1561, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1560, + "name": "BytesSlot", + "nameLocations": ["4073:9:10"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1467, + "src": "4073:9:10" + }, + "referencedDeclaration": 1467, + "src": "4073:9:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BytesSlot_$1467_storage_ptr", + "typeString": "struct StorageSlot.BytesSlot" + } + }, + "visibility": "internal" + } + ], + "src": "4072:21:10" + }, + "scope": 1567, + "src": "4007:172:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "nodeType": "ContractDefinition", + "scope": 1568, + "src": "1407:2774:10", + "usedErrors": [], + "usedEvents": [] + } + ], + "nodeType": "SourceUnit", + "src": "193:3989:10" + }, + "id": 10 + }, + "contracts/interfaces/ITokenMessengerV2.sol": { + "ast": { + "absolutePath": "contracts/interfaces/ITokenMessengerV2.sol", + "exportedSymbols": { + "ITokenMessengerV2": [1899] + }, + "id": 1900, + "license": "MIT", + "nodes": [ + { + "id": 1879, + "literals": ["solidity", "^", "0.8", ".28"], + "nodeType": "PragmaDirective", + "src": "32:24:14" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "ITokenMessengerV2", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1899, + "linearizedBaseContracts": [1899], + "name": "ITokenMessengerV2", + "nameLocation": "68:17:14", + "nodes": [ + { + "functionSelector": "779b432d", + "id": 1898, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "depositForBurnWithHook", + "nameLocation": "101:22:14", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1896, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1881, + "mutability": "mutable", + "name": "amount", + "nameLocation": "141:6:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "133:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1880, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "133:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1883, + "mutability": "mutable", + "name": "destinationDomain", + "nameLocation": "164:17:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "157:24:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1882, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "157:6:14", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1885, + "mutability": "mutable", + "name": "mintRecipient", + "nameLocation": "199:13:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "191:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1884, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "191:7:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1887, + "mutability": "mutable", + "name": "burnToken", + "nameLocation": "230:9:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "222:17:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1886, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "222:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1889, + "mutability": "mutable", + "name": "destinationCaller", + "nameLocation": "257:17:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "249:25:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1888, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "249:7:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1891, + "mutability": "mutable", + "name": "maxFee", + "nameLocation": "292:6:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "284:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1890, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "284:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1893, + "mutability": "mutable", + "name": "minFinalityThreshold", + "nameLocation": "315:20:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "308:27:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1892, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "308:6:14", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1895, + "mutability": "mutable", + "name": "hookData", + "nameLocation": "360:8:14", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "345:23:14", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1894, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "345:5:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "123:251:14" + }, + "returnParameters": { + "id": 1897, + "nodeType": "ParameterList", + "parameters": [], + "src": "383:0:14" + }, + "scope": 1899, + "src": "92:292:14", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 1900, + "src": "58:328:14", + "usedErrors": [], + "usedEvents": [] + } + ], + "nodeType": "SourceUnit", + "src": "32:355:14" + }, + "id": 14 + }, + "contracts/mocks/MockERC20.sol": { + "ast": { + "absolutePath": "contracts/mocks/MockERC20.sol", + "exportedSymbols": { + "ERC20": [741], + "MockERC20": [1948] + }, + "id": 1949, + "license": "MIT", + "nodes": [ + { + "id": 1901, + "literals": ["solidity", "^", "0.8", ".28"], + "nodeType": "PragmaDirective", + "src": "32:24:15" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "id": 1903, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1949, + "sourceUnit": 742, + "src": "58:68:15", + "symbolAliases": [ + { + "foreign": { + "id": 1902, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 741, + "src": "66:5:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1904, + "name": "ERC20", + "nameLocations": ["150:5:15"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 741, + "src": "150:5:15" + }, + "id": 1905, + "nodeType": "InheritanceSpecifier", + "src": "150:5:15" + } + ], + "canonicalName": "MockERC20", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 1948, + "linearizedBaseContracts": [1948, 741, 131, 845, 819, 1330], + "name": "MockERC20", + "nameLocation": "137:9:15", + "nodes": [ + { + "constant": false, + "id": 1907, + "mutability": "immutable", + "name": "tokenDecimals", + "nameLocation": "186:13:15", + "nodeType": "VariableDeclaration", + "scope": 1948, + "src": "162:37:15", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1906, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "162:5:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 1924, + "nodeType": "Block", + "src": "301:42:15", + "statements": [ + { + "expression": { + "id": 1922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1920, + "name": "tokenDecimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1907, + "src": "311:13:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1921, + "name": "decimals_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1913, + "src": "327:9:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "311:25:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 1923, + "nodeType": "ExpressionStatement", + "src": "311:25:15" + } + ] + }, + "id": 1925, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 1916, + "name": "name_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1909, + "src": "285:5:15", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 1917, + "name": "symbol_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1911, + "src": "292:7:15", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "id": 1918, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 1915, + "name": "ERC20", + "nameLocations": ["279:5:15"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 741, + "src": "279:5:15" + }, + "nodeType": "ModifierInvocation", + "src": "279:21:15" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1914, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1909, + "mutability": "mutable", + "name": "name_", + "nameLocation": "232:5:15", + "nodeType": "VariableDeclaration", + "scope": 1925, + "src": "218:19:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1908, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "218:6:15", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1911, + "mutability": "mutable", + "name": "symbol_", + "nameLocation": "253:7:15", + "nodeType": "VariableDeclaration", + "scope": 1925, + "src": "239:21:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1910, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "239:6:15", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1913, + "mutability": "mutable", + "name": "decimals_", + "nameLocation": "268:9:15", + "nodeType": "VariableDeclaration", + "scope": 1925, + "src": "262:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1912, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "262:5:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "217:61:15" + }, + "returnParameters": { + "id": 1919, + "nodeType": "ParameterList", + "parameters": [], + "src": "301:0:15" + }, + "scope": 1948, + "src": "206:137:15", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [305], + "body": { + "id": 1933, + "nodeType": "Block", + "src": "406:37:15", + "statements": [ + { + "expression": { + "id": 1931, + "name": "tokenDecimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1907, + "src": "423:13:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "functionReturnParameters": 1930, + "id": 1932, + "nodeType": "Return", + "src": "416:20:15" + } + ] + }, + "functionSelector": "313ce567", + "id": 1934, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nameLocation": "358:8:15", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1927, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "381:8:15" + }, + "parameters": { + "id": 1926, + "nodeType": "ParameterList", + "parameters": [], + "src": "366:2:15" + }, + "returnParameters": { + "id": 1930, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1929, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1934, + "src": "399:5:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1928, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "399:5:15", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "398:7:15" + }, + "scope": 1948, + "src": "349:94:15", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1946, + "nodeType": "Block", + "src": "500:34:15", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 1942, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1936, + "src": "516:2:15", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1943, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1938, + "src": "520:6:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1941, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 581, + "src": "510:5:15", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 1944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "510:17:15", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1945, + "nodeType": "ExpressionStatement", + "src": "510:17:15" + } + ] + }, + "functionSelector": "40c10f19", + "id": 1947, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mint", + "nameLocation": "458:4:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1939, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1936, + "mutability": "mutable", + "name": "to", + "nameLocation": "471:2:15", + "nodeType": "VariableDeclaration", + "scope": 1947, + "src": "463:10:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1935, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "463:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1938, + "mutability": "mutable", + "name": "amount", + "nameLocation": "483:6:15", + "nodeType": "VariableDeclaration", + "scope": 1947, + "src": "475:14:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1937, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "475:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "462:28:15" + }, + "returnParameters": { + "id": 1940, + "nodeType": "ParameterList", + "parameters": [], + "src": "500:0:15" + }, + "scope": 1948, + "src": "449:85:15", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 1949, + "src": "128:408:15", + "usedErrors": [101, 106, 111, 120, 125, 130], + "usedEvents": [753, 762] + } + ], + "nodeType": "SourceUnit", + "src": "32:505:15" + }, + "id": 15 + }, + "contracts/mocks/MockTokenMessengerV2.sol": { + "ast": { + "absolutePath": "contracts/mocks/MockTokenMessengerV2.sol", + "exportedSymbols": { + "IERC20": [819], + "MockTokenMessengerV2": [2105], + "SafeERC20": [1300] + }, + "id": 2106, + "license": "MIT", + "nodes": [ + { + "id": 1950, + "literals": ["solidity", "^", "0.8", ".28"], + "nodeType": "PragmaDirective", + "src": "32:24:16" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "id": 1952, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2106, + "sourceUnit": 820, + "src": "58:70:16", + "symbolAliases": [ + { + "foreign": { + "id": 1951, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "66:6:16", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "id": 1954, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2106, + "sourceUnit": 1301, + "src": "129:82:16", + "symbolAliases": [ + { + "foreign": { + "id": 1953, + "name": "SafeERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1300, + "src": "137:9:16", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "MockTokenMessengerV2", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 2105, + "linearizedBaseContracts": [2105], + "name": "MockTokenMessengerV2", + "nameLocation": "222:20:16", + "nodes": [ + { + "global": false, + "id": 1958, + "libraryName": { + "id": 1955, + "name": "SafeERC20", + "nameLocations": ["255:9:16"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1300, + "src": "255:9:16" + }, + "nodeType": "UsingForDirective", + "src": "249:27:16", + "typeName": { + "id": 1957, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1956, + "name": "IERC20", + "nameLocations": ["269:6:16"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "269:6:16" + }, + "referencedDeclaration": 819, + "src": "269:6:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + } + }, + { + "canonicalName": "MockTokenMessengerV2.BurnCall", + "id": 1977, + "members": [ + { + "constant": false, + "id": 1960, + "mutability": "mutable", + "name": "amount", + "nameLocation": "316:6:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "308:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1959, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "308:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1962, + "mutability": "mutable", + "name": "destinationDomain", + "nameLocation": "339:17:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "332:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1961, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "332:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1964, + "mutability": "mutable", + "name": "mintRecipient", + "nameLocation": "374:13:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "366:21:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1963, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "366:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1966, + "mutability": "mutable", + "name": "burnToken", + "nameLocation": "405:9:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "397:17:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1965, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "397:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1968, + "mutability": "mutable", + "name": "destinationCaller", + "nameLocation": "432:17:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "424:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1967, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "424:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1970, + "mutability": "mutable", + "name": "maxFee", + "nameLocation": "467:6:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "459:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1969, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "459:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1972, + "mutability": "mutable", + "name": "minFinalityThreshold", + "nameLocation": "490:20:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "483:27:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1971, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "483:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1974, + "mutability": "mutable", + "name": "hookData", + "nameLocation": "526:8:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "520:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1973, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "520:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1976, + "mutability": "mutable", + "name": "depositor", + "nameLocation": "552:9:16", + "nodeType": "VariableDeclaration", + "scope": 1977, + "src": "544:17:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1975, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "544:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "name": "BurnCall", + "nameLocation": "289:8:16", + "nodeType": "StructDefinition", + "scope": 2105, + "src": "282:286:16", + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "599d38f3", + "id": 1980, + "mutability": "mutable", + "name": "lastBurnCall", + "nameLocation": "590:12:16", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "574:28:16", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BurnCall_$1977_storage", + "typeString": "struct MockTokenMessengerV2.BurnCall" + }, + "typeName": { + "id": 1979, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1978, + "name": "BurnCall", + "nameLocations": ["574:8:16"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1977, + "src": "574:8:16" + }, + "referencedDeclaration": 1977, + "src": "574:8:16", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BurnCall_$1977_storage_ptr", + "typeString": "struct MockTokenMessengerV2.BurnCall" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "a0fe97e3", + "id": 1982, + "mutability": "mutable", + "name": "reenter", + "nameLocation": "620:7:16", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "608:19:16", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1981, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "608:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "cc6e8454", + "id": 1984, + "mutability": "mutable", + "name": "reenterTarget", + "nameLocation": "648:13:16", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "633:28:16", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1983, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "633:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "e150ef49", + "id": 1986, + "mutability": "mutable", + "name": "reenterData", + "nameLocation": "680:11:16", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "667:24:16", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes" + }, + "typeName": { + "id": 1985, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "667:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "eventSelector": "d6257a7e0a72caa2353e59a6f79cbc5221c3fb8e486c6c05e4f7844c4f967d68", + "id": 2006, + "name": "DepositForBurn", + "nameLocation": "704:14:16", + "nodeType": "EventDefinition", + "parameters": { + "id": 2005, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1988, + "indexed": true, + "mutability": "mutable", + "name": "burnToken", + "nameLocation": "744:9:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "728:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1987, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "728:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1990, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nameLocation": "771:6:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "763:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1989, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "763:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1992, + "indexed": true, + "mutability": "mutable", + "name": "depositor", + "nameLocation": "803:9:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "787:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1991, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "787:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1994, + "indexed": false, + "mutability": "mutable", + "name": "mintRecipient", + "nameLocation": "830:13:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "822:21:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1993, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "822:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1996, + "indexed": false, + "mutability": "mutable", + "name": "destinationDomain", + "nameLocation": "860:17:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "853:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1995, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "853:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1998, + "indexed": false, + "mutability": "mutable", + "name": "destinationCaller", + "nameLocation": "895:17:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "887:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1997, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "887:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2000, + "indexed": false, + "mutability": "mutable", + "name": "maxFee", + "nameLocation": "930:6:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "922:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1999, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "922:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2002, + "indexed": true, + "mutability": "mutable", + "name": "minFinalityThreshold", + "nameLocation": "961:20:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "946:35:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2001, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "946:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2004, + "indexed": false, + "mutability": "mutable", + "name": "hookData", + "nameLocation": "997:8:16", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "991:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2003, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "991:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "718:293:16" + }, + "src": "698:314:16" + }, + { + "body": { + "id": 2083, + "nodeType": "Block", + "src": "1310:1034:16", + "statements": [ + { + "condition": { + "id": 2025, + "name": "reenter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1982, + "src": "1324:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2041, + "nodeType": "IfStatement", + "src": "1320:265:16", + "trueBody": { + "id": 2040, + "nodeType": "Block", + "src": "1333:252:16", + "statements": [ + { + "assignments": [2027, 2029], + "declarations": [ + { + "constant": false, + "id": 2027, + "mutability": "mutable", + "name": "success", + "nameLocation": "1353:7:16", + "nodeType": "VariableDeclaration", + "scope": 2040, + "src": "1348:12:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2026, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1348:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2029, + "mutability": "mutable", + "name": "returndata", + "nameLocation": "1375:10:16", + "nodeType": "VariableDeclaration", + "scope": 2040, + "src": "1362:23:16", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2028, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1362:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 2034, + "initialValue": { + "arguments": [ + { + "id": 2032, + "name": "reenterData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1986, + "src": "1408:11:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + ], + "expression": { + "id": 2030, + "name": "reenterTarget", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1984, + "src": "1389:13:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1403:4:16", + "memberName": "call", + "nodeType": "MemberAccess", + "src": "1389:18:16", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 2033, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1389:31:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1347:73:16" + }, + { + "condition": { + "id": 2036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1438:8:16", + "subExpression": { + "id": 2035, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2027, + "src": "1439:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2039, + "nodeType": "IfStatement", + "src": "1434:141:16", + "trueBody": { + "id": 2038, + "nodeType": "Block", + "src": "1448:127:16", + "statements": [ + { + "AST": { + "nativeSrc": "1475:86:16", + "nodeType": "YulBlock", + "src": "1475:86:16", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "returndata", + "nativeSrc": "1508:10:16", + "nodeType": "YulIdentifier", + "src": "1508:10:16" + }, + { + "kind": "number", + "nativeSrc": "1520:2:16", + "nodeType": "YulLiteral", + "src": "1520:2:16", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1504:3:16", + "nodeType": "YulIdentifier", + "src": "1504:3:16" + }, + "nativeSrc": "1504:19:16", + "nodeType": "YulFunctionCall", + "src": "1504:19:16" + }, + { + "arguments": [ + { + "name": "returndata", + "nativeSrc": "1531:10:16", + "nodeType": "YulIdentifier", + "src": "1531:10:16" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1525:5:16", + "nodeType": "YulIdentifier", + "src": "1525:5:16" + }, + "nativeSrc": "1525:17:16", + "nodeType": "YulFunctionCall", + "src": "1525:17:16" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1497:6:16", + "nodeType": "YulIdentifier", + "src": "1497:6:16" + }, + "nativeSrc": "1497:46:16", + "nodeType": "YulFunctionCall", + "src": "1497:46:16" + }, + "nativeSrc": "1497:46:16", + "nodeType": "YulExpressionStatement", + "src": "1497:46:16" + } + ] + }, + "evmVersion": "cancun", + "externalReferences": [ + { + "declaration": 2029, + "isOffset": false, + "isSlot": false, + "src": "1508:10:16", + "valueSize": 1 + }, + { + "declaration": 2029, + "isOffset": false, + "isSlot": false, + "src": "1531:10:16", + "valueSize": 1 + } + ], + "id": 2037, + "nodeType": "InlineAssembly", + "src": "1466:95:16" + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 2046, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1630:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1634:6:16", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1630:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 2050, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1650:4:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockTokenMessengerV2_$2105", + "typeString": "contract MockTokenMessengerV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockTokenMessengerV2_$2105", + "typeString": "contract MockTokenMessengerV2" + } + ], + "id": 2049, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1642:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2048, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1642:7:16", + "typeDescriptions": {} + } + }, + "id": 2051, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1642:13:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2052, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2008, + "src": "1657:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 2043, + "name": "burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "1602:9:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2042, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "1595:6:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$819_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 2044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1595:17:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "id": 2045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1613:16:16", + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 925, + "src": "1595:34:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$819_$", + "typeString": "function (contract IERC20,address,address,uint256)" + } + }, + "id": 2053, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1595:69:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2054, + "nodeType": "ExpressionStatement", + "src": "1595:69:16" + }, + { + "expression": { + "id": 2068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 2055, + "name": "lastBurnCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1980, + "src": "1675:12:16", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BurnCall_$1977_storage", + "typeString": "struct MockTokenMessengerV2.BurnCall storage ref" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 2057, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2008, + "src": "1721:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2058, + "name": "destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2010, + "src": "1760:17:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 2059, + "name": "mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2012, + "src": "1806:13:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2060, + "name": "burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "1844:9:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2061, + "name": "destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2016, + "src": "1886:17:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2062, + "name": "maxFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2018, + "src": "1925:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2063, + "name": "minFinalityThreshold", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2020, + "src": "1967:20:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 2064, + "name": "hookData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2022, + "src": "2011:8:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "expression": { + "id": 2065, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2044:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2066, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2048:6:16", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2044:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2056, + "name": "BurnCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1977, + "src": "1690:8:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_BurnCall_$1977_storage_ptr_$", + "typeString": "type(struct MockTokenMessengerV2.BurnCall storage pointer)" + } + }, + "id": 2067, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "1713:6:16", + "1741:17:16", + "1791:13:16", + "1833:9:16", + "1867:17:16", + "1917:6:16", + "1945:20:16", + "2001:8:16", + "2033:9:16" + ], + "names": [ + "amount", + "destinationDomain", + "mintRecipient", + "burnToken", + "destinationCaller", + "maxFee", + "minFinalityThreshold", + "hookData", + "depositor" + ], + "nodeType": "FunctionCall", + "src": "1690:375:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_BurnCall_$1977_memory_ptr", + "typeString": "struct MockTokenMessengerV2.BurnCall memory" + } + }, + "src": "1675:390:16", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BurnCall_$1977_storage", + "typeString": "struct MockTokenMessengerV2.BurnCall storage ref" + } + }, + "id": 2069, + "nodeType": "ExpressionStatement", + "src": "1675:390:16" + }, + { + "eventCall": { + "arguments": [ + { + "id": 2071, + "name": "burnToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "2109:9:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2072, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2008, + "src": "2132:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 2073, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2152:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2156:6:16", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2152:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2075, + "name": "mintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2012, + "src": "2176:13:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2076, + "name": "destinationDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2010, + "src": "2203:17:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 2077, + "name": "destinationCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2016, + "src": "2234:17:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2078, + "name": "maxFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2018, + "src": "2265:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2079, + "name": "minFinalityThreshold", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2020, + "src": "2285:20:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 2080, + "name": "hookData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2022, + "src": "2319:8:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 2070, + "name": "DepositForBurn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2006, + "src": "2081:14:16", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$_t_uint32_$_t_bytes32_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,uint256,address,bytes32,uint32,bytes32,uint256,uint32,bytes memory)" + } + }, + "id": 2081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2081:256:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2082, + "nodeType": "EmitStatement", + "src": "2076:261:16" + } + ] + }, + "functionSelector": "779b432d", + "id": 2084, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "depositForBurnWithHook", + "nameLocation": "1027:22:16", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2023, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2008, + "mutability": "mutable", + "name": "amount", + "nameLocation": "1067:6:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1059:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2007, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1059:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2010, + "mutability": "mutable", + "name": "destinationDomain", + "nameLocation": "1090:17:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1083:24:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2009, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1083:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2012, + "mutability": "mutable", + "name": "mintRecipient", + "nameLocation": "1125:13:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1117:21:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2011, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1117:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2014, + "mutability": "mutable", + "name": "burnToken", + "nameLocation": "1156:9:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1148:17:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2013, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1148:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2016, + "mutability": "mutable", + "name": "destinationCaller", + "nameLocation": "1183:17:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1175:25:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2015, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1175:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2018, + "mutability": "mutable", + "name": "maxFee", + "nameLocation": "1218:6:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1210:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2017, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1210:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2020, + "mutability": "mutable", + "name": "minFinalityThreshold", + "nameLocation": "1241:20:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1234:27:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2019, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1234:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2022, + "mutability": "mutable", + "name": "hookData", + "nameLocation": "1286:8:16", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "1271:23:16", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2021, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1271:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1049:251:16" + }, + "returnParameters": { + "id": 2024, + "nodeType": "ParameterList", + "parameters": [], + "src": "1310:0:16" + }, + "scope": 2105, + "src": "1018:1326:16", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 2103, + "nodeType": "Block", + "src": "2416:91:16", + "statements": [ + { + "expression": { + "id": 2093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 2091, + "name": "reenter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1982, + "src": "2426:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 2092, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2436:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2426:14:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2094, + "nodeType": "ExpressionStatement", + "src": "2426:14:16" + }, + { + "expression": { + "id": 2097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 2095, + "name": "reenterTarget", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1984, + "src": "2450:13:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 2096, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2086, + "src": "2466:6:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2450:22:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2098, + "nodeType": "ExpressionStatement", + "src": "2450:22:16" + }, + { + "expression": { + "id": 2101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 2099, + "name": "reenterData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1986, + "src": "2482:11:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 2100, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2088, + "src": "2496:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "src": "2482:18:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage", + "typeString": "bytes storage ref" + } + }, + "id": 2102, + "nodeType": "ExpressionStatement", + "src": "2482:18:16" + } + ] + }, + "functionSelector": "02bcc1dd", + "id": 2104, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "setReenter", + "nameLocation": "2359:10:16", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2089, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2086, + "mutability": "mutable", + "name": "target", + "nameLocation": "2378:6:16", + "nodeType": "VariableDeclaration", + "scope": 2104, + "src": "2370:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2085, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2370:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2088, + "mutability": "mutable", + "name": "data", + "nameLocation": "2401:4:16", + "nodeType": "VariableDeclaration", + "scope": 2104, + "src": "2386:19:16", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2087, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2386:5:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2369:37:16" + }, + "returnParameters": { + "id": 2090, + "nodeType": "ParameterList", + "parameters": [], + "src": "2416:0:16" + }, + "scope": 2105, + "src": "2350:157:16", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 2106, + "src": "213:2296:16", + "usedErrors": [857], + "usedEvents": [2006] + } + ], + "nodeType": "SourceUnit", + "src": "32:2478:16" + }, + "id": 16 + }, + "contracts/PerUserCctpSettlement.sol": { + "ast": { + "absolutePath": "contracts/PerUserCctpSettlement.sol", + "exportedSymbols": { + "IERC20": [819], + "ITokenMessengerV2": [1899], + "PerUserCctpSettlement": [1800], + "ReentrancyGuard": [1443], + "SafeERC20": [1300] + }, + "id": 1801, + "license": "MIT", + "nodes": [ + { + "id": 1581, + "literals": ["solidity", "^", "0.8", ".28"], + "nodeType": "PragmaDirective", + "src": "32:24:12" + }, + { + "absolutePath": "contracts/interfaces/ITokenMessengerV2.sol", + "file": "./interfaces/ITokenMessengerV2.sol", + "id": 1583, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1801, + "sourceUnit": 1900, + "src": "58:69:12", + "symbolAliases": [ + { + "foreign": { + "id": 1582, + "name": "ITokenMessengerV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1899, + "src": "66:17:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "id": 1585, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1801, + "sourceUnit": 820, + "src": "128:70:12", + "symbolAliases": [ + { + "foreign": { + "id": 1584, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "136:6:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "id": 1587, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1801, + "sourceUnit": 1301, + "src": "199:82:12", + "symbolAliases": [ + { + "foreign": { + "id": 1586, + "name": "SafeERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1300, + "src": "207:9:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", + "file": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", + "id": 1589, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1801, + "sourceUnit": 1444, + "src": "282:82:12", + "symbolAliases": [ + { + "foreign": { + "id": 1588, + "name": "ReentrancyGuard", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1443, + "src": "290:15:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1590, + "name": "ReentrancyGuard", + "nameLocations": ["400:15:12"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1443, + "src": "400:15:12" + }, + "id": 1591, + "nodeType": "InheritanceSpecifier", + "src": "400:15:12" + } + ], + "canonicalName": "PerUserCctpSettlement", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 1800, + "linearizedBaseContracts": [1800, 1443], + "name": "PerUserCctpSettlement", + "nameLocation": "375:21:12", + "nodes": [ + { + "global": false, + "id": 1595, + "libraryName": { + "id": 1592, + "name": "SafeERC20", + "nameLocations": ["428:9:12"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1300, + "src": "428:9:12" + }, + "nodeType": "UsingForDirective", + "src": "422:27:12", + "typeName": { + "id": 1594, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1593, + "name": "IERC20", + "nameLocations": ["442:6:12"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "442:6:12" + }, + "referencedDeclaration": 819, + "src": "442:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + } + }, + { + "constant": true, + "functionSelector": "acef1c57", + "id": 1598, + "mutability": "constant", + "name": "ETHEREUM_DESTINATION_DOMAIN", + "nameLocation": "478:27:12", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "455:54:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1596, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "455:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "30", + "id": 1597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "508:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "public" + }, + { + "constant": true, + "functionSelector": "62cef4b9", + "id": 1604, + "mutability": "constant", + "name": "DESTINATION_CALLER", + "nameLocation": "539:18:12", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "515:55:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1599, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "515:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "30", + "id": 1602, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "568:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1601, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "560:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 1600, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "560:7:12", + "typeDescriptions": {} + } + }, + "id": 1603, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "560:10:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "constant": true, + "functionSelector": "c6db9c87", + "id": 1607, + "mutability": "constant", + "name": "FORWARD_HOOK_DATA", + "nameLocation": "600:17:12", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "576:110:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1605, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "576:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307836333633373437303264363636663732373736313732363430303030303030303030303030303030303030303030303030303030303030303030303030303030", + "id": 1606, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "620:66:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_44954693496027879503795317545910344310021565466410439397339455666660875173888_by_1", + "typeString": "int_const 4495...(69 digits omitted)...3888" + }, + "value": "0x636374702d666f72776172640000000000000000000000000000000000000000" + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "3e413bee", + "id": 1610, + "mutability": "immutable", + "name": "usdc", + "nameLocation": "717:4:12", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "693:28:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1609, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1608, + "name": "IERC20", + "nameLocations": ["693:6:12"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 819, + "src": "693:6:12" + }, + "referencedDeclaration": 819, + "src": "693:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "46117830", + "id": 1613, + "mutability": "immutable", + "name": "tokenMessenger", + "nameLocation": "762:14:12", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "727:49:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + }, + "typeName": { + "id": 1612, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1611, + "name": "ITokenMessengerV2", + "nameLocations": ["727:17:12"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1899, + "src": "727:17:12" + }, + "referencedDeclaration": 1899, + "src": "727:17:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "09bdf150", + "id": 1615, + "mutability": "immutable", + "name": "ethereumMintRecipient", + "nameLocation": "807:21:12", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "782:46:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1614, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "782:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "c74ee957", + "id": 1617, + "mutability": "immutable", + "name": "mintRecipientBytes32", + "nameLocation": "859:20:12", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "834:45:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1616, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "834:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "eventSelector": "3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6", + "id": 1635, + "name": "UsdcSweptAndForwarded", + "nameLocation": "892:21:12", + "nodeType": "EventDefinition", + "parameters": { + "id": 1634, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1619, + "indexed": true, + "mutability": "mutable", + "name": "caller", + "nameLocation": "939:6:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "923:22:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1618, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "923:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1621, + "indexed": false, + "mutability": "mutable", + "name": "usdcAmount", + "nameLocation": "963:10:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "955:18:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1620, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "955:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1623, + "indexed": false, + "mutability": "mutable", + "name": "destinationDomain", + "nameLocation": "990:17:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "983:24:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1622, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "983:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1625, + "indexed": false, + "mutability": "mutable", + "name": "mintRecipient", + "nameLocation": "1025:13:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "1017:21:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1624, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1017:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1627, + "indexed": false, + "mutability": "mutable", + "name": "destinationCaller", + "nameLocation": "1056:17:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "1048:25:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1626, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1048:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1629, + "indexed": false, + "mutability": "mutable", + "name": "maxFee", + "nameLocation": "1091:6:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "1083:14:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1628, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1083:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1631, + "indexed": false, + "mutability": "mutable", + "name": "minFinalityThreshold", + "nameLocation": "1114:20:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "1107:27:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1630, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1107:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1633, + "indexed": false, + "mutability": "mutable", + "name": "forwardHookData", + "nameLocation": "1152:15:12", + "nodeType": "VariableDeclaration", + "scope": 1635, + "src": "1144:23:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1632, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1144:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "913:260:12" + }, + "src": "886:288:12" + }, + { + "body": { + "id": 1696, + "nodeType": "Block", + "src": "1264:428:12", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1645, + "name": "_usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1637, + "src": "1282:5:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 1648, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1299:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1291:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1646, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1291:7:12", + "typeDescriptions": {} + } + }, + "id": 1649, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1291:10:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1282:19:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642055534443", + "id": 1651, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1303:14:12", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265", + "typeString": "literal_string \"Invalid USDC\"" + }, + "value": "Invalid USDC" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265", + "typeString": "literal_string \"Invalid USDC\"" + } + ], + "id": 1644, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "1274:7:12", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1274:44:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1653, + "nodeType": "ExpressionStatement", + "src": "1274:44:12" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1655, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1639, + "src": "1336:15:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 1658, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1363:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1657, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1355:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1656, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1355:7:12", + "typeDescriptions": {} + } + }, + "id": 1659, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1355:10:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1336:29:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964206d657373656e676572", + "id": 1661, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1367:19:12", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390", + "typeString": "literal_string \"Invalid messenger\"" + }, + "value": "Invalid messenger" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390", + "typeString": "literal_string \"Invalid messenger\"" + } + ], + "id": 1654, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "1328:7:12", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1328:59:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1663, + "nodeType": "ExpressionStatement", + "src": "1328:59:12" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1665, + "name": "_ethereumMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1641, + "src": "1405:22:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 1668, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1439:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1667, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1431:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1431:7:12", + "typeDescriptions": {} + } + }, + "id": 1669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1431:10:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1405:36:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c696420726563697069656e74", + "id": 1671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1443:19:12", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a6664b97aef19c137d44ec81dfc0c0cc28a2c3470357b125208345a2c048425d", + "typeString": "literal_string \"Invalid recipient\"" + }, + "value": "Invalid recipient" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a6664b97aef19c137d44ec81dfc0c0cc28a2c3470357b125208345a2c048425d", + "typeString": "literal_string \"Invalid recipient\"" + } + ], + "id": 1664, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "1397:7:12", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1397:66:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1673, + "nodeType": "ExpressionStatement", + "src": "1397:66:12" + }, + { + "expression": { + "id": 1678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1674, + "name": "usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1610, + "src": "1474:4:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 1676, + "name": "_usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1637, + "src": "1488:5:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1675, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 819, + "src": "1481:6:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$819_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 1677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1481:13:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "src": "1474:20:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "id": 1679, + "nodeType": "ExpressionStatement", + "src": "1474:20:12" + }, + { + "expression": { + "id": 1684, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1680, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1613, + "src": "1504:14:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 1682, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1639, + "src": "1539:15:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1681, + "name": "ITokenMessengerV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1899, + "src": "1521:17:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ITokenMessengerV2_$1899_$", + "typeString": "type(contract ITokenMessengerV2)" + } + }, + "id": 1683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1521:34:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + }, + "src": "1504:51:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + }, + "id": 1685, + "nodeType": "ExpressionStatement", + "src": "1504:51:12" + }, + { + "expression": { + "id": 1688, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1686, + "name": "ethereumMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1615, + "src": "1565:21:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1687, + "name": "_ethereumMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1641, + "src": "1589:22:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1565:46:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1689, + "nodeType": "ExpressionStatement", + "src": "1565:46:12" + }, + { + "expression": { + "id": 1694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1690, + "name": "mintRecipientBytes32", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1617, + "src": "1621:20:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 1692, + "name": "_ethereumMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1641, + "src": "1662:22:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1691, + "name": "_addressToBytes32", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1799, + "src": "1644:17:12", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address) pure returns (bytes32)" + } + }, + "id": 1693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1644:41:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "1621:64:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 1695, + "nodeType": "ExpressionStatement", + "src": "1621:64:12" + } + ] + }, + "id": 1697, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1637, + "mutability": "mutable", + "name": "_usdc", + "nameLocation": "1200:5:12", + "nodeType": "VariableDeclaration", + "scope": 1697, + "src": "1192:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1636, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1192:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1639, + "mutability": "mutable", + "name": "_tokenMessenger", + "nameLocation": "1215:15:12", + "nodeType": "VariableDeclaration", + "scope": 1697, + "src": "1207:23:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1638, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1207:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1641, + "mutability": "mutable", + "name": "_ethereumMintRecipient", + "nameLocation": "1240:22:12", + "nodeType": "VariableDeclaration", + "scope": 1697, + "src": "1232:30:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1640, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1232:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1191:72:12" + }, + "returnParameters": { + "id": 1643, + "nodeType": "ParameterList", + "parameters": [], + "src": "1264:0:12" + }, + "scope": 1800, + "src": "1180:512:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1779, + "nodeType": "Block", + "src": "1804:876:12", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1709, + "name": "usdcAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1699, + "src": "1822:10:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 1710, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1835:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1822:14:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c696420616d6f756e74", + "id": 1712, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1838:16:12", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2fd1dfd944df9898ee4c79794168926172c3d96d7664ff9919bb7080bb018af1", + "typeString": "literal_string \"Invalid amount\"" + }, + "value": "Invalid amount" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2fd1dfd944df9898ee4c79794168926172c3d96d7664ff9919bb7080bb018af1", + "typeString": "literal_string \"Invalid amount\"" + } + ], + "id": 1708, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "1814:7:12", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1814:41:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1714, + "nodeType": "ExpressionStatement", + "src": "1814:41:12" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "arguments": [ + { + "arguments": [ + { + "id": 1720, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1896:4:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_PerUserCctpSettlement_$1800", + "typeString": "contract PerUserCctpSettlement" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_PerUserCctpSettlement_$1800", + "typeString": "contract PerUserCctpSettlement" + } + ], + "id": 1719, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1888:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1718, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1888:7:12", + "typeDescriptions": {} + } + }, + "id": 1721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1888:13:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 1716, + "name": "usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1610, + "src": "1873:4:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "id": 1717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1878:9:12", + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 776, + "src": "1873:14:12", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 1722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1873:29:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 1723, + "name": "usdcAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1699, + "src": "1906:10:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1873:43:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e73756666696369656e7420555344432062616c616e6365", + "id": 1725, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1918:27:12", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_40a05d66d0175ecd11e5a65435b281d52a1c32bbc687760a717d83801a914a3c", + "typeString": "literal_string \"Insufficient USDC balance\"" + }, + "value": "Insufficient USDC balance" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_40a05d66d0175ecd11e5a65435b281d52a1c32bbc687760a717d83801a914a3c", + "typeString": "literal_string \"Insufficient USDC balance\"" + } + ], + "id": 1715, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "1865:7:12", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1865:81:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1727, + "nodeType": "ExpressionStatement", + "src": "1865:81:12" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 1733, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1613, + "src": "1983:14:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + ], + "id": 1732, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1975:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1731, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1975:7:12", + "typeDescriptions": {} + } + }, + "id": 1734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1975:23:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1735, + "name": "usdcAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1699, + "src": "2000:10:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 1728, + "name": "usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1610, + "src": "1957:4:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "id": 1730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1962:12:12", + "memberName": "forceApprove", + "nodeType": "MemberAccess", + "referencedDeclaration": 1095, + "src": "1957:17:12", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$819_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1957:54:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1737, + "nodeType": "ExpressionStatement", + "src": "1957:54:12" + }, + { + "expression": { + "arguments": [ + { + "id": 1741, + "name": "usdcAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1699, + "src": "2073:10:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1742, + "name": "ETHEREUM_DESTINATION_DOMAIN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1598, + "src": "2097:27:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 1743, + "name": "mintRecipientBytes32", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1617, + "src": "2138:20:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 1746, + "name": "usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1610, + "src": "2180:4:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + ], + "id": 1745, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2172:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1744, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2172:7:12", + "typeDescriptions": {} + } + }, + "id": 1747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2172:13:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1748, + "name": "DESTINATION_CALLER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1604, + "src": "2199:18:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 1749, + "name": "maxFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1701, + "src": "2231:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1750, + "name": "minFinalityThreshold", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1703, + "src": "2251:20:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "arguments": [ + { + "id": 1753, + "name": "FORWARD_HOOK_DATA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1607, + "src": "2302:17:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 1751, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2285:3:12", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 1752, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2289:12:12", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "2285:16:12", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 1754, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2285:35:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 1738, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1613, + "src": "2022:14:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + }, + "id": 1740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2037:22:12", + "memberName": "depositForBurnWithHook", + "nodeType": "MemberAccess", + "referencedDeclaration": 1898, + "src": "2022:37:12", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint32_$_t_bytes32_$_t_address_$_t_bytes32_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (uint256,uint32,bytes32,address,bytes32,uint256,uint32,bytes memory) external" + } + }, + "id": 1755, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2022:308:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1756, + "nodeType": "ExpressionStatement", + "src": "2022:308:12" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 1762, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1613, + "src": "2367:14:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenMessengerV2_$1899", + "typeString": "contract ITokenMessengerV2" + } + ], + "id": 1761, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2359:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1760, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2359:7:12", + "typeDescriptions": {} + } + }, + "id": 1763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2359:23:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "30", + "id": 1764, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2384:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 1757, + "name": "usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1610, + "src": "2341:4:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$819", + "typeString": "contract IERC20" + } + }, + "id": 1759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2346:12:12", + "memberName": "forceApprove", + "nodeType": "MemberAccess", + "referencedDeclaration": 1095, + "src": "2341:17:12", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$819_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$819_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2341:45:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1766, + "nodeType": "ExpressionStatement", + "src": "2341:45:12" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 1768, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2437:3:12", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2441:6:12", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2437:10:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1770, + "name": "usdcAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1699, + "src": "2461:10:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1771, + "name": "ETHEREUM_DESTINATION_DOMAIN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1598, + "src": "2485:27:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 1772, + "name": "mintRecipientBytes32", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1617, + "src": "2526:20:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 1773, + "name": "DESTINATION_CALLER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1604, + "src": "2560:18:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 1774, + "name": "maxFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1701, + "src": "2592:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1775, + "name": "minFinalityThreshold", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1703, + "src": "2612:20:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 1776, + "name": "FORWARD_HOOK_DATA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1607, + "src": "2646:17:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 1767, + "name": "UsdcSweptAndForwarded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1635, + "src": "2402:21:12", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint32_$_t_bytes32_$returns$__$", + "typeString": "function (address,uint256,uint32,bytes32,bytes32,uint256,uint32,bytes32)" + } + }, + "id": 1777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2402:271:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1778, + "nodeType": "EmitStatement", + "src": "2397:276:12" + } + ] + }, + "functionSelector": "dccf9846", + "id": 1780, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1706, + "kind": "modifierInvocation", + "modifierName": { + "id": 1705, + "name": "nonReentrant", + "nameLocations": ["1791:12:12"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1373, + "src": "1791:12:12" + }, + "nodeType": "ModifierInvocation", + "src": "1791:12:12" + } + ], + "name": "sweepUsdc", + "nameLocation": "1707:9:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1704, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1699, + "mutability": "mutable", + "name": "usdcAmount", + "nameLocation": "1725:10:12", + "nodeType": "VariableDeclaration", + "scope": 1780, + "src": "1717:18:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1698, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1717:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1701, + "mutability": "mutable", + "name": "maxFee", + "nameLocation": "1745:6:12", + "nodeType": "VariableDeclaration", + "scope": 1780, + "src": "1737:14:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1737:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1703, + "mutability": "mutable", + "name": "minFinalityThreshold", + "nameLocation": "1760:20:12", + "nodeType": "VariableDeclaration", + "scope": 1780, + "src": "1753:27:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1702, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1753:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "1716:65:12" + }, + "returnParameters": { + "id": 1707, + "nodeType": "ParameterList", + "parameters": [], + "src": "1804:0:12" + }, + "scope": 1800, + "src": "1698:982:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 1798, + "nodeType": "Block", + "src": "2759:56:12", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 1793, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1782, + "src": "2800:5:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1792, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2792:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint160_$", + "typeString": "type(uint160)" + }, + "typeName": { + "id": 1791, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "2792:7:12", + "typeDescriptions": {} + } + }, + "id": 1794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2792:14:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + ], + "id": 1790, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2784:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 1789, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2784:7:12", + "typeDescriptions": {} + } + }, + "id": 1795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2784:23:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1788, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2776:7:12", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 1787, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2776:7:12", + "typeDescriptions": {} + } + }, + "id": 1796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2776:32:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 1786, + "id": 1797, + "nodeType": "Return", + "src": "2769:39:12" + } + ] + }, + "id": 1799, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addressToBytes32", + "nameLocation": "2695:17:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1783, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1782, + "mutability": "mutable", + "name": "value", + "nameLocation": "2721:5:12", + "nodeType": "VariableDeclaration", + "scope": 1799, + "src": "2713:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1781, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2713:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2712:15:12" + }, + "returnParameters": { + "id": 1786, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1785, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1799, + "src": "2750:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1784, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2750:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2749:9:12" + }, + "scope": 1800, + "src": "2686:129:12", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "nodeType": "ContractDefinition", + "scope": 1801, + "src": "366:2451:12", + "usedErrors": [857, 1350], + "usedEvents": [1635] + } + ], + "nodeType": "SourceUnit", + "src": "32:2786:12" + }, + "id": 12 + }, + "contracts/PerUserCctpSettlementFactory.sol": { + "ast": { + "absolutePath": "contracts/PerUserCctpSettlementFactory.sol", + "exportedSymbols": { + "PerUserCctpSettlement": [1800], + "PerUserCctpSettlementFactory": [1877] + }, + "id": 1878, + "license": "MIT", + "nodes": [ + { + "id": 1802, + "literals": ["solidity", "^", "0.8", ".28"], + "nodeType": "PragmaDirective", + "src": "32:24:13" + }, + { + "absolutePath": "contracts/PerUserCctpSettlement.sol", + "file": "./PerUserCctpSettlement.sol", + "id": 1804, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1878, + "sourceUnit": 1801, + "src": "58:66:13", + "symbolAliases": [ + { + "foreign": { + "id": 1803, + "name": "PerUserCctpSettlement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1800, + "src": "66:21:13", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "PerUserCctpSettlementFactory", + "contractDependencies": [1800], + "contractKind": "contract", + "fullyImplemented": true, + "id": 1877, + "linearizedBaseContracts": [1877], + "name": "PerUserCctpSettlementFactory", + "nameLocation": "135:28:13", + "nodes": [ + { + "constant": false, + "functionSelector": "3e413bee", + "id": 1806, + "mutability": "immutable", + "name": "usdc", + "nameLocation": "195:4:13", + "nodeType": "VariableDeclaration", + "scope": 1877, + "src": "170:29:13", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1805, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "170:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "46117830", + "id": 1808, + "mutability": "immutable", + "name": "tokenMessenger", + "nameLocation": "230:14:13", + "nodeType": "VariableDeclaration", + "scope": 1877, + "src": "205:39:13", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1807, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "205:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "eventSelector": "e2bfc35fa05117daee61105a0b06dde9b00b3f98c90eb430a7d5a05f1dc994d6", + "id": 1814, + "name": "SettlementDeployed", + "nameLocation": "257:18:13", + "nodeType": "EventDefinition", + "parameters": { + "id": 1813, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1810, + "indexed": true, + "mutability": "mutable", + "name": "settlement", + "nameLocation": "301:10:13", + "nodeType": "VariableDeclaration", + "scope": 1814, + "src": "285:26:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1809, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "285:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1812, + "indexed": true, + "mutability": "mutable", + "name": "ethereumMintRecipient", + "nameLocation": "337:21:13", + "nodeType": "VariableDeclaration", + "scope": 1814, + "src": "321:37:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1811, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "321:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "275:89:13" + }, + "src": "251:114:13" + }, + { + "body": { + "id": 1849, + "nodeType": "Block", + "src": "423:195:13", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1827, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1822, + "name": "_usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1816, + "src": "441:5:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 1825, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "458:1:13", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1824, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "450:7:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1823, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "450:7:13", + "typeDescriptions": {} + } + }, + "id": 1826, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "450:10:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "441:19:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642055534443", + "id": 1828, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "462:14:13", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265", + "typeString": "literal_string \"Invalid USDC\"" + }, + "value": "Invalid USDC" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ba768f465dcc9cf85bfad934a639b67d51f8ef9880a66e629b288030ede24265", + "typeString": "literal_string \"Invalid USDC\"" + } + ], + "id": 1821, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "433:7:13", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "433:44:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1830, + "nodeType": "ExpressionStatement", + "src": "433:44:13" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftExpression": { + "id": 1832, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1818, + "src": "495:15:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 1835, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "522:1:13", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1834, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "514:7:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1833, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "514:7:13", + "typeDescriptions": {} + } + }, + "id": 1836, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "514:10:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "495:29:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964206d657373656e676572", + "id": 1838, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "526:19:13", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390", + "typeString": "literal_string \"Invalid messenger\"" + }, + "value": "Invalid messenger" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_025c7201672dd6d61028f32b9279fba1c0c324884457f288df762fa8fa7cf390", + "typeString": "literal_string \"Invalid messenger\"" + } + ], + "id": 1831, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18, -18], + "referencedDeclaration": -18, + "src": "487:7:13", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "487:59:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1840, + "nodeType": "ExpressionStatement", + "src": "487:59:13" + }, + { + "expression": { + "id": 1843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1841, + "name": "usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1806, + "src": "557:4:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1842, + "name": "_usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1816, + "src": "564:5:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "557:12:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1844, + "nodeType": "ExpressionStatement", + "src": "557:12:13" + }, + { + "expression": { + "id": 1847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1845, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1808, + "src": "579:14:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1846, + "name": "_tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1818, + "src": "596:15:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "579:32:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1848, + "nodeType": "ExpressionStatement", + "src": "579:32:13" + } + ] + }, + "id": 1850, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1819, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1816, + "mutability": "mutable", + "name": "_usdc", + "nameLocation": "391:5:13", + "nodeType": "VariableDeclaration", + "scope": 1850, + "src": "383:13:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1815, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "383:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1818, + "mutability": "mutable", + "name": "_tokenMessenger", + "nameLocation": "406:15:13", + "nodeType": "VariableDeclaration", + "scope": 1850, + "src": "398:23:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1817, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "398:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "382:40:13" + }, + "returnParameters": { + "id": 1820, + "nodeType": "ParameterList", + "parameters": [], + "src": "423:0:13" + }, + "scope": 1877, + "src": "371:247:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1875, + "nodeType": "Block", + "src": "719:178:13", + "statements": [ + { + "expression": { + "id": 1868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "leftHandSide": { + "id": 1857, + "name": "settlement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1855, + "src": "729:10:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "lValueRequested": false, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 1863, + "name": "usdc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1806, + "src": "776:4:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1864, + "name": "tokenMessenger", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1808, + "src": "782:14:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1865, + "name": "ethereumMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1852, + "src": "798:21:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1862, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "750:25:13", + "typeDescriptions": { + "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_address_$returns$_t_contract$_PerUserCctpSettlement_$1800_$", + "typeString": "function (address,address,address) returns (contract PerUserCctpSettlement)" + }, + "typeName": { + "id": 1861, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1860, + "name": "PerUserCctpSettlement", + "nameLocations": ["754:21:13"], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1800, + "src": "754:21:13" + }, + "referencedDeclaration": 1800, + "src": "754:21:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_PerUserCctpSettlement_$1800", + "typeString": "contract PerUserCctpSettlement" + } + } + }, + "id": 1866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "750:70:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_PerUserCctpSettlement_$1800", + "typeString": "contract PerUserCctpSettlement" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_PerUserCctpSettlement_$1800", + "typeString": "contract PerUserCctpSettlement" + } + ], + "id": 1859, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "742:7:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1858, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "742:7:13", + "typeDescriptions": {} + } + }, + "id": 1867, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "742:79:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "729:92:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1869, + "nodeType": "ExpressionStatement", + "src": "729:92:13" + }, + { + "eventCall": { + "arguments": [ + { + "id": 1871, + "name": "settlement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1855, + "src": "856:10:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1872, + "name": "ethereumMintRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1852, + "src": "868:21:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1870, + "name": "SettlementDeployed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1814, + "src": "837:18:13", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 1873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "837:53:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1874, + "nodeType": "EmitStatement", + "src": "832:58:13" + } + ] + }, + "functionSelector": "ada7ee88", + "id": 1876, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deploySettlement", + "nameLocation": "633:16:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1853, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1852, + "mutability": "mutable", + "name": "ethereumMintRecipient", + "nameLocation": "658:21:13", + "nodeType": "VariableDeclaration", + "scope": 1876, + "src": "650:29:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1851, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "650:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "649:31:13" + }, + "returnParameters": { + "id": 1856, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1855, + "mutability": "mutable", + "name": "settlement", + "nameLocation": "707:10:13", + "nodeType": "VariableDeclaration", + "scope": 1876, + "src": "699:18:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1854, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "699:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "698:20:13" + }, + "scope": 1877, + "src": "624:273:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "nodeType": "ContractDefinition", + "scope": 1878, + "src": "126:773:13", + "usedErrors": [], + "usedEvents": [1814] + } + ], + "nodeType": "SourceUnit", + "src": "32:868:13" + }, + "id": 13 + } + } + }, + "solcLongVersion": "0.8.28+commit.7893614a", + "solcVersion": "0.8.28" +} diff --git a/contracts/cctp-settlement/ignition/deployments/chain-8453/deployed_addresses.json b/contracts/cctp-settlement/ignition/deployments/chain-8453/deployed_addresses.json new file mode 100644 index 0000000000..beb9983240 --- /dev/null +++ b/contracts/cctp-settlement/ignition/deployments/chain-8453/deployed_addresses.json @@ -0,0 +1,3 @@ +{ + "CctpSettlement#PerUserCctpSettlementFactory": "0x9997e32976CeFc471a99F1588996435e6A8b5596" +} diff --git a/contracts/cctp-settlement/ignition/deployments/chain-8453/journal.jsonl b/contracts/cctp-settlement/ignition/deployments/chain-8453/journal.jsonl new file mode 100644 index 0000000000..0f686cb151 --- /dev/null +++ b/contracts/cctp-settlement/ignition/deployments/chain-8453/journal.jsonl @@ -0,0 +1,8 @@ + +{"chainId":8453,"type":"DEPLOYMENT_INITIALIZE"} +{"artifactId":"CctpSettlement#PerUserCctpSettlementFactory","constructorArgs":["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"],"contractName":"PerUserCctpSettlementFactory","dependencies":[],"from":"0x600c1420374075467f24d2a99498fdd0ea72bfe4","futureId":"CctpSettlement#PerUserCctpSettlementFactory","futureType":"NAMED_ARTIFACT_CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"CctpSettlement#PerUserCctpSettlementFactory","networkInteraction":{"data":"0x60c060405234801561000f575f5ffd5b50604051610ce5380380610ce583398101604081905261002e916100f4565b6001600160a01b0382166100785760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0381166100c25760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b604482015260640161006f565b6001600160a01b039182166080521660a052610125565b80516001600160a01b03811681146100ef575f5ffd5b919050565b5f5f60408385031215610105575f5ffd5b61010e836100d9565b915061011c602084016100d9565b90509250929050565b60805160a051610b956101505f395f8181608b015260df01525f81816048015260be0152610b955ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80633e413bee146100435780634611783014610086578063ada7ee88146100ad575b5f5ffd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b61006a6100bb366004610199565b5f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008360405161010b9061018c565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015610144573d5f5f3e3d5ffd5b509050816001600160a01b0316816001600160a01b03167fe2bfc35fa05117daee61105a0b06dde9b00b3f98c90eb430a7d5a05f1dc994d660405160405180910390a3919050565b610999806101c783390190565b5f602082840312156101a9575f5ffd5b81356001600160a01b03811681146101bf575f5ffd5b939250505056fe610100604052348015610010575f5ffd5b5060405161099938038061099983398101604081905261002f9161016e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03831661009d5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964205553444360a01b60448201526064015b60405180910390fd5b6001600160a01b0382166100e75760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21036b2b9b9b2b733b2b960791b6044820152606401610094565b6001600160a01b0381166101315760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610094565b6001600160a01b0392831660805290821660a0521660c081905260e0526101ae565b80516001600160a01b0381168114610169575f5ffd5b919050565b5f5f5f60608486031215610180575f5ffd5b61018984610153565b925061019760208501610153565b91506101a560408501610153565b90509250925092565b60805160a05160c05160e05161077c61021d5f395f818161016701528181610348015261047701525f608e01525f818160f9015281816102f001528181610317015261044101525f818160d201528181610202015281816102ce01528181610369015261041d015261077c5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063acef1c5711610058578063acef1c5714610130578063c6db9c871461014c578063c74ee95714610162578063dccf984614610189575f5ffd5b806309bdf150146100895780633e413bee146100cd57806346117830146100f457806362cef4b91461011b575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6101225f81565b6040519081526020016100c4565b6101375f81565b60405163ffffffff90911681526020016100c4565b6101226b18d8dd1c0b599bdc9dd85c9960a21b81565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b61019c610197366004610672565b61019e565b005b6101a6610524565b5f83116101eb5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561024f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027391906106b0565b10156102c15760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420555344432062616c616e63650000000000000060448201526064016101e2565b6103156001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610552565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663779b432d845f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f5f1b88886b18d8dd1c0b599bdc9dd85c9960a21b5f1b6040516020016103b191815260200190565b6040516020818303038152906040526040518963ffffffff1660e01b81526004016103e39897969594939291906106c7565b5f604051808303815f87803b1580156103fa575f5ffd5b505af115801561040c573d5f5f3e3d5ffd5b506104669250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690507f00000000000000000000000000000000000000000000000000000000000000005f610552565b604080518481525f602082018190527f00000000000000000000000000000000000000000000000000000000000000008284015260608201526080810184905263ffffffff831660a08201526b18d8dd1c0b599bdc9dd85c9960a21b60c0820152905133917f3f298cacaefadf0a6bfef4dfeeaf3eca0c68d70e5cb8f1b5288e7540a9e95ed6919081900360e00190a261051f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b61052c6105cc565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61055e8383835f610610565b61051f5761056f83835f6001610610565b61059757604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b6105a48383836001610610565b61051f57604051635274afe760e01b81526001600160a01b03841660048201526024016101e2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361060e57604051633ee5aeb560e01b815260040160405180910390fd5b565b60405163095ea7b360e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661066657838315161561065a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f5f5f60608486031215610684575f5ffd5b8335925060208401359150604084013563ffffffff811681146106a5575f5ffd5b809150509250925092565b5f602082840312156106c0575f5ffd5b5051919050565b88815263ffffffff8816602082015286604082015260018060a01b03861660608201528460808201528360a082015263ffffffff831660c082015261010060e08201525f825180610100840152806020850161012085015e5f6101208285010152610120601f19601f830116840101915050999850505050505050505056fea2646970667358221220b76c50a6e2d835a1079f67de279f46d3362268b2a2daa5b5e1a88be179ff8e9164736f6c634300081c0033a264697066735822122028f11a1d2c5b9fe443e13fa13bed25a04fa72f1b95484d50d1d7d416100402bf64736f6c634300081c0033000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda0291300000000000000000000000028b5a0e9c621a5badaa536219b3a228c8168cf5d","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"CctpSettlement#PerUserCctpSettlementFactory","networkInteractionId":1,"nonce":1,"type":"TRANSACTION_PREPARE_SEND"} +{"futureId":"CctpSettlement#PerUserCctpSettlementFactory","networkInteractionId":1,"nonce":1,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"11000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"1000000"}},"hash":"0x2580cc8b4983dfdca2df2c7f703aec7f7812d28c31a8ee9850c7d7f85c36fab9"},"type":"TRANSACTION_SEND"} +{"futureId":"CctpSettlement#PerUserCctpSettlementFactory","hash":"0x2580cc8b4983dfdca2df2c7f703aec7f7812d28c31a8ee9850c7d7f85c36fab9","networkInteractionId":1,"receipt":{"blockHash":"0x046bd46ec6fe1fee5d9b0c9f9ded758f917ca52b5d69a262c968ed0caf5a87d1","blockNumber":47793962,"contractAddress":"0x9997e32976CeFc471a99F1588996435e6A8b5596","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"CctpSettlement#PerUserCctpSettlementFactory","result":{"address":"0x9997e32976CeFc471a99F1588996435e6A8b5596","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} \ No newline at end of file diff --git a/contracts/cctp-settlement/package.json b/contracts/cctp-settlement/package.json index 6dd5cb017d..3f1250e759 100644 --- a/contracts/cctp-settlement/package.json +++ b/contracts/cctp-settlement/package.json @@ -24,6 +24,8 @@ "deploy:settlement:base": "hardhat deploy-settlement --network base", "deploy:settlement:base-sepolia": "hardhat deploy-settlement --network baseSepolia", "node": "hardhat node", + "sweep:base": "hardhat sweep-usdc --network base", + "sweep:base-sepolia": "hardhat sweep-usdc --network baseSepolia", "test": "hardhat test" }, "version": "0.1.0"