{"abi":[{"type":"error","name":"SafeERC20FailedDecreaseAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"currentAllowance","type":"uint256","internalType":"uint256"},{"name":"requestedDecrease","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"751:5018:37:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;751:5018:37;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"751:5018:37:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"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 ERC20 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 ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"shanghai\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts_v5.0.1/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"type":"error","name":"SafeERC20FailedDecreaseAllowance"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol":"SafeERC20"},"evmVersion":"shanghai","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts_v5.0.1/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user"},"devdoc":{"version":1,"kind":"dev","details":"Wrappers around ERC20 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 ERC20 token failed."}]},"title":"SafeERC20"},"ast":{"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/utils/SafeERC20.sol","id":48446,"exportedSymbols":{"Address":[48698],"IERC20":[48119],"IERC20Permit":[48155],"SafeERC20":[48445]},"nodeType":"SourceUnit","src":"115:5655:37","nodes":[{"id":48157,"nodeType":"PragmaDirective","src":"115:24:37","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":48159,"nodeType":"ImportDirective","src":"141:37:37","nodes":[],"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","nameLocation":"-1:-1:-1","scope":48446,"sourceUnit":48120,"symbolAliases":[{"foreign":{"id":48158,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48119,"src":"149:6:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":48161,"nodeType":"ImportDirective","src":"179:60:37","nodes":[],"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","nameLocation":"-1:-1:-1","scope":48446,"sourceUnit":48156,"symbolAliases":[{"foreign":{"id":48160,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48155,"src":"187:12:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":48163,"nodeType":"ImportDirective","src":"240:51:37","nodes":[],"absolutePath":"lib/openzeppelin-contracts_v5.0.1/contracts/utils/Address.sol","file":"../../../utils/Address.sol","nameLocation":"-1:-1:-1","scope":48446,"sourceUnit":48699,"symbolAliases":[{"foreign":{"id":48162,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48698,"src":"248:7:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":48445,"nodeType":"ContractDefinition","src":"751:5018:37","nodes":[{"id":48167,"nodeType":"UsingForDirective","src":"775:26:37","nodes":[],"global":false,"libraryName":{"id":48165,"name":"Address","nameLocations":["781:7:37"],"nodeType":"IdentifierPath","referencedDeclaration":48698,"src":"781:7:37"},"typeName":{"id":48166,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":48172,"nodeType":"ErrorDefinition","src":"876:46:37","nodes":[],"documentation":{"id":48168,"nodeType":"StructuredDocumentation","src":"807:64:37","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","name":"SafeERC20FailedOperation","nameLocation":"882:24:37","parameters":{"id":48171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48170,"mutability":"mutable","name":"token","nameLocation":"915:5:37","nodeType":"VariableDeclaration","scope":48172,"src":"907:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48169,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:37"}},{"id":48181,"nodeType":"ErrorDefinition","src":"1004:109:37","nodes":[],"documentation":{"id":48173,"nodeType":"StructuredDocumentation","src":"928:71:37","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:37","parameters":{"id":48180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48175,"mutability":"mutable","name":"spender","nameLocation":"1051:7:37","nodeType":"VariableDeclaration","scope":48181,"src":"1043:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48174,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48177,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:37","nodeType":"VariableDeclaration","scope":48181,"src":"1060:24:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48176,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48179,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:37","nodeType":"VariableDeclaration","scope":48181,"src":"1086:25:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48178,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:37"}},{"id":48205,"nodeType":"FunctionDefinition","src":"1303:160:37","nodes":[],"body":{"id":48204,"nodeType":"Block","src":"1375:88:37","nodes":[],"statements":[{"expression":{"arguments":[{"id":48193,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48185,"src":"1405:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":48196,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48185,"src":"1427:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:37","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":48086,"src":"1427:14:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":48198,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48187,"src":"1444:2:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48189,"src":"1448:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":48200,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":48194,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48195,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48192,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48395,"src":"1385:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":48202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48203,"nodeType":"ExpressionStatement","src":"1385:71:37"}]},"documentation":{"id":48182,"nodeType":"StructuredDocumentation","src":"1119:179:37","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:37","parameters":{"id":48190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48185,"mutability":"mutable","name":"token","nameLocation":"1332:5:37","nodeType":"VariableDeclaration","scope":48205,"src":"1325:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48184,"nodeType":"UserDefinedTypeName","pathNode":{"id":48183,"name":"IERC20","nameLocations":["1325:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"1325:6:37"},"referencedDeclaration":48119,"src":"1325:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48187,"mutability":"mutable","name":"to","nameLocation":"1347:2:37","nodeType":"VariableDeclaration","scope":48205,"src":"1339:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48186,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48189,"mutability":"mutable","name":"value","nameLocation":"1359:5:37","nodeType":"VariableDeclaration","scope":48205,"src":"1351:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48188,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:37"},"returnParameters":{"id":48191,"nodeType":"ParameterList","parameters":[],"src":"1375:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48232,"nodeType":"FunctionDefinition","src":"1702:188:37","nodes":[],"body":{"id":48231,"nodeType":"Block","src":"1792:98:37","nodes":[],"statements":[{"expression":{"arguments":[{"id":48219,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48209,"src":"1822:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":48222,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48209,"src":"1844:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:37","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48118,"src":"1844:18:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":48224,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48211,"src":"1865:4:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48225,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48213,"src":"1871:2:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48226,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48215,"src":"1875:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":48227,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":48220,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48221,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48218,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48395,"src":"1802:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":48229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48230,"nodeType":"ExpressionStatement","src":"1802:81:37"}]},"documentation":{"id":48206,"nodeType":"StructuredDocumentation","src":"1469:228:37","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:37","parameters":{"id":48216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48209,"mutability":"mutable","name":"token","nameLocation":"1735:5:37","nodeType":"VariableDeclaration","scope":48232,"src":"1728:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48208,"nodeType":"UserDefinedTypeName","pathNode":{"id":48207,"name":"IERC20","nameLocations":["1728:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"1728:6:37"},"referencedDeclaration":48119,"src":"1728:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48211,"mutability":"mutable","name":"from","nameLocation":"1750:4:37","nodeType":"VariableDeclaration","scope":48232,"src":"1742:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48210,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48213,"mutability":"mutable","name":"to","nameLocation":"1764:2:37","nodeType":"VariableDeclaration","scope":48232,"src":"1756:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48212,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48215,"mutability":"mutable","name":"value","nameLocation":"1776:5:37","nodeType":"VariableDeclaration","scope":48232,"src":"1768:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48214,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:37"},"returnParameters":{"id":48217,"nodeType":"ParameterList","parameters":[],"src":"1792:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48263,"nodeType":"FunctionDefinition","src":"2081:225:37","nodes":[],"body":{"id":48262,"nodeType":"Block","src":"2167:139:37","nodes":[],"statements":[{"assignments":[48244],"declarations":[{"constant":false,"id":48244,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:37","nodeType":"VariableDeclaration","scope":48262,"src":"2177:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48253,"initialValue":{"arguments":[{"arguments":[{"id":48249,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:37","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}],"id":48248,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48247,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:37","typeDescriptions":{}}},"id":48250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48251,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48238,"src":"2231:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":48245,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48236,"src":"2200:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:37","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":48096,"src":"2200:15:37","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":48252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:37"},{"expression":{"arguments":[{"id":48255,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48236,"src":"2262:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"id":48256,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48238,"src":"2269:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48257,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48244,"src":"2278:12:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":48258,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48240,"src":"2293:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":48254,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48353,"src":"2249:12:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":48260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48261,"nodeType":"ExpressionStatement","src":"2249:50:37"}]},"documentation":{"id":48233,"nodeType":"StructuredDocumentation","src":"1896:180:37","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:37","parameters":{"id":48241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48236,"mutability":"mutable","name":"token","nameLocation":"2119:5:37","nodeType":"VariableDeclaration","scope":48263,"src":"2112:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48235,"nodeType":"UserDefinedTypeName","pathNode":{"id":48234,"name":"IERC20","nameLocations":["2112:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"2112:6:37"},"referencedDeclaration":48119,"src":"2112:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48238,"mutability":"mutable","name":"spender","nameLocation":"2134:7:37","nodeType":"VariableDeclaration","scope":48263,"src":"2126:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48237,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48240,"mutability":"mutable","name":"value","nameLocation":"2151:5:37","nodeType":"VariableDeclaration","scope":48263,"src":"2143:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48239,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:37"},"returnParameters":{"id":48242,"nodeType":"ParameterList","parameters":[],"src":"2167:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48306,"nodeType":"FunctionDefinition","src":"2509:468:37","nodes":[],"body":{"id":48305,"nodeType":"Block","src":"2607:370:37","nodes":[],"statements":[{"id":48304,"nodeType":"UncheckedBlock","src":"2617:354:37","statements":[{"assignments":[48275],"declarations":[{"constant":false,"id":48275,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:37","nodeType":"VariableDeclaration","scope":48304,"src":"2641:24:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48274,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48284,"initialValue":{"arguments":[{"arguments":[{"id":48280,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:37","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$48445","typeString":"library SafeERC20"}],"id":48279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48278,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:37","typeDescriptions":{}}},"id":48281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48282,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48269,"src":"2699:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":48276,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48267,"src":"2668:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:37","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":48096,"src":"2668:15:37","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":48283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:37"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48285,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48275,"src":"2725:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":48286,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48271,"src":"2744:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48295,"nodeType":"IfStatement","src":"2721:160:37","trueBody":{"id":48294,"nodeType":"Block","src":"2763:118:37","statements":[{"errorCall":{"arguments":[{"id":48289,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48269,"src":"2821:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48290,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48275,"src":"2830:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48291,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48271,"src":"2848:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":48288,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48181,"src":"2788:32:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) pure"}},"id":48292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48293,"nodeType":"RevertStatement","src":"2781:85:37"}]}},{"expression":{"arguments":[{"id":48297,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48267,"src":"2907:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"id":48298,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48269,"src":"2914:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48299,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48275,"src":"2923:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":48300,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48271,"src":"2942:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":48296,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48353,"src":"2894:12:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":48302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48303,"nodeType":"ExpressionStatement","src":"2894:66:37"}]}]},"documentation":{"id":48264,"nodeType":"StructuredDocumentation","src":"2312:192:37","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:37","parameters":{"id":48272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48267,"mutability":"mutable","name":"token","nameLocation":"2547:5:37","nodeType":"VariableDeclaration","scope":48306,"src":"2540:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48266,"nodeType":"UserDefinedTypeName","pathNode":{"id":48265,"name":"IERC20","nameLocations":["2540:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"2540:6:37"},"referencedDeclaration":48119,"src":"2540:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48269,"mutability":"mutable","name":"spender","nameLocation":"2562:7:37","nodeType":"VariableDeclaration","scope":48306,"src":"2554:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48268,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48271,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:37","nodeType":"VariableDeclaration","scope":48306,"src":"2571:25:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48270,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:37"},"returnParameters":{"id":48273,"nodeType":"ParameterList","parameters":[],"src":"2607:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48353,"nodeType":"FunctionDefinition","src":"3296:380:37","nodes":[],"body":{"id":48352,"nodeType":"Block","src":"3373:303:37","nodes":[],"statements":[{"assignments":[48318],"declarations":[{"constant":false,"id":48318,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:37","nodeType":"VariableDeclaration","scope":48352,"src":"3383:25:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48317,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":48327,"initialValue":{"arguments":[{"expression":{"id":48321,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"3426:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:37","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":48106,"src":"3426:13:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":48323,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48312,"src":"3442:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":48324,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48314,"src":"3451:5:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":48325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":48319,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:37"},{"condition":{"id":48332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:37","subExpression":{"arguments":[{"id":48329,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"3498:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"id":48330,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48318,"src":"3505:12:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48328,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48444,"src":"3474:23:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":48331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48351,"nodeType":"IfStatement","src":"3469:201:37","trueBody":{"id":48350,"nodeType":"Block","src":"3520:150:37","statements":[{"expression":{"arguments":[{"id":48334,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"3554:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":48337,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"3576:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"id":48338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:37","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":48106,"src":"3576:13:37","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":48339,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48312,"src":"3592:7:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":48340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":48341,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:37","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":48335,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48336,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:37","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48333,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48395,"src":"3534:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":48343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48344,"nodeType":"ExpressionStatement","src":"3534:71:37"},{"expression":{"arguments":[{"id":48346,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48310,"src":"3639:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},{"id":48347,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48318,"src":"3646:12:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48345,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48395,"src":"3619:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$48119_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":48348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48349,"nodeType":"ExpressionStatement","src":"3619:40:37"}]}}]},"documentation":{"id":48307,"nodeType":"StructuredDocumentation","src":"2983:308:37","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."},"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:37","parameters":{"id":48315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48310,"mutability":"mutable","name":"token","nameLocation":"3325:5:37","nodeType":"VariableDeclaration","scope":48353,"src":"3318:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48309,"nodeType":"UserDefinedTypeName","pathNode":{"id":48308,"name":"IERC20","nameLocations":["3318:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"3318:6:37"},"referencedDeclaration":48119,"src":"3318:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48312,"mutability":"mutable","name":"spender","nameLocation":"3340:7:37","nodeType":"VariableDeclaration","scope":48353,"src":"3332:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48311,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48314,"mutability":"mutable","name":"value","nameLocation":"3357:5:37","nodeType":"VariableDeclaration","scope":48353,"src":"3349:13:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48313,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:37"},"returnParameters":{"id":48316,"nodeType":"ParameterList","parameters":[],"src":"3373:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":48395,"nodeType":"FunctionDefinition","src":"4059:629:37","nodes":[],"body":{"id":48394,"nodeType":"Block","src":"4129:559:37","nodes":[],"statements":[{"assignments":[48363],"declarations":[{"constant":false,"id":48363,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:37","nodeType":"VariableDeclaration","scope":48394,"src":"4478:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48362,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":48371,"initialValue":{"arguments":[{"id":48369,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48359,"src":"4532:4:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":48366,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48357,"src":"4512:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}],"id":48365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48364,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:37","typeDescriptions":{}}},"id":48367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:37","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":48519,"src":"4504:27:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":48370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:37"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":48384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":48372,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48363,"src":"4551:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":48373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:37","memberName":"length","nodeType":"MemberAccess","src":"4551:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":48374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":48383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:37","subExpression":{"arguments":[{"id":48378,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48363,"src":"4589:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":48380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":48379,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:37","typeDescriptions":{}}}],"id":48381,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":48376,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:37","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:37","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":48382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48393,"nodeType":"IfStatement","src":"4547:135:37","trueBody":{"id":48392,"nodeType":"Block","src":"4610:72:37","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":48388,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48357,"src":"4664:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}],"id":48387,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48386,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:37","typeDescriptions":{}}},"id":48389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":48385,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48172,"src":"4631:24:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":48390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48391,"nodeType":"RevertStatement","src":"4624:47:37"}]}}]},"documentation":{"id":48354,"nodeType":"StructuredDocumentation","src":"3682:372:37","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return 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 data The call data (encoded using abi.encode or one of its variants)."},"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:37","parameters":{"id":48360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48357,"mutability":"mutable","name":"token","nameLocation":"4095:5:37","nodeType":"VariableDeclaration","scope":48395,"src":"4088:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48356,"nodeType":"UserDefinedTypeName","pathNode":{"id":48355,"name":"IERC20","nameLocations":["4088:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"4088:6:37"},"referencedDeclaration":48119,"src":"4088:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48359,"mutability":"mutable","name":"data","nameLocation":"4115:4:37","nodeType":"VariableDeclaration","scope":48395,"src":"4102:17:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48358,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:37"},"returnParameters":{"id":48361,"nodeType":"ParameterList","parameters":[],"src":"4129:0:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":48444,"nodeType":"FunctionDefinition","src":"5189:578:37","nodes":[],"body":{"id":48443,"nodeType":"Block","src":"5278:489:37","nodes":[],"statements":[{"assignments":[48407,48409],"declarations":[{"constant":false,"id":48407,"mutability":"mutable","name":"success","nameLocation":"5579:7:37","nodeType":"VariableDeclaration","scope":48443,"src":"5574:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48406,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":48409,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:37","nodeType":"VariableDeclaration","scope":48443,"src":"5588:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48408,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":48417,"initialValue":{"arguments":[{"id":48415,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48401,"src":"5635:4:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":48412,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48399,"src":"5623:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}],"id":48411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48410,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:37","typeDescriptions":{}}},"id":48413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:37","memberName":"call","nodeType":"MemberAccess","src":"5615:19:37","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":48416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:37"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":48441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":48432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48418,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48407,"src":"5657:7:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":48430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":48419,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48409,"src":"5669:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":48420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:37","memberName":"length","nodeType":"MemberAccess","src":"5669:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":48421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":48425,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48409,"src":"5706:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":48427,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":48426,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:37","typeDescriptions":{}}}],"id":48428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":48423,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:37","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:37","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":48429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":48431,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":48435,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48399,"src":"5738:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}],"id":48434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48433,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:37","typeDescriptions":{}}},"id":48436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:37","memberName":"code","nodeType":"MemberAccess","src":"5730:19:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":48438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:37","memberName":"length","nodeType":"MemberAccess","src":"5730:26:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":48439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":48405,"id":48442,"nodeType":"Return","src":"5650:110:37"}]},"documentation":{"id":48396,"nodeType":"StructuredDocumentation","src":"4694:490:37","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return 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 data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:37","parameters":{"id":48402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48399,"mutability":"mutable","name":"token","nameLocation":"5229:5:37","nodeType":"VariableDeclaration","scope":48444,"src":"5222:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"},"typeName":{"id":48398,"nodeType":"UserDefinedTypeName","pathNode":{"id":48397,"name":"IERC20","nameLocations":["5222:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":48119,"src":"5222:6:37"},"referencedDeclaration":48119,"src":"5222:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$48119","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":48401,"mutability":"mutable","name":"data","nameLocation":"5249:4:37","nodeType":"VariableDeclaration","scope":48444,"src":"5236:17:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48400,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:37"},"returnParameters":{"id":48405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48444,"src":"5272:4:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48403,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:37"},"scope":48445,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":48164,"nodeType":"StructuredDocumentation","src":"293:457:37","text":" @title SafeERC20\n @dev Wrappers around ERC20 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,"linearizedBaseContracts":[48445],"name":"SafeERC20","nameLocation":"759:9:37","scope":48446,"usedErrors":[48172,48181],"usedEvents":[]}],"license":"MIT"},"id":37}