@tokamak-network/thanos-contracts
Version:
1 lines • 80 kB
JSON
{"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":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"730:5018:90:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;730:5018:90;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"730:5018:90:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"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\":{\"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"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\":{\"src/tokamak-contracts/USDC/L1/libraries/Address.sol\":{\"keccak256\":\"0x7a2becd0fc138ccd81f63dc85f73aa43ac9e16107b1060dfb9bfcbc46e089060\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9cfc1478aba538118b63dca8c71983d8d522b9ac97b96364ae27dc505b675a3\",\"dweb:/ipfs/QmQJnCRPn61XoPbDtykyGGcXS4YYydmMCxcWDymhBTG6JJ\"]},\"src/tokamak-contracts/USDC/L1/libraries/IERC20.sol\":{\"keccak256\":\"0x32fc81940e398095a082754088b43bcd70dda770a819586abc34fe8b387a42b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e2c83e48dbd6c4576400811d11eccbbe8dd44d652fdbaabab22b6fa1188bba\",\"dweb:/ipfs/QmZkWkDCQGwJH44EN61jov9MY34qg15WYtAvJYvkSJusx4\"]},\"src/tokamak-contracts/USDC/L1/libraries/IERC20Permit.sol\":{\"keccak256\":\"0x38fa29834657581cb1cdb1a18762bf9f730e7f68523d63fb181606f6bea7b173\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d2fa77781be9fa115f4837d80d431761f4af463c3dbd9d5b103a4e2dcf8eee1\",\"dweb:/ipfs/QmSHYchPnZBddirEAa5wnGUgFVnBfq6v9gVJ4wdrtYxsrc\"]},\"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol\":{\"keccak256\":\"0x1b796214de865837b31080bf4286131652925a25e206d11c1b870ea267742bae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e527f3891bbc917742346bb4cc230893bbf68eb925d2f0c70b475f3b901b3dd\",\"dweb:/ipfs/QmNeJTgxQKX7zvRCGYA81SJRMjkxcNEdemFcqpZsWJ4q9s\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"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":{"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol":"SafeERC20"},"evmVersion":"cancun","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"src/tokamak-contracts/USDC/L1/libraries/Address.sol":{"keccak256":"0x7a2becd0fc138ccd81f63dc85f73aa43ac9e16107b1060dfb9bfcbc46e089060","urls":["bzz-raw://a9cfc1478aba538118b63dca8c71983d8d522b9ac97b96364ae27dc505b675a3","dweb:/ipfs/QmQJnCRPn61XoPbDtykyGGcXS4YYydmMCxcWDymhBTG6JJ"],"license":"MIT"},"src/tokamak-contracts/USDC/L1/libraries/IERC20.sol":{"keccak256":"0x32fc81940e398095a082754088b43bcd70dda770a819586abc34fe8b387a42b4","urls":["bzz-raw://59e2c83e48dbd6c4576400811d11eccbbe8dd44d652fdbaabab22b6fa1188bba","dweb:/ipfs/QmZkWkDCQGwJH44EN61jov9MY34qg15WYtAvJYvkSJusx4"],"license":"MIT"},"src/tokamak-contracts/USDC/L1/libraries/IERC20Permit.sol":{"keccak256":"0x38fa29834657581cb1cdb1a18762bf9f730e7f68523d63fb181606f6bea7b173","urls":["bzz-raw://4d2fa77781be9fa115f4837d80d431761f4af463c3dbd9d5b103a4e2dcf8eee1","dweb:/ipfs/QmSHYchPnZBddirEAa5wnGUgFVnBfq6v9gVJ4wdrtYxsrc"],"license":"MIT"},"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol":{"keccak256":"0x1b796214de865837b31080bf4286131652925a25e206d11c1b870ea267742bae","urls":["bzz-raw://1e527f3891bbc917742346bb4cc230893bbf68eb925d2f0c70b475f3b901b3dd","dweb:/ipfs/QmNeJTgxQKX7zvRCGYA81SJRMjkxcNEdemFcqpZsWJ4q9s"],"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":"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol","id":60073,"exportedSymbols":{"Address":[59281],"IERC20":[59710],"IERC20Permit":[59746],"SafeERC20":[60072]},"nodeType":"SourceUnit","src":"115:5634:90","nodes":[{"id":59784,"nodeType":"PragmaDirective","src":"115:23:90","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":59786,"nodeType":"ImportDirective","src":"140:38:90","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/IERC20.sol","file":"./IERC20.sol","nameLocation":"-1:-1:-1","scope":60073,"sourceUnit":59711,"symbolAliases":[{"foreign":{"id":59785,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59710,"src":"149:6:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":59788,"nodeType":"ImportDirective","src":"179:50:90","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/IERC20Permit.sol","file":"./IERC20Permit.sol","nameLocation":"-1:-1:-1","scope":60073,"sourceUnit":59747,"symbolAliases":[{"foreign":{"id":59787,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59746,"src":"188:12:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":59790,"nodeType":"ImportDirective","src":"230:40:90","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/Address.sol","file":"./Address.sol","nameLocation":"-1:-1:-1","scope":60073,"sourceUnit":59282,"symbolAliases":[{"foreign":{"id":59789,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59281,"src":"239:7:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60072,"nodeType":"ContractDefinition","src":"730:5018:90","nodes":[{"id":59794,"nodeType":"UsingForDirective","src":"754:26:90","nodes":[],"global":false,"libraryName":{"id":59792,"name":"Address","nameLocations":["760:7:90"],"nodeType":"IdentifierPath","referencedDeclaration":59281,"src":"760:7:90"},"typeName":{"id":59793,"name":"address","nodeType":"ElementaryTypeName","src":"772:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":59799,"nodeType":"ErrorDefinition","src":"855:46:90","nodes":[],"documentation":{"id":59795,"nodeType":"StructuredDocumentation","src":"786:64:90","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","name":"SafeERC20FailedOperation","nameLocation":"861:24:90","parameters":{"id":59798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59797,"mutability":"mutable","name":"token","nameLocation":"894:5:90","nodeType":"VariableDeclaration","scope":59799,"src":"886:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59796,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"885:15:90"}},{"id":59808,"nodeType":"ErrorDefinition","src":"983:109:90","nodes":[],"documentation":{"id":59800,"nodeType":"StructuredDocumentation","src":"907:71:90","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","name":"SafeERC20FailedDecreaseAllowance","nameLocation":"989:32:90","parameters":{"id":59807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59802,"mutability":"mutable","name":"spender","nameLocation":"1030:7:90","nodeType":"VariableDeclaration","scope":59808,"src":"1022:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59801,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59804,"mutability":"mutable","name":"currentAllowance","nameLocation":"1047:16:90","nodeType":"VariableDeclaration","scope":59808,"src":"1039:24:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59803,"name":"uint256","nodeType":"ElementaryTypeName","src":"1039:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59806,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1073:17:90","nodeType":"VariableDeclaration","scope":59808,"src":"1065:25:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59805,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1021:70:90"}},{"id":59832,"nodeType":"FunctionDefinition","src":"1282:160:90","nodes":[],"body":{"id":59831,"nodeType":"Block","src":"1354:88:90","nodes":[],"statements":[{"expression":{"arguments":[{"id":59820,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59812,"src":"1384:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":59823,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59812,"src":"1406:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1412:8:90","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":59677,"src":"1406:14:90","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":59825,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59814,"src":"1423:2:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59816,"src":"1427:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":59827,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1422:11:90","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":59821,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1391:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1395:10:90","memberName":"encodeCall","nodeType":"MemberAccess","src":"1391:14:90","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1391:43:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59819,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60022,"src":"1364:19:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":59829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1364:71:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59830,"nodeType":"ExpressionStatement","src":"1364:71:90"}]},"documentation":{"id":59809,"nodeType":"StructuredDocumentation","src":"1098:179:90","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":"1291:12:90","parameters":{"id":59817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59812,"mutability":"mutable","name":"token","nameLocation":"1311:5:90","nodeType":"VariableDeclaration","scope":59832,"src":"1304:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59811,"nodeType":"UserDefinedTypeName","pathNode":{"id":59810,"name":"IERC20","nameLocations":["1304:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"1304:6:90"},"referencedDeclaration":59710,"src":"1304:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59814,"mutability":"mutable","name":"to","nameLocation":"1326:2:90","nodeType":"VariableDeclaration","scope":59832,"src":"1318:10:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59813,"name":"address","nodeType":"ElementaryTypeName","src":"1318:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59816,"mutability":"mutable","name":"value","nameLocation":"1338:5:90","nodeType":"VariableDeclaration","scope":59832,"src":"1330:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59815,"name":"uint256","nodeType":"ElementaryTypeName","src":"1330:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1303:41:90"},"returnParameters":{"id":59818,"nodeType":"ParameterList","parameters":[],"src":"1354:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59859,"nodeType":"FunctionDefinition","src":"1681:188:90","nodes":[],"body":{"id":59858,"nodeType":"Block","src":"1771:98:90","nodes":[],"statements":[{"expression":{"arguments":[{"id":59846,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59836,"src":"1801:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":59849,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59836,"src":"1823:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1829:12:90","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":59709,"src":"1823:18:90","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":59851,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59838,"src":"1844:4:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59852,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59840,"src":"1850:2:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59853,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59842,"src":"1854:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":59854,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1843:17:90","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":59847,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1808:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1812:10:90","memberName":"encodeCall","nodeType":"MemberAccess","src":"1808:14:90","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1808:53:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59845,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60022,"src":"1781:19:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":59856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1781:81:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59857,"nodeType":"ExpressionStatement","src":"1781:81:90"}]},"documentation":{"id":59833,"nodeType":"StructuredDocumentation","src":"1448:228:90","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":"1690:16:90","parameters":{"id":59843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59836,"mutability":"mutable","name":"token","nameLocation":"1714:5:90","nodeType":"VariableDeclaration","scope":59859,"src":"1707:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59835,"nodeType":"UserDefinedTypeName","pathNode":{"id":59834,"name":"IERC20","nameLocations":["1707:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"1707:6:90"},"referencedDeclaration":59710,"src":"1707:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59838,"mutability":"mutable","name":"from","nameLocation":"1729:4:90","nodeType":"VariableDeclaration","scope":59859,"src":"1721:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59837,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59840,"mutability":"mutable","name":"to","nameLocation":"1743:2:90","nodeType":"VariableDeclaration","scope":59859,"src":"1735:10:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59839,"name":"address","nodeType":"ElementaryTypeName","src":"1735:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59842,"mutability":"mutable","name":"value","nameLocation":"1755:5:90","nodeType":"VariableDeclaration","scope":59859,"src":"1747:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59841,"name":"uint256","nodeType":"ElementaryTypeName","src":"1747:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1706:55:90"},"returnParameters":{"id":59844,"nodeType":"ParameterList","parameters":[],"src":"1771:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59890,"nodeType":"FunctionDefinition","src":"2060:225:90","nodes":[],"body":{"id":59889,"nodeType":"Block","src":"2146:139:90","nodes":[],"statements":[{"assignments":[59871],"declarations":[{"constant":false,"id":59871,"mutability":"mutable","name":"oldAllowance","nameLocation":"2164:12:90","nodeType":"VariableDeclaration","scope":59889,"src":"2156:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59870,"name":"uint256","nodeType":"ElementaryTypeName","src":"2156:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59880,"initialValue":{"arguments":[{"arguments":[{"id":59876,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2203:4:90","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}],"id":59875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2195:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59874,"name":"address","nodeType":"ElementaryTypeName","src":"2195:7:90","typeDescriptions":{}}},"id":59877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2195:13:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59878,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59865,"src":"2210:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59872,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59863,"src":"2179:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2185:9:90","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":59687,"src":"2179:15:90","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":59879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2179:39:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2156:62:90"},{"expression":{"arguments":[{"id":59882,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59863,"src":"2241:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"id":59883,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59865,"src":"2248:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59884,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59871,"src":"2257:12:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":59885,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59867,"src":"2272:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2257:20:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59881,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59980,"src":"2228:12:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":59887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2228:50:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59888,"nodeType":"ExpressionStatement","src":"2228:50:90"}]},"documentation":{"id":59860,"nodeType":"StructuredDocumentation","src":"1875:180:90","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":"2069:21:90","parameters":{"id":59868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59863,"mutability":"mutable","name":"token","nameLocation":"2098:5:90","nodeType":"VariableDeclaration","scope":59890,"src":"2091:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59862,"nodeType":"UserDefinedTypeName","pathNode":{"id":59861,"name":"IERC20","nameLocations":["2091:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"2091:6:90"},"referencedDeclaration":59710,"src":"2091:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59865,"mutability":"mutable","name":"spender","nameLocation":"2113:7:90","nodeType":"VariableDeclaration","scope":59890,"src":"2105:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59864,"name":"address","nodeType":"ElementaryTypeName","src":"2105:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59867,"mutability":"mutable","name":"value","nameLocation":"2130:5:90","nodeType":"VariableDeclaration","scope":59890,"src":"2122:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59866,"name":"uint256","nodeType":"ElementaryTypeName","src":"2122:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2090:46:90"},"returnParameters":{"id":59869,"nodeType":"ParameterList","parameters":[],"src":"2146:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59933,"nodeType":"FunctionDefinition","src":"2488:468:90","nodes":[],"body":{"id":59932,"nodeType":"Block","src":"2586:370:90","nodes":[],"statements":[{"id":59931,"nodeType":"UncheckedBlock","src":"2596:354:90","statements":[{"assignments":[59902],"declarations":[{"constant":false,"id":59902,"mutability":"mutable","name":"currentAllowance","nameLocation":"2628:16:90","nodeType":"VariableDeclaration","scope":59931,"src":"2620:24:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59901,"name":"uint256","nodeType":"ElementaryTypeName","src":"2620:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59911,"initialValue":{"arguments":[{"arguments":[{"id":59907,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2671:4:90","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}],"id":59906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2663:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59905,"name":"address","nodeType":"ElementaryTypeName","src":"2663:7:90","typeDescriptions":{}}},"id":59908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2663:13:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59909,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59896,"src":"2678:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59903,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59894,"src":"2647:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2653:9:90","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":59687,"src":"2647:15:90","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":59910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2647:39:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2620:66:90"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59912,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59902,"src":"2704:16:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":59913,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59898,"src":"2723:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2704:36:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59922,"nodeType":"IfStatement","src":"2700:160:90","trueBody":{"id":59921,"nodeType":"Block","src":"2742:118:90","statements":[{"errorCall":{"arguments":[{"id":59916,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59896,"src":"2800:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59917,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59902,"src":"2809:16:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59918,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59898,"src":"2827:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59915,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59808,"src":"2767:32:90","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":59919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2767:78:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":59920,"nodeType":"RevertStatement","src":"2760:85:90"}]}},{"expression":{"arguments":[{"id":59924,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59894,"src":"2886:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"id":59925,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59896,"src":"2893:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59926,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59902,"src":"2902:16:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":59927,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59898,"src":"2921:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2902:36:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59923,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59980,"src":"2873:12:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":59929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2873:66:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59930,"nodeType":"ExpressionStatement","src":"2873:66:90"}]}]},"documentation":{"id":59891,"nodeType":"StructuredDocumentation","src":"2291:192:90","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":"2497:21:90","parameters":{"id":59899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59894,"mutability":"mutable","name":"token","nameLocation":"2526:5:90","nodeType":"VariableDeclaration","scope":59933,"src":"2519:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59893,"nodeType":"UserDefinedTypeName","pathNode":{"id":59892,"name":"IERC20","nameLocations":["2519:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"2519:6:90"},"referencedDeclaration":59710,"src":"2519:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59896,"mutability":"mutable","name":"spender","nameLocation":"2541:7:90","nodeType":"VariableDeclaration","scope":59933,"src":"2533:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59895,"name":"address","nodeType":"ElementaryTypeName","src":"2533:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59898,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2558:17:90","nodeType":"VariableDeclaration","scope":59933,"src":"2550:25:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59897,"name":"uint256","nodeType":"ElementaryTypeName","src":"2550:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2518:58:90"},"returnParameters":{"id":59900,"nodeType":"ParameterList","parameters":[],"src":"2586:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59980,"nodeType":"FunctionDefinition","src":"3275:380:90","nodes":[],"body":{"id":59979,"nodeType":"Block","src":"3352:303:90","nodes":[],"statements":[{"assignments":[59945],"declarations":[{"constant":false,"id":59945,"mutability":"mutable","name":"approvalCall","nameLocation":"3375:12:90","nodeType":"VariableDeclaration","scope":59979,"src":"3362:25:90","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":59944,"name":"bytes","nodeType":"ElementaryTypeName","src":"3362:5:90","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":59954,"initialValue":{"arguments":[{"expression":{"id":59948,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3405:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3411:7:90","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":59697,"src":"3405:13:90","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":59950,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59939,"src":"3421:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59951,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59941,"src":"3430:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":59952,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3420:16:90","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":59946,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3390:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3394:10:90","memberName":"encodeCall","nodeType":"MemberAccess","src":"3390:14:90","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3390:47:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3362:75:90"},{"condition":{"id":59959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3452:45:90","subExpression":{"arguments":[{"id":59956,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3477:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"id":59957,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59945,"src":"3484:12:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59955,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60071,"src":"3453:23:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":59958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3453:44:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59978,"nodeType":"IfStatement","src":"3448:201:90","trueBody":{"id":59977,"nodeType":"Block","src":"3499:150:90","statements":[{"expression":{"arguments":[{"id":59961,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3533:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":59964,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3555:5:90","typeDescriptions":{"ty