{"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":"0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300080f000a","sourceMap":"730:5018:260:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;730:5018:260;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300080f000a","sourceMap":"730:5018:260:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"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\":\"london\",\"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.15+commit.e14f2714"},"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":"london","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":120239,"exportedSymbols":{"Address":[119447],"IERC20":[119876],"IERC20Permit":[119912],"SafeERC20":[120238]},"nodeType":"SourceUnit","src":"115:5634:260","nodes":[{"id":119950,"nodeType":"PragmaDirective","src":"115:23:260","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":119952,"nodeType":"ImportDirective","src":"140:38:260","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/IERC20.sol","file":"./IERC20.sol","nameLocation":"-1:-1:-1","scope":120239,"sourceUnit":119877,"symbolAliases":[{"foreign":{"id":119951,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119876,"src":"149:6:260","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":119954,"nodeType":"ImportDirective","src":"179:50:260","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/IERC20Permit.sol","file":"./IERC20Permit.sol","nameLocation":"-1:-1:-1","scope":120239,"sourceUnit":119913,"symbolAliases":[{"foreign":{"id":119953,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119912,"src":"188:12:260","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":119956,"nodeType":"ImportDirective","src":"230:40:260","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/Address.sol","file":"./Address.sol","nameLocation":"-1:-1:-1","scope":120239,"sourceUnit":119448,"symbolAliases":[{"foreign":{"id":119955,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119447,"src":"239:7:260","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":120238,"nodeType":"ContractDefinition","src":"730:5018:260","nodes":[{"id":119960,"nodeType":"UsingForDirective","src":"754:26:260","nodes":[],"global":false,"libraryName":{"id":119958,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":119447,"src":"760:7:260"},"typeName":{"id":119959,"name":"address","nodeType":"ElementaryTypeName","src":"772:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":119965,"nodeType":"ErrorDefinition","src":"855:46:260","nodes":[],"documentation":{"id":119961,"nodeType":"StructuredDocumentation","src":"786:64:260","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","name":"SafeERC20FailedOperation","nameLocation":"861:24:260","parameters":{"id":119964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":119963,"mutability":"mutable","name":"token","nameLocation":"894:5:260","nodeType":"VariableDeclaration","scope":119965,"src":"886:13:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":119962,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"885:15:260"}},{"id":119974,"nodeType":"ErrorDefinition","src":"983:109:260","nodes":[],"documentation":{"id":119966,"nodeType":"StructuredDocumentation","src":"907:71:260","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","name":"SafeERC20FailedDecreaseAllowance","nameLocation":"989:32:260","parameters":{"id":119973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":119968,"mutability":"mutable","name":"spender","nameLocation":"1030:7:260","nodeType":"VariableDeclaration","scope":119974,"src":"1022:15:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":119967,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":119970,"mutability":"mutable","name":"currentAllowance","nameLocation":"1047:16:260","nodeType":"VariableDeclaration","scope":119974,"src":"1039:24:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":119969,"name":"uint256","nodeType":"ElementaryTypeName","src":"1039:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":119972,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1073:17:260","nodeType":"VariableDeclaration","scope":119974,"src":"1065:25:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":119971,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1021:70:260"}},{"id":119998,"nodeType":"FunctionDefinition","src":"1282:160:260","nodes":[],"body":{"id":119997,"nodeType":"Block","src":"1354:88:260","nodes":[],"statements":[{"expression":{"arguments":[{"id":119986,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119978,"src":"1384:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":119989,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119978,"src":"1406:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"id":119990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":119843,"src":"1406:14:260","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":119991,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119980,"src":"1423:2:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":119992,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119982,"src":"1427:5:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":119993,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1422:11:260","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":119987,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1391:3:260","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":119988,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeCall","nodeType":"MemberAccess","src":"1391:14:260","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":119994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1391:43:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":119985,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120188,"src":"1364:19:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$119876_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":119995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1364:71:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":119996,"nodeType":"ExpressionStatement","src":"1364:71:260"}]},"documentation":{"id":119975,"nodeType":"StructuredDocumentation","src":"1098:179:260","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:260","parameters":{"id":119983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":119978,"mutability":"mutable","name":"token","nameLocation":"1311:5:260","nodeType":"VariableDeclaration","scope":119998,"src":"1304:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},"typeName":{"id":119977,"nodeType":"UserDefinedTypeName","pathNode":{"id":119976,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":119876,"src":"1304:6:260"},"referencedDeclaration":119876,"src":"1304:6:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":119980,"mutability":"mutable","name":"to","nameLocation":"1326:2:260","nodeType":"VariableDeclaration","scope":119998,"src":"1318:10:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":119979,"name":"address","nodeType":"ElementaryTypeName","src":"1318:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":119982,"mutability":"mutable","name":"value","nameLocation":"1338:5:260","nodeType":"VariableDeclaration","scope":119998,"src":"1330:13:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":119981,"name":"uint256","nodeType":"ElementaryTypeName","src":"1330:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1303:41:260"},"returnParameters":{"id":119984,"nodeType":"ParameterList","parameters":[],"src":"1354:0:260"},"scope":120238,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":120025,"nodeType":"FunctionDefinition","src":"1681:188:260","nodes":[],"body":{"id":120024,"nodeType":"Block","src":"1771:98:260","nodes":[],"statements":[{"expression":{"arguments":[{"id":120012,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120002,"src":"1801:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":120015,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120002,"src":"1823:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"id":120016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":119875,"src":"1823:18:260","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":120017,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120004,"src":"1844:4:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":120018,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120006,"src":"1850:2:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":120019,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120008,"src":"1854:5:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":120020,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1843:17:260","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":120013,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1808:3:260","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":120014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeCall","nodeType":"MemberAccess","src":"1808:14:260","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":120021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1808:53:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":120011,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120188,"src":"1781:19:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$119876_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":120022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1781:81:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":120023,"nodeType":"ExpressionStatement","src":"1781:81:260"}]},"documentation":{"id":119999,"nodeType":"StructuredDocumentation","src":"1448:228:260","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:260","parameters":{"id":120009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120002,"mutability":"mutable","name":"token","nameLocation":"1714:5:260","nodeType":"VariableDeclaration","scope":120025,"src":"1707:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},"typeName":{"id":120001,"nodeType":"UserDefinedTypeName","pathNode":{"id":120000,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":119876,"src":"1707:6:260"},"referencedDeclaration":119876,"src":"1707:6:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":120004,"mutability":"mutable","name":"from","nameLocation":"1729:4:260","nodeType":"VariableDeclaration","scope":120025,"src":"1721:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":120003,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":120006,"mutability":"mutable","name":"to","nameLocation":"1743:2:260","nodeType":"VariableDeclaration","scope":120025,"src":"1735:10:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":120005,"name":"address","nodeType":"ElementaryTypeName","src":"1735:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":120008,"mutability":"mutable","name":"value","nameLocation":"1755:5:260","nodeType":"VariableDeclaration","scope":120025,"src":"1747:13:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":120007,"name":"uint256","nodeType":"ElementaryTypeName","src":"1747:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1706:55:260"},"returnParameters":{"id":120010,"nodeType":"ParameterList","parameters":[],"src":"1771:0:260"},"scope":120238,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":120056,"nodeType":"FunctionDefinition","src":"2060:225:260","nodes":[],"body":{"id":120055,"nodeType":"Block","src":"2146:139:260","nodes":[],"statements":[{"assignments":[120037],"declarations":[{"constant":false,"id":120037,"mutability":"mutable","name":"oldAllowance","nameLocation":"2164:12:260","nodeType":"VariableDeclaration","scope":120055,"src":"2156:20:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":120036,"name":"uint256","nodeType":"ElementaryTypeName","src":"2156:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":120046,"initialValue":{"arguments":[{"arguments":[{"id":120042,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2203:4:260","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$120238","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$120238","typeString":"library SafeERC20"}],"id":120041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2195:7:260","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":120040,"name":"address","nodeType":"ElementaryTypeName","src":"2195:7:260","typeDescriptions":{}}},"id":120043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2195:13:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":120044,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120031,"src":"2210:7:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":120038,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120029,"src":"2179:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"id":120039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":119853,"src":"2179:15:260","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":120045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2179:39:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2156:62:260"},{"expression":{"arguments":[{"id":120048,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120029,"src":"2241:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},{"id":120049,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120031,"src":"2248:7:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":120052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":120050,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120037,"src":"2257:12:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":120051,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120033,"src":"2272:5:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2257:20:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":120047,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120146,"src":"2228:12:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$119876_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":120053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2228:50:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":120054,"nodeType":"ExpressionStatement","src":"2228:50:260"}]},"documentation":{"id":120026,"nodeType":"StructuredDocumentation","src":"1875:180:260","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:260","parameters":{"id":120034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120029,"mutability":"mutable","name":"token","nameLocation":"2098:5:260","nodeType":"VariableDeclaration","scope":120056,"src":"2091:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},"typeName":{"id":120028,"nodeType":"UserDefinedTypeName","pathNode":{"id":120027,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":119876,"src":"2091:6:260"},"referencedDeclaration":119876,"src":"2091:6:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":120031,"mutability":"mutable","name":"spender","nameLocation":"2113:7:260","nodeType":"VariableDeclaration","scope":120056,"src":"2105:15:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":120030,"name":"address","nodeType":"ElementaryTypeName","src":"2105:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":120033,"mutability":"mutable","name":"value","nameLocation":"2130:5:260","nodeType":"VariableDeclaration","scope":120056,"src":"2122:13:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":120032,"name":"uint256","nodeType":"ElementaryTypeName","src":"2122:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2090:46:260"},"returnParameters":{"id":120035,"nodeType":"ParameterList","parameters":[],"src":"2146:0:260"},"scope":120238,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":120099,"nodeType":"FunctionDefinition","src":"2488:468:260","nodes":[],"body":{"id":120098,"nodeType":"Block","src":"2586:370:260","nodes":[],"statements":[{"id":120097,"nodeType":"UncheckedBlock","src":"2596:354:260","statements":[{"assignments":[120068],"declarations":[{"constant":false,"id":120068,"mutability":"mutable","name":"currentAllowance","nameLocation":"2628:16:260","nodeType":"VariableDeclaration","scope":120097,"src":"2620:24:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":120067,"name":"uint256","nodeType":"ElementaryTypeName","src":"2620:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":120077,"initialValue":{"arguments":[{"arguments":[{"id":120073,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2671:4:260","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$120238","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$120238","typeString":"library SafeERC20"}],"id":120072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2663:7:260","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":120071,"name":"address","nodeType":"ElementaryTypeName","src":"2663:7:260","typeDescriptions":{}}},"id":120074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2663:13:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":120075,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120062,"src":"2678:7:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":120069,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120060,"src":"2647:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"id":120070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":119853,"src":"2647:15:260","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":120076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2647:39:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2620:66:260"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":120080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":120078,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120068,"src":"2704:16:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":120079,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120064,"src":"2723:17:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2704:36:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":120088,"nodeType":"IfStatement","src":"2700:160:260","trueBody":{"id":120087,"nodeType":"Block","src":"2742:118:260","statements":[{"errorCall":{"arguments":[{"id":120082,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120062,"src":"2800:7:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":120083,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120068,"src":"2809:16:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":120084,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120064,"src":"2827:17:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":120081,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119974,"src":"2767:32:260","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) pure"}},"id":120085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2767:78:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":120086,"nodeType":"RevertStatement","src":"2760:85:260"}]}},{"expression":{"arguments":[{"id":120090,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120060,"src":"2886:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},{"id":120091,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120062,"src":"2893:7:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":120094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":120092,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120068,"src":"2902:16:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":120093,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120064,"src":"2921:17:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2902:36:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":120089,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120146,"src":"2873:12:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$119876_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":120095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2873:66:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":120096,"nodeType":"ExpressionStatement","src":"2873:66:260"}]}]},"documentation":{"id":120057,"nodeType":"StructuredDocumentation","src":"2291:192:260","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:260","parameters":{"id":120065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120060,"mutability":"mutable","name":"token","nameLocation":"2526:5:260","nodeType":"VariableDeclaration","scope":120099,"src":"2519:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},"typeName":{"id":120059,"nodeType":"UserDefinedTypeName","pathNode":{"id":120058,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":119876,"src":"2519:6:260"},"referencedDeclaration":119876,"src":"2519:6:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":120062,"mutability":"mutable","name":"spender","nameLocation":"2541:7:260","nodeType":"VariableDeclaration","scope":120099,"src":"2533:15:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":120061,"name":"address","nodeType":"ElementaryTypeName","src":"2533:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":120064,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2558:17:260","nodeType":"VariableDeclaration","scope":120099,"src":"2550:25:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":120063,"name":"uint256","nodeType":"ElementaryTypeName","src":"2550:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2518:58:260"},"returnParameters":{"id":120066,"nodeType":"ParameterList","parameters":[],"src":"2586:0:260"},"scope":120238,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":120146,"nodeType":"FunctionDefinition","src":"3275:380:260","nodes":[],"body":{"id":120145,"nodeType":"Block","src":"3352:303:260","nodes":[],"statements":[{"assignments":[120111],"declarations":[{"constant":false,"id":120111,"mutability":"mutable","name":"approvalCall","nameLocation":"3375:12:260","nodeType":"VariableDeclaration","scope":120145,"src":"3362:25:260","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":120110,"name":"bytes","nodeType":"ElementaryTypeName","src":"3362:5:260","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":120120,"initialValue":{"arguments":[{"expression":{"id":120114,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120103,"src":"3405:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"id":120115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":119863,"src":"3405:13:260","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":120116,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120105,"src":"3421:7:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":120117,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120107,"src":"3430:5:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":120118,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3420:16:260","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":120112,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3390:3:260","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":120113,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeCall","nodeType":"MemberAccess","src":"3390:14:260","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":120119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3390:47:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3362:75:260"},{"condition":{"id":120125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3452:45:260","subExpression":{"arguments":[{"id":120122,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120103,"src":"3477:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},{"id":120123,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120111,"src":"3484:12:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":120121,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120237,"src":"3453:23:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$119876_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":120124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3453:44:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":120144,"nodeType":"IfStatement","src":"3448:201:260","trueBody":{"id":120143,"nodeType":"Block","src":"3499:150:260","statements":[{"expression":{"arguments":[{"id":120127,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120103,"src":"3533:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":120130,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120103,"src":"3555:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"id":120131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":119863,"src":"3555:13:260","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":120132,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120105,"src":"3571:7:260","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":120133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3580:1:260","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":120134,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3570:12:260","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":120128,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3540:3:260","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":120129,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeCall","nodeType":"MemberAccess","src":"3540:14:260","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":120135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3540:43:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":120126,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120188,"src":"3513:19:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$119876_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":120136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3513:71:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":120137,"nodeType":"ExpressionStatement","src":"3513:71:260"},{"expression":{"arguments":[{"id":120139,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120103,"src":"3618:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},{"id":120140,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120111,"src":"3625:12:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":120138,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120188,"src":"3598:19:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$119876_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":120141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3598:40:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":120142,"nodeType":"ExpressionStatement","src":"3598:40:260"}]}}]},"documentation":{"id":120100,"nodeType":"StructuredDocumentation","src":"2962:308:260","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":"3284:12:260","parameters":{"id":120108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120103,"mutability":"mutable","name":"token","nameLocation":"3304:5:260","nodeType":"VariableDeclaration","scope":120146,"src":"3297:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},"typeName":{"id":120102,"nodeType":"UserDefinedTypeName","pathNode":{"id":120101,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":119876,"src":"3297:6:260"},"referencedDeclaration":119876,"src":"3297:6:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":120105,"mutability":"mutable","name":"spender","nameLocation":"3319:7:260","nodeType":"VariableDeclaration","scope":120146,"src":"3311:15:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":120104,"name":"address","nodeType":"ElementaryTypeName","src":"3311:7:260","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":120107,"mutability":"mutable","name":"value","nameLocation":"3336:5:260","nodeType":"VariableDeclaration","scope":120146,"src":"3328:13:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":120106,"name":"uint256","nodeType":"ElementaryTypeName","src":"3328:7:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3296:46:260"},"returnParameters":{"id":120109,"nodeType":"ParameterList","parameters":[],"src":"3352:0:260"},"scope":120238,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":120188,"nodeType":"FunctionDefinition","src":"4038:629:260","nodes":[],"body":{"id":120187,"nodeType":"Block","src":"4108:559:260","nodes":[],"statements":[{"assignments":[120156],"declarations":[{"constant":false,"id":120156,"mutability":"mutable","name":"returndata","nameLocation":"4470:10:260","nodeType":"VariableDeclaration","scope":120187,"src":"4457:23:260","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":120155,"name":"bytes","nodeType":"ElementaryTypeName","src":"4457:5:260","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":120164,"initialValue":{"arguments":[{"id":120162,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120152,"src":"4511:4:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":120159,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120150,"src":"4491:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}],"id":120158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4483:7:260","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":120157,"name":"address","nodeType":"ElementaryTypeName","src":"4483:7:260","typeDescriptions":{}}},"id":120160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4483:14:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":120161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":119268,"src":"4483:27:260","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":120163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4483:33:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4457:59:260"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":120177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":120168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":120165,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120156,"src":"4530:10:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":120166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4530:17:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":120167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4551:1:260","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4530:22:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":120176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4556:31:260","subExpression":{"arguments":[{"id":120171,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120156,"src":"4568:10:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":120173,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4581:4:260","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":120172,"name":"bool","nodeType":"ElementaryTypeName","src":"4581:4:260","typeDescriptions":{}}}],"id":120174,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4580:6:260","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":120169,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4557:3:260","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":120170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"4557:10:260","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":120175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4557:30:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4530:57:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":120186,"nodeType":"IfStatement","src":"4526:135:260","trueBody":{"id":120185,"nodeType":"Block","src":"4589:72:260","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":120181,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120150,"src":"4643:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}],"id":120180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4635:7:260","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":120179,"name":"address","nodeType":"ElementaryTypeName","src":"4635:7:260","typeDescriptions":{}}},"id":120182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4635:14:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":120178,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119965,"src":"4610:24:260","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":120183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4610:40:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":120184,"nodeType":"RevertStatement","src":"4603:47:260"}]}}]},"documentation":{"id":120147,"nodeType":"StructuredDocumentation","src":"3661:372:260","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":"4047:19:260","parameters":{"id":120153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120150,"mutability":"mutable","name":"token","nameLocation":"4074:5:260","nodeType":"VariableDeclaration","scope":120188,"src":"4067:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},"typeName":{"id":120149,"nodeType":"UserDefinedTypeName","pathNode":{"id":120148,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":119876,"src":"4067:6:260"},"referencedDeclaration":119876,"src":"4067:6:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":120152,"mutability":"mutable","name":"data","nameLocation":"4094:4:260","nodeType":"VariableDeclaration","scope":120188,"src":"4081:17:260","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":120151,"name":"bytes","nodeType":"ElementaryTypeName","src":"4081:5:260","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4066:33:260"},"returnParameters":{"id":120154,"nodeType":"ParameterList","parameters":[],"src":"4108:0:260"},"scope":120238,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":120237,"nodeType":"FunctionDefinition","src":"5168:578:260","nodes":[],"body":{"id":120236,"nodeType":"Block","src":"5257:489:260","nodes":[],"statements":[{"assignments":[120200,120202],"declarations":[{"constant":false,"id":120200,"mutability":"mutable","name":"success","nameLocation":"5558:7:260","nodeType":"VariableDeclaration","scope":120236,"src":"5553:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":120199,"name":"bool","nodeType":"ElementaryTypeName","src":"5553:4:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":120202,"mutability":"mutable","name":"returndata","nameLocation":"5580:10:260","nodeType":"VariableDeclaration","scope":120236,"src":"5567:23:260","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":120201,"name":"bytes","nodeType":"ElementaryTypeName","src":"5567:5:260","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":120210,"initialValue":{"arguments":[{"id":120208,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120194,"src":"5614:4:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":120205,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120192,"src":"5602:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}],"id":120204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5594:7:260","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":120203,"name":"address","nodeType":"ElementaryTypeName","src":"5594:7:260","typeDescriptions":{}}},"id":120206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5594:14:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":120207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"5594:19:260","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":120209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5594:25:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5552:67:260"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":120234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":120225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":120211,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120200,"src":"5636:7:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":120223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":120215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":120212,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120202,"src":"5648:10:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":120213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5648:17:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":120214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5669:1:260","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5648:22:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":120218,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120202,"src":"5685:10:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":120220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5698:4:260","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":120219,"name":"bool","nodeType":"ElementaryTypeName","src":"5698:4:260","typeDescriptions":{}}}],"id":120221,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5697:6:260","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":120216,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5674:3:260","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":120217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"5674:10:260","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":120222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5674:30:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5648:56:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":120224,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5647:58:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5636:69:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":120233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":120228,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120192,"src":"5717:5:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}],"id":120227,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5709:7:260","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":120226,"name":"address","nodeType":"ElementaryTypeName","src":"5709:7:260","typeDescriptions":{}}},"id":120229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5709:14:260","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":120230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"code","nodeType":"MemberAccess","src":"5709:19:260","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":120231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5709:26:260","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":120232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5738:1:260","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5709:30:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5636:103:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":120198,"id":120235,"nodeType":"Return","src":"5629:110:260"}]},"documentation":{"id":120189,"nodeType":"StructuredDocumentation","src":"4673:490:260","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":"5177:23:260","parameters":{"id":120195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120192,"mutability":"mutable","name":"token","nameLocation":"5208:5:260","nodeType":"VariableDeclaration","scope":120237,"src":"5201:12:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"},"typeName":{"id":120191,"nodeType":"UserDefinedTypeName","pathNode":{"id":120190,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":119876,"src":"5201:6:260"},"referencedDeclaration":119876,"src":"5201:6:260","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$119876","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":120194,"mutability":"mutable","name":"data","nameLocation":"5228:4:260","nodeType":"VariableDeclaration","scope":120237,"src":"5215:17:260","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":120193,"name":"bytes","nodeType":"ElementaryTypeName","src":"5215:5:260","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5200:33:260"},"returnParameters":{"id":120198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":120237,"src":"5251:4:260","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":120196,"name":"bool","nodeType":"ElementaryTypeName","src":"5251:4:260","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5250:6:260"},"scope":120238,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":119957,"nodeType":"StructuredDocumentation","src":"272:457:260","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":[120238],"name":"SafeERC20","nameLocation":"738:9:260","scope":120239,"usedErrors":[119965,119974]}],"license":"MIT"},"id":260}