Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
AggregationRouter
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-19 */ // SPDX-License-Identifier: MIT pragma solidity >=0.7.6; pragma abicoder v2; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED"); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED"); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED"); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "TransferHelper: ETH_TRANSFER_FAILED"); } } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); } // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } function div(uint256 a, uint256 b) internal pure returns (uint256 c) { require(b > 0, "ds-math-division-by-zero"); c = a / b; } } interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; function balanceOf(address account) external view returns (uint256); } interface IAggregationExecutor { function callBytes(bytes calldata data, address srcSpender) external payable; // 0xd9c45357 } interface IERC20Permit { function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } library RevertReasonParser { function parse(bytes memory data, string memory prefix) internal pure returns (string memory) { // https://solidity.readthedocs.io/en/latest/control-structures.html#revert // We assume that revert reason is abi-encoded as Error(string) // 68 = 4-byte selector 0x08c379a0 + 32 bytes offset + 32 bytes length if (data.length >= 68 && data[0] == "\x08" && data[1] == "\xc3" && data[2] == "\x79" && data[3] == "\xa0") { string memory reason; // solhint-disable no-inline-assembly assembly { // 68 = 32 bytes data length + 4-byte selector + 32 bytes offset reason := add(data, 68) } /* revert reason is padded up to 32 bytes with ABI encoder: Error(string) also sometimes there is extra 32 bytes of zeros padded in the end: https://github.com/ethereum/solidity/issues/10170 because of that we can't check for equality and instead check that string length + extra 68 bytes is less than overall data length */ require(data.length >= 68 + bytes(reason).length, "Invalid revert reason"); return string(abi.encodePacked(prefix, "Error(", reason, ")")); } // 36 = 4-byte selector 0x4e487b71 + 32 bytes integer else if (data.length == 36 && data[0] == "\x4e" && data[1] == "\x48" && data[2] == "\x7b" && data[3] == "\x71") { uint256 code; // solhint-disable no-inline-assembly assembly { // 36 = 32 bytes data length + 4-byte selector code := mload(add(data, 36)) } return string(abi.encodePacked(prefix, "Panic(", _toHex(code), ")")); } return string(abi.encodePacked(prefix, "Unknown(", _toHex(data), ")")); } function _toHex(uint256 value) private pure returns (string memory) { return _toHex(abi.encodePacked(value)); } function _toHex(bytes memory data) private pure returns (string memory) { bytes16 alphabet = 0x30313233343536373839616263646566; bytes memory str = new bytes(2 + data.length * 2); str[0] = "0"; str[1] = "x"; for (uint256 i = 0; i < data.length; i++) { str[2 * i + 2] = alphabet[uint8(data[i] >> 4)]; str[2 * i + 3] = alphabet[uint8(data[i] & 0x0f)]; } return string(str); } } contract Permitable { event Error(string reason); function _permit( IERC20 token, uint256 amount, bytes calldata permit ) internal { if (permit.length == 32 * 7) { // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory result) = address(token).call(abi.encodePacked(IERC20Permit.permit.selector, permit)); if (!success) { string memory reason = RevertReasonParser.parse(result, "Permit call failed: "); if (token.allowance(msg.sender, address(this)) < amount) { revert(reason); } else { emit Error(reason); } } } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract AggregationRouter is Ownable, Permitable { using SafeMath for uint256; address public immutable WETH; address private constant ETH_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); uint256 private constant _PARTIAL_FILL = 0x01; uint256 private constant _REQUIRES_EXTRA_ETH = 0x02; uint256 private constant _SHOULD_CLAIM = 0x04; uint256 private constant _BURN_FROM_MSG_SENDER = 0x08; uint256 private constant _BURN_FROM_TX_ORIGIN = 0x10; struct SwapDescription { IERC20 srcToken; IERC20 dstToken; address srcReceiver; address dstReceiver; uint256 amount; uint256 minReturnAmount; uint256 flags; bytes permit; } event Swapped(address sender, IERC20 srcToken, IERC20 dstToken, address dstReceiver, uint256 spentAmount, uint256 returnAmount); event Exchange(address pair, uint256 amountOut, address output); modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "Router: EXPIRED"); _; } constructor(address _WETH) public { WETH = _WETH; } receive() external payable {} function swap( IAggregationExecutor caller, SwapDescription calldata desc, bytes calldata data ) external payable returns (uint256 returnAmount) { require(desc.minReturnAmount > 0, "Min return should not be 0"); require(data.length > 0, "data should be not zero"); uint256 flags = desc.flags; uint256 amount = desc.amount; IERC20 srcToken = desc.srcToken; IERC20 dstToken = desc.dstToken; if (flags & _REQUIRES_EXTRA_ETH != 0) { require(msg.value > (isETH(srcToken) ? amount : 0), "Invalid msg.value"); } else { require(msg.value == (isETH(srcToken) ? amount : 0), "Invalid msg.value"); } if (flags & _SHOULD_CLAIM != 0) { require(!isETH(srcToken), "Claim token is ETH"); _permit(srcToken, amount, desc.permit); TransferHelper.safeTransferFrom(address(srcToken), msg.sender, desc.srcReceiver, amount); } address dstReceiver = (desc.dstReceiver == address(0)) ? msg.sender : desc.dstReceiver; uint256 initialSrcBalance = (flags & _PARTIAL_FILL != 0) ? getBalance(srcToken, msg.sender) : 0; uint256 initialDstBalance = getBalance(dstToken, dstReceiver); { // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory result) = address(caller).call{value: msg.value}(abi.encodeWithSelector(caller.callBytes.selector, data, msg.sender)); if (!success) { revert(RevertReasonParser.parse(result, "callBytes failed: ")); } } uint256 spentAmount = amount; returnAmount = getBalance(dstToken, dstReceiver).sub(initialDstBalance); if (flags & _PARTIAL_FILL != 0) { spentAmount = initialSrcBalance.add(amount).sub(getBalance(srcToken, msg.sender)); require(returnAmount.mul(amount) >= desc.minReturnAmount.mul(spentAmount), "Return amount is not enough"); } else { require(returnAmount >= desc.minReturnAmount, "Return amount is not enough"); } emit Swapped(msg.sender, srcToken, dstToken, dstReceiver, spentAmount, returnAmount); emit Exchange(address(caller), returnAmount, isETH(dstToken) ? WETH : address(dstToken)); } function getBalance(IERC20 token, address account) internal view returns (uint256) { if (isETH(token)) { return account.balance; } else { return token.balanceOf(account); } } function isETH(IERC20 token) internal pure returns (bool) { return (address(token) == ETH_ADDRESS); } function rescueFunds(address token, uint256 amount) external onlyOwner { if (isETH(IERC20(token))) { TransferHelper.safeTransferETH(msg.sender, amount); } else { TransferHelper.safeTransfer(token, msg.sender, amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"Error","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"output","type":"address"}],"name":"Exchange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"srcToken","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"dstToken","type":"address"},{"indexed":false,"internalType":"address","name":"dstReceiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"spentAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAggregationExecutor","name":"caller","type":"address"},{"components":[{"internalType":"contract IERC20","name":"srcToken","type":"address"},{"internalType":"contract IERC20","name":"dstToken","type":"address"},{"internalType":"address","name":"srcReceiver","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"flags","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct AggregationRouter.SwapDescription","name":"desc","type":"tuple"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620020b9380380620020b98339810160408190526200003491620000a4565b600062000040620000a0565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060601b6001600160601b031916608052620000d4565b3390565b600060208284031215620000b6578081fd5b81516001600160a01b0381168114620000cd578182fd5b9392505050565b60805160601c611fc2620000f7600039806107b9528061081e5250611fc26000f3fe6080604052600436106100695760003560e01c80638da5cb5b116100435780638da5cb5b146100d5578063ad5c4648146100f7578063f2fde38b1461010c57610070565b8063715018a61461007557806378e3214f1461008c5780637c025200146100ac57610070565b3661007057005b600080fd5b34801561008157600080fd5b5061008a61012c565b005b34801561009857600080fd5b5061008a6100a73660046116d2565b610217565b6100bf6100ba36600461171d565b6102b6565b6040516100cc9190611983565b60405180910390f35b3480156100e157600080fd5b506100ea610800565b6040516100cc919061198c565b34801561010357600080fd5b506100ea61081c565b34801561011857600080fd5b5061008a6101273660046116af565b610840565b61013461098d565b73ffffffffffffffffffffffffffffffffffffffff16610152610800565b73ffffffffffffffffffffffffffffffffffffffff16146101a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d74565b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b61021f61098d565b73ffffffffffffffffffffffffffffffffffffffff1661023d610800565b73ffffffffffffffffffffffffffffffffffffffff161461028a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d74565b61029382610991565b156102a7576102a233826109c3565b6102b2565b6102b2823383610a7c565b5050565b6000808460a00135116102f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d3d565b8161032c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611da9565b60c08401356080850135600061034560208801886116af565b905060006103596040890160208a016116af565b905060028416156103b75761036d82610991565b61037857600061037a565b825b34116103b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611ccf565b610405565b6103c082610991565b6103cb5760006103cd565b825b3414610405576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611ccf565b60048416156104805761041782610991565b1561044e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611bcd565b610465828461046060e08c018c611ed1565b610ba5565b610480823361047a60608c0160408d016116af565b86610db3565b60008061049360808b0160608c016116af565b73ffffffffffffffffffffffffffffffffffffffff16146104c3576104be60808a0160608b016116af565b6104c5565b335b90506000600186166104d85760006104e2565b6104e28433610ed7565b905060006104f08484610ed7565b90506000808d73ffffffffffffffffffffffffffffffffffffffff1634635697e45360e01b8e8e3360405160240161052a93929190611aa2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516105b39190611817565b60006040518083038185875af1925050503d80600081146105f0576040519150601f19603f3d011682016040523d82523d6000602084013e6105f5565b606091505b5091509150816106715761063e816040518060400160405280601281526020017f63616c6c4279746573206661696c65643a200000000000000000000000000000815250610fb0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f9190611b0e565b50869050610689826106838787610ed7565b90611382565b98506001881615610702576106ab6106a18733610ed7565b610683858a6113bf565b90506106bb60a08d0135826113fc565b6106c58a896113fc565b10156106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d06565b610740565b8b60a00135891015610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d06565b7fd6d4f5681c246c9f42c203e287975af1601f8df8035a9251f79aab5c8f09e2f833878787858e604051610779969594939291906119d4565b60405180910390a17fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c488d8a6107ad88610991565b6107b757876107d9565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516107e893929190611a72565b60405180910390a15050505050505050949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b61084861098d565b73ffffffffffffffffffffffffffffffffffffffff16610866610800565b73ffffffffffffffffffffffffffffffffffffffff16146108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d74565b73ffffffffffffffffffffffffffffffffffffffff8116610900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611c04565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516109fa9190611817565b60006040518083038185875af1925050503d8060008114610a37576040519150601f19603f3d011682016040523d82523d6000602084013e610a3c565b606091505b5050905080610a77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611e17565b505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610aae929190611a4c565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610afc9190611817565b6000604051808303816000865af19150503d8060008114610b39576040519150601f19603f3d011682016040523d82523d6000602084013e610b3e565b606091505b5091509150818015610b68575080511580610b68575080806020019051810190610b6891906116fd565b610b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611b96565b5050505050565b60e0811415610dad576000808573ffffffffffffffffffffffffffffffffffffffff1663d505accf60e01b8585604051602001610be4939291906117db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c1c91611817565b6000604051808303816000865af19150503d8060008114610c59576040519150601f19603f3d011682016040523d82523d6000602084013e610c5e565b606091505b509150915081610daa576000610ca9826040518060400160405280601481526020017f5065726d69742063616c6c206661696c65643a20000000000000000000000000815250610fb0565b9050858773ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401610ce79291906119ad565b60206040518083038186803b158015610cff57600080fd5b505afa158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3791906117c3565b1015610d7157806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f9190611b0e565b7f08c379a0afcc32b1a39302f7cb8073359698411ab5fd6e3edb2c02c0b5fba8aa81604051610da09190611b0e565b60405180910390a1505b50505b50505050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610de793929190611a1b565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610e359190611817565b6000604051808303816000865af19150503d8060008114610e72576040519150601f19603f3d011682016040523d82523d6000602084013e610e77565b606091505b5091509150818015610ea1575080511580610ea1575080806020019051810190610ea191906116fd565b610daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611e74565b6000610ee283610991565b15610f05575073ffffffffffffffffffffffffffffffffffffffff811631610faa565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610f5790859060040161198c565b60206040518083038186803b158015610f6f57600080fd5b505afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa791906117c3565b90505b92915050565b60606044835110158015611017575082600081518110610fcc57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f0800000000000000000000000000000000000000000000000000000000000000145b801561107657508260018151811061102b57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fc300000000000000000000000000000000000000000000000000000000000000145b80156110d557508260028151811061108a57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7900000000000000000000000000000000000000000000000000000000000000145b80156111345750826003815181106110e957fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fa000000000000000000000000000000000000000000000000000000000000000145b156111aa576060604484019050805160440184511015611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611de0565b8281604051602001611193929190611937565b604051602081830303815290604052915050610faa565b8251602414801561120e5750826000815181106111c357fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4e00000000000000000000000000000000000000000000000000000000000000145b801561126d57508260018151811061122257fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4800000000000000000000000000000000000000000000000000000000000000145b80156112cc57508260028151811061128157fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7b00000000000000000000000000000000000000000000000000000000000000145b801561132b5750826003815181106112e057fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7100000000000000000000000000000000000000000000000000000000000000145b156113505760248301518261133f8261144d565b604051602001611193929190611833565b8161135a84611473565b60405160200161136b9291906118b5565b604051602081830303815290604052905092915050565b80820382811115610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611b5f565b80820182811015610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611c98565b60008115806114175750508082028282828161141457fe5b04145b610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611c61565b6060610faa826040516020016114639190611983565b6040516020818303038152906040525b80516060907f30313233343536373839616263646566000000000000000000000000000000009060009060029081020167ffffffffffffffff811180156114b957600080fd5b506040519080825280601f01601f1916602001820160405280156114e4576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061151557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061157257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b84518110156116a7578260048683815181106115bc57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c60f81c601081106115f257fe5b1a60f81b82826002026002018151811061160857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508285828151811061164457fe5b60209101015160f81c600f166010811061165a57fe5b1a60f81b82826002026003018151811061167057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016115a4565b509392505050565b6000602082840312156116c0578081fd5b81356116cb81611f67565b9392505050565b600080604083850312156116e4578081fd5b82356116ef81611f67565b946020939093013593505050565b60006020828403121561170e578081fd5b815180151581146116cb578182fd5b60008060008060608587031215611732578182fd5b843561173d81611f67565b9350602085013567ffffffffffffffff80821115611759578384fd5b90860190610100828903121561176d578384fd5b90935060408601359080821115611782578384fd5b818701915087601f830112611795578384fd5b8135818111156117a3578485fd5b8860208285010111156117b4578485fd5b95989497505060200194505050565b6000602082840312156117d4578081fd5b5051919050565b60007fffffffff000000000000000000000000000000000000000000000000000000008516825282846004840137910160040190815292915050565b60008251611829818460208701611f3b565b9190910192915050565b60008351611845818460208801611f3b565b7f50616e6963280000000000000000000000000000000000000000000000000000908301908152835161187f816006840160208801611f3b565b7f290000000000000000000000000000000000000000000000000000000000000060069290910191820152600701949350505050565b600083516118c7818460208801611f3b565b7f556e6b6e6f776e280000000000000000000000000000000000000000000000009083019081528351611901816008840160208801611f3b565b7f290000000000000000000000000000000000000000000000000000000000000060089290910191820152600901949350505050565b60008351611949818460208801611f3b565b7f4572726f72280000000000000000000000000000000000000000000000000000908301908152835161187f816006840160208801611f3b565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015293166060830152608082019290925260a081019190915260c00190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff93841681526020810192909252909116604082015260600190565b60006040825283604083015283856060840137806060858401015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116830101905073ffffffffffffffffffffffffffffffffffffffff83166020830152949350505050565b6000602082528251806020840152611b2d816040850160208701611f3b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60208082526015908201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604082015260600190565b6020808252601f908201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604082015260600190565b60208082526012908201527f436c61696d20746f6b656e206973204554480000000000000000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604082015260600190565b60208082526014908201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604082015260600190565b60208082526011908201527f496e76616c6964206d73672e76616c7565000000000000000000000000000000604082015260600190565b6020808252601b908201527f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000604082015260600190565b6020808252601a908201527f4d696e2072657475726e2073686f756c64206e6f742062652030000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f646174612073686f756c64206265206e6f74207a65726f000000000000000000604082015260600190565b60208082526015908201527f496e76616c69642072657665727420726561736f6e0000000000000000000000604082015260600190565b60208082526023908201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960408201527f4c45440000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160408201527f494c454400000000000000000000000000000000000000000000000000000000606082015260800190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f05578283fd5b83018035915067ffffffffffffffff821115611f1f578283fd5b602001915036819003821315611f3457600080fd5b9250929050565b60005b83811015611f56578181015183820152602001611f3e565b83811115610dad5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114611f8957600080fd5b5056fea264697066735822122068ef9be5c857f15e870fcb5c0518ef8740a1e8f5c49ddb10f6256f4b20d39b7f64736f6c63430007060033000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode
0x6080604052600436106100695760003560e01c80638da5cb5b116100435780638da5cb5b146100d5578063ad5c4648146100f7578063f2fde38b1461010c57610070565b8063715018a61461007557806378e3214f1461008c5780637c025200146100ac57610070565b3661007057005b600080fd5b34801561008157600080fd5b5061008a61012c565b005b34801561009857600080fd5b5061008a6100a73660046116d2565b610217565b6100bf6100ba36600461171d565b6102b6565b6040516100cc9190611983565b60405180910390f35b3480156100e157600080fd5b506100ea610800565b6040516100cc919061198c565b34801561010357600080fd5b506100ea61081c565b34801561011857600080fd5b5061008a6101273660046116af565b610840565b61013461098d565b73ffffffffffffffffffffffffffffffffffffffff16610152610800565b73ffffffffffffffffffffffffffffffffffffffff16146101a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d74565b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b61021f61098d565b73ffffffffffffffffffffffffffffffffffffffff1661023d610800565b73ffffffffffffffffffffffffffffffffffffffff161461028a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d74565b61029382610991565b156102a7576102a233826109c3565b6102b2565b6102b2823383610a7c565b5050565b6000808460a00135116102f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d3d565b8161032c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611da9565b60c08401356080850135600061034560208801886116af565b905060006103596040890160208a016116af565b905060028416156103b75761036d82610991565b61037857600061037a565b825b34116103b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611ccf565b610405565b6103c082610991565b6103cb5760006103cd565b825b3414610405576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611ccf565b60048416156104805761041782610991565b1561044e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611bcd565b610465828461046060e08c018c611ed1565b610ba5565b610480823361047a60608c0160408d016116af565b86610db3565b60008061049360808b0160608c016116af565b73ffffffffffffffffffffffffffffffffffffffff16146104c3576104be60808a0160608b016116af565b6104c5565b335b90506000600186166104d85760006104e2565b6104e28433610ed7565b905060006104f08484610ed7565b90506000808d73ffffffffffffffffffffffffffffffffffffffff1634635697e45360e01b8e8e3360405160240161052a93929190611aa2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516105b39190611817565b60006040518083038185875af1925050503d80600081146105f0576040519150601f19603f3d011682016040523d82523d6000602084013e6105f5565b606091505b5091509150816106715761063e816040518060400160405280601281526020017f63616c6c4279746573206661696c65643a200000000000000000000000000000815250610fb0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f9190611b0e565b50869050610689826106838787610ed7565b90611382565b98506001881615610702576106ab6106a18733610ed7565b610683858a6113bf565b90506106bb60a08d0135826113fc565b6106c58a896113fc565b10156106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d06565b610740565b8b60a00135891015610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d06565b7fd6d4f5681c246c9f42c203e287975af1601f8df8035a9251f79aab5c8f09e2f833878787858e604051610779969594939291906119d4565b60405180910390a17fddac40937f35385a34f721af292e5a83fc5b840f722bff57c2fc71adba708c488d8a6107ad88610991565b6107b757876107d9565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad385b6040516107e893929190611a72565b60405180910390a15050505050505050949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b61084861098d565b73ffffffffffffffffffffffffffffffffffffffff16610866610800565b73ffffffffffffffffffffffffffffffffffffffff16146108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611d74565b73ffffffffffffffffffffffffffffffffffffffff8116610900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611c04565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516109fa9190611817565b60006040518083038185875af1925050503d8060008114610a37576040519150601f19603f3d011682016040523d82523d6000602084013e610a3c565b606091505b5050905080610a77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611e17565b505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610aae929190611a4c565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610afc9190611817565b6000604051808303816000865af19150503d8060008114610b39576040519150601f19603f3d011682016040523d82523d6000602084013e610b3e565b606091505b5091509150818015610b68575080511580610b68575080806020019051810190610b6891906116fd565b610b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611b96565b5050505050565b60e0811415610dad576000808573ffffffffffffffffffffffffffffffffffffffff1663d505accf60e01b8585604051602001610be4939291906117db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c1c91611817565b6000604051808303816000865af19150503d8060008114610c59576040519150601f19603f3d011682016040523d82523d6000602084013e610c5e565b606091505b509150915081610daa576000610ca9826040518060400160405280601481526020017f5065726d69742063616c6c206661696c65643a20000000000000000000000000815250610fb0565b9050858773ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401610ce79291906119ad565b60206040518083038186803b158015610cff57600080fd5b505afa158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3791906117c3565b1015610d7157806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f9190611b0e565b7f08c379a0afcc32b1a39302f7cb8073359698411ab5fd6e3edb2c02c0b5fba8aa81604051610da09190611b0e565b60405180910390a1505b50505b50505050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610de793929190611a1b565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610e359190611817565b6000604051808303816000865af19150503d8060008114610e72576040519150601f19603f3d011682016040523d82523d6000602084013e610e77565b606091505b5091509150818015610ea1575080511580610ea1575080806020019051810190610ea191906116fd565b610daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611e74565b6000610ee283610991565b15610f05575073ffffffffffffffffffffffffffffffffffffffff811631610faa565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610f5790859060040161198c565b60206040518083038186803b158015610f6f57600080fd5b505afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa791906117c3565b90505b92915050565b60606044835110158015611017575082600081518110610fcc57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f0800000000000000000000000000000000000000000000000000000000000000145b801561107657508260018151811061102b57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fc300000000000000000000000000000000000000000000000000000000000000145b80156110d557508260028151811061108a57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7900000000000000000000000000000000000000000000000000000000000000145b80156111345750826003815181106110e957fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fa000000000000000000000000000000000000000000000000000000000000000145b156111aa576060604484019050805160440184511015611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611de0565b8281604051602001611193929190611937565b604051602081830303815290604052915050610faa565b8251602414801561120e5750826000815181106111c357fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4e00000000000000000000000000000000000000000000000000000000000000145b801561126d57508260018151811061122257fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f4800000000000000000000000000000000000000000000000000000000000000145b80156112cc57508260028151811061128157fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7b00000000000000000000000000000000000000000000000000000000000000145b801561132b5750826003815181106112e057fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f7100000000000000000000000000000000000000000000000000000000000000145b156113505760248301518261133f8261144d565b604051602001611193929190611833565b8161135a84611473565b60405160200161136b9291906118b5565b604051602081830303815290604052905092915050565b80820382811115610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611b5f565b80820182811015610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611c98565b60008115806114175750508082028282828161141457fe5b04145b610faa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019f90611c61565b6060610faa826040516020016114639190611983565b6040516020818303038152906040525b80516060907f30313233343536373839616263646566000000000000000000000000000000009060009060029081020167ffffffffffffffff811180156114b957600080fd5b506040519080825280601f01601f1916602001820160405280156114e4576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061151557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061157257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b84518110156116a7578260048683815181106115bc57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c60f81c601081106115f257fe5b1a60f81b82826002026002018151811061160857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508285828151811061164457fe5b60209101015160f81c600f166010811061165a57fe5b1a60f81b82826002026003018151811061167057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016115a4565b509392505050565b6000602082840312156116c0578081fd5b81356116cb81611f67565b9392505050565b600080604083850312156116e4578081fd5b82356116ef81611f67565b946020939093013593505050565b60006020828403121561170e578081fd5b815180151581146116cb578182fd5b60008060008060608587031215611732578182fd5b843561173d81611f67565b9350602085013567ffffffffffffffff80821115611759578384fd5b90860190610100828903121561176d578384fd5b90935060408601359080821115611782578384fd5b818701915087601f830112611795578384fd5b8135818111156117a3578485fd5b8860208285010111156117b4578485fd5b95989497505060200194505050565b6000602082840312156117d4578081fd5b5051919050565b60007fffffffff000000000000000000000000000000000000000000000000000000008516825282846004840137910160040190815292915050565b60008251611829818460208701611f3b565b9190910192915050565b60008351611845818460208801611f3b565b7f50616e6963280000000000000000000000000000000000000000000000000000908301908152835161187f816006840160208801611f3b565b7f290000000000000000000000000000000000000000000000000000000000000060069290910191820152600701949350505050565b600083516118c7818460208801611f3b565b7f556e6b6e6f776e280000000000000000000000000000000000000000000000009083019081528351611901816008840160208801611f3b565b7f290000000000000000000000000000000000000000000000000000000000000060089290910191820152600901949350505050565b60008351611949818460208801611f3b565b7f4572726f72280000000000000000000000000000000000000000000000000000908301908152835161187f816006840160208801611f3b565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152928516604085015293166060830152608082019290925260a081019190915260c00190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff93841681526020810192909252909116604082015260600190565b60006040825283604083015283856060840137806060858401015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116830101905073ffffffffffffffffffffffffffffffffffffffff83166020830152949350505050565b6000602082528251806020840152611b2d816040850160208701611f3b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60208082526015908201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604082015260600190565b6020808252601f908201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604082015260600190565b60208082526012908201527f436c61696d20746f6b656e206973204554480000000000000000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604082015260600190565b60208082526014908201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604082015260600190565b60208082526011908201527f496e76616c6964206d73672e76616c7565000000000000000000000000000000604082015260600190565b6020808252601b908201527f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000604082015260600190565b6020808252601a908201527f4d696e2072657475726e2073686f756c64206e6f742062652030000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f646174612073686f756c64206265206e6f74207a65726f000000000000000000604082015260600190565b60208082526015908201527f496e76616c69642072657665727420726561736f6e0000000000000000000000604082015260600190565b60208082526023908201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960408201527f4c45440000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160408201527f494c454400000000000000000000000000000000000000000000000000000000606082015260800190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f05578283fd5b83018035915067ffffffffffffffff821115611f1f578283fd5b602001915036819003821315611f3457600080fd5b9250929050565b60005b83811015611f56578181015183820152602001611f3e565b83811115610dad5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114611f8957600080fd5b5056fea264697066735822122068ef9be5c857f15e870fcb5c0518ef8740a1e8f5c49ddb10f6256f4b20d39b7f64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
-----Decoded View---------------
Arg [0] : _WETH (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode Sourcemap
9753:3892:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9233:138;;;;;;;;;;;;;:::i;:::-;;13389:253;;;;;;;;;;-1:-1:-1;13389:253:0;;;;;:::i;:::-;;:::i;10882:2174::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8622:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9839:29::-;;;;;;;;;;;;;:::i;9516:230::-;;;;;;;;;;-1:-1:-1;9516:230:0;;;;;:::i;:::-;;:::i;9233:138::-;8835:12;:10;:12::i;:::-;8824:23;;:7;:5;:7::i;:::-;:23;;;8816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9336:1:::1;9320:6:::0;;9299:40:::1;::::0;::::1;9320:6:::0;;::::1;::::0;9299:40:::1;::::0;9336:1;;9299:40:::1;9363:1;9346:19:::0;;;::::1;::::0;;9233:138::o;13389:253::-;8835:12;:10;:12::i;:::-;8824:23;;:7;:5;:7::i;:::-;:23;;;8816:68;;;;;;;;;;;;:::i;:::-;13471:20:::1;13484:5;13471;:20::i;:::-;13467:170;;;13502:50;13533:10;13545:6;13502:30;:50::i;:::-;13467:170;;;13575:54;13603:5;13610:10;13622:6;13575:27;:54::i;:::-;13389:253:::0;;:::o;10882:2174::-;11023:20;11083:1;11060:4;:20;;;:24;11052:63;;;;;;;;;;;;:::i;:::-;11130:15;11122:51;;;;;;;;;;;;:::i;:::-;11198:10;;;;11232:11;;;;11182:13;11268;;;;11198:4;11268:13;:::i;:::-;11250:31;-1:-1:-1;11288:15:0;11306:13;;;;;;;;:::i;:::-;11288:31;-1:-1:-1;10067:4:0;11332:27;;:32;11328:223;;11396:15;11402:8;11396:5;:15::i;:::-;:28;;11423:1;11396:28;;;11414:6;11396:28;11383:9;:42;11375:72;;;;;;;;;;;;:::i;:::-;11328:223;;;11492:15;11498:8;11492:5;:15::i;:::-;:28;;11519:1;11492:28;;;11510:6;11492:28;11478:9;:43;11470:73;;;;;;;;;;;;:::i;:::-;10117:4;11563:21;;:26;11559:240;;11609:15;11615:8;11609:5;:15::i;:::-;11608:16;11600:47;;;;;;;;;;;;:::i;:::-;11656:38;11664:8;11674:6;11682:11;;;;:4;:11;:::i;:::-;11656:7;:38::i;:::-;11703:88;11743:8;11754:10;11766:16;;;;;;;;:::i;:::-;11784:6;11703:31;:88::i;:::-;11807:19;;11830:16;;;;;;;;:::i;:::-;:30;;;11829:64;;11877:16;;;;;;;;:::i;:::-;11829:64;;;11864:10;11829:64;11807:86;-1:-1:-1;11900:25:0;10011:4;11929:21;;11928:67;;11994:1;11928:67;;;11959:32;11970:8;11980:10;11959;:32::i;:::-;11900:95;;12002:25;12030:33;12041:8;12051:11;12030:10;:33::i;:::-;12002:61;;12140:12;12154:19;12185:6;12177:20;;12205:9;12239:25;;;12266:4;;12272:10;12216:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12177:107;;;;12216:67;12177:107;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12139:145;;;;12298:7;12293:97;;12325:54;12350:6;12325:54;;;;;;;;;;;;;;;;;:24;:54::i;:::-;12318:62;;;;;;;;;;;:::i;12293:97::-;-1:-1:-1;12427:6:0;;-1:-1:-1;12455:56:0;12493:17;12455:33;12466:8;12476:11;12455:10;:33::i;:::-;:37;;:56::i;:::-;12440:71;-1:-1:-1;10011:4:0;12524:21;;:26;12520:343;;12575:67;12609:32;12620:8;12630:10;12609;:32::i;:::-;12575:29;:17;12597:6;12575:21;:29::i;:67::-;12561:81;-1:-1:-1;12687:37:0;:20;;;;12561:81;12687:24;:37::i;:::-;12659:24;:12;12676:6;12659:16;:24::i;:::-;:65;;12651:105;;;;;;;;;;;;:::i;:::-;12520:343;;;12803:4;:20;;;12787:12;:36;;12779:76;;;;;;;;;;;;:::i;:::-;12876:79;12884:10;12896:8;12906;12916:11;12929;12942:12;12876:79;;;;;;;;;;;:::i;:::-;;;;;;;;12967:83;12984:6;12993:12;13007:15;13013:8;13007:5;:15::i;:::-;:42;;13040:8;13007:42;;;13025:4;13007:42;12967:83;;;;;;;;:::i;:::-;;;;;;;;10882:2174;;;;;;;;;;;;;;:::o;8622:81::-;8668:7;8691:6;;;8622:81;:::o;9839:29::-;;;:::o;9516:230::-;8835:12;:10;:12::i;:::-;8824:23;;:7;:5;:7::i;:::-;:23;;;8816:68;;;;;;;;;;;;:::i;:::-;9601:22:::1;::::0;::::1;9593:73;;;;;;;;;;;;:::i;:::-;9699:6;::::0;;9678:38:::1;::::0;::::1;::::0;;::::1;::::0;9699:6;::::1;::::0;9678:38:::1;::::0;::::1;9723:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;9516:230::o;7304:100::-;7388:10;7304:100;:::o;13274:109::-;13347:29;;;9920:42;13347:29;13274:109;;;:::o;1395:190::-;1504:12;;;1464;1504;;;;;;;;;1482:7;;;;1497:5;;1482:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1463:54;;;1532:7;1524:55;;;;;;;;;;;;:::i;:::-;1395:190;;;:::o;597:370::-;761:12;775:17;796:5;:10;;830;842:2;846:5;807:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;796:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;760:93;;;;868:7;:57;;;;-1:-1:-1;880:11:0;;:16;;:44;;;911:4;900:24;;;;;;;;;;;;:::i;:::-;860:101;;;;;;;;;;;;:::i;:::-;597:370;;;;;:::o;6151:605::-;6278:6;6261:23;;6257:494;;;6354:12;6368:19;6399:5;6391:19;;6428:28;;;6458:6;;6411:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6391:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6353:113;;;;6480:7;6475:269;;6500:20;6523:56;6548:6;6523:56;;;;;;;;;;;;;;;;;:24;:56::i;:::-;6500:79;;6639:6;6594:5;:15;;;6610:10;6630:4;6594:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;6590:145;;;6667:6;6660:14;;;;;;;;;;;:::i;6590:145::-;6710:13;6716:6;6710:13;;;;;;:::i;:::-;;;;;;;;6475:269;;6257:494;;;6151:605;;;;:::o;973:416::-;1172:12;1186:17;1207:5;:10;;1241;1253:4;1259:2;1263:5;1218:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:63;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1171:99;;;;1285:7;:57;;;;-1:-1:-1;1297:11:0;;:16;;:44;;;1328:4;1317:24;;;;;;;;;;;;:::i;:::-;1277:106;;;;;;;;;;;;:::i;13062:206::-;13136:7;13156:12;13162:5;13156;:12::i;:::-;13152:111;;;-1:-1:-1;13186:15:0;;;;13179:22;;13152:111;13231:24;;;;;:15;;;;;;:24;;13247:7;;13231:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13224:31;;13152:111;13062:206;;;;:::o;3761:1769::-;3840:13;4109:2;4094:4;:11;:17;;:38;;;;;4115:4;4120:1;4115:7;;;;;;;;;;;;;;;:17;;4094:38;:59;;;;;4136:4;4141:1;4136:7;;;;;;;;;;;;;;;:17;;4094:59;:80;;;;;4157:4;4162:1;4157:7;;;;;;;;;;;;;;;:17;;4094:80;:101;;;;;4178:4;4183:1;4178:7;;;;;;;;;;;;;;;:17;;4094:101;4090:1356;;;4206:20;4394:2;4388:4;4384:13;4374:23;;4878:6;4872:20;4867:2;:25;4852:4;:11;:40;;4844:74;;;;;;;;;;;;:::i;:::-;4958:6;4976;4941:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4927:62;;;;;4090:1356;5071:4;:11;5086:2;5071:17;:38;;;;;5092:4;5097:1;5092:7;;;;;;;;;;;;;;;:17;;5071:38;:59;;;;;5113:4;5118:1;5113:7;;;;;;;;;;;;;;;:17;;5071:59;:80;;;;;5134:4;5139:1;5134:7;;;;;;;;;;;;;;;:17;;5071:80;:101;;;;;5155:4;5160:1;5155:7;;;;;;;;;;;;;;;:17;;5071:101;5067:379;;;5349:2;5339:13;;5333:20;5401:6;5419:12;5333:20;5419:6;:12::i;:::-;5384:53;;;;;;;;;:::i;5067:379::-;5485:6;5505:12;5512:4;5505:6;:12::i;:::-;5468:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5454:70;;3761:1769;;;;:::o;2707:132::-;2796:5;;;2791:16;;;;2783:50;;;;;;;;;;;;:::i;2570:131::-;2659:5;;;2654:16;;;;2646:49;;;;;;;;;;;;:::i;2845:145::-;2903:9;2929:6;;;:30;;-1:-1:-1;;2944:5:0;;;2958:1;2953;2944:5;2953:1;2939:15;;;;;:20;2929:30;2921:63;;;;;;;;;;;;:::i;5536:119::-;5589:13;5618:31;5642:5;5625:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;5661:425;5833:11;;5718:13;;5740:53;;:16;;5847:1;5833:15;;;5829:19;5819:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5819:30:0;;5800:49;;5856:12;:3;5860:1;5856:6;;;;;;;;;;;:12;;;;;;;;;;;5875;:3;5879:1;5875:6;;;;;;;;;;;:12;;;;;;;;;;;5899:9;5894:162;5918:4;:11;5914:1;:15;5894:162;;;5962:8;5988:1;5977:4;5982:1;5977:7;;;;;;;;;;;;;;:12;;:7;5971:19;5962:29;;;;;;;;;;5945:3;5953:1;5949;:5;5957:1;5949:9;5945:14;;;;;;;;;;;:46;;;;;;;;;;;6017:8;6032:4;6037:1;6032:7;;;;;;;;;;;;;;;6042:4;6026:21;6017:31;;;;;;;;;;6000:3;6008:1;6004;:5;6012:1;6004:9;6000:14;;;;;;;;;;;:48;;;;;;;;;;-1:-1:-1;5931:3:0;;5894:162;;;-1:-1:-1;6076:3:0;5661:425;-1:-1:-1;;;5661:425:0:o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;:::-;262:5;84:189;-1:-1:-1;;;84:189:1:o;278:327::-;;;407:2;395:9;386:7;382:23;378:32;375:2;;;428:6;420;413:22;375:2;472:9;459:23;491:33;518:5;491:33;:::i;:::-;543:5;595:2;580:18;;;;567:32;;-1:-1:-1;;;365:240:1:o;610:297::-;;730:2;718:9;709:7;705:23;701:32;698:2;;;751:6;743;736:22;698:2;788:9;782:16;841:5;834:13;827:21;820:5;817:32;807:2;;868:6;860;853:22;912:1098;;;;;1139:2;1127:9;1118:7;1114:23;1110:32;1107:2;;;1160:6;1152;1145:22;1107:2;1204:9;1191:23;1223:33;1250:5;1223:33;:::i;:::-;1275:5;-1:-1:-1;1331:2:1;1316:18;;1303:32;1354:18;1384:14;;;1381:2;;;1416:6;1408;1401:22;1381:2;1444:22;;;;1500:3;1482:16;;;1478:26;1475:2;;;1522:6;1514;1507:22;1475:2;1550;;-1:-1:-1;1605:2:1;1590:18;;1577:32;;1621:16;;;1618:2;;;1655:6;1647;1640:22;1618:2;1698:8;1687:9;1683:24;1673:34;;1745:7;1738:4;1734:2;1730:13;1726:27;1716:2;;1772:6;1764;1757:22;1716:2;1817;1804:16;1843:2;1835:6;1832:14;1829:2;;;1864:6;1856;1849:22;1829:2;1914:7;1909:2;1900:6;1896:2;1892:15;1888:24;1885:37;1882:2;;;1940:6;1932;1925:22;1882:2;1097:913;;;;-1:-1:-1;;1976:2:1;1968:11;;-1:-1:-1;;;1097:913:1:o;2293:194::-;;2416:2;2404:9;2395:7;2391:23;2387:32;2384:2;;;2437:6;2429;2422:22;2384:2;-1:-1:-1;2465:16:1;;2374:113;-1:-1:-1;2374:113:1:o;2492:416::-;;2699:66;2691:6;2687:79;2682:3;2675:92;2810:6;2802;2798:1;2793:3;2789:11;2776:41;2840:16;;2858:1;2836:24;2869:15;;;2836:24;2665:243;-1:-1:-1;;2665:243:1:o;2913:274::-;;3080:6;3074:13;3096:53;3142:6;3137:3;3130:4;3122:6;3118:17;3096:53;:::i;:::-;3165:16;;;;;3050:137;-1:-1:-1;;3050:137:1:o;3192:773::-;;3611:6;3605:13;3627:53;3673:6;3668:3;3661:4;3653:6;3649:17;3627:53;:::i;:::-;3741:8;3702:16;;;3727:23;;;3775:13;;3797:65;3775:13;3849:1;3838:13;;3831:4;3819:17;;3797:65;:::i;:::-;3929:3;3925:1;3881:20;;;;3917:10;;;3910:23;3957:1;3949:10;;3581:384;-1:-1:-1;;;;3581:384:1:o;3970:775::-;;4389:6;4383:13;4405:53;4451:6;4446:3;4439:4;4431:6;4427:17;4405:53;:::i;:::-;4519:10;4480:16;;;4505:25;;;4555:13;;4577:65;4555:13;4629:1;4618:13;;4611:4;4599:17;;4577:65;:::i;:::-;4709:3;4705:1;4661:20;;;;4697:10;;;4690:23;4737:1;4729:10;;4359:386;-1:-1:-1;;;;4359:386:1:o;4750:773::-;;5169:6;5163:13;5185:53;5231:6;5226:3;5219:4;5211:6;5207:17;5185:53;:::i;:::-;5299:8;5260:16;;;5285:23;;;5333:13;;5355:65;5333:13;5407:1;5396:13;;5389:4;5377:17;;5355:65;:::i;5528:182::-;5657:19;;;5701:2;5692:12;;5647:63::o;5715:226::-;5891:42;5879:55;;;;5861:74;;5849:2;5834:18;;5816:125::o;5946:335::-;6138:42;6207:15;;;6189:34;;6259:15;;6254:2;6239:18;;6232:43;6116:2;6101:18;;6083:198::o;6286:668::-;6619:42;6688:15;;;6670:34;;6740:15;;;6735:2;6720:18;;6713:43;6792:15;;;6787:2;6772:18;;6765:43;6844:15;;6839:2;6824:18;;6817:43;6891:3;6876:19;;6869:35;;;;6935:3;6920:19;;6913:35;;;;6596:3;6581:19;;6563:391::o;6959:398::-;7171:42;7240:15;;;7222:34;;7292:15;;;;7287:2;7272:18;;7265:43;7339:2;7324:18;;7317:34;;;;7149:2;7134:18;;7116:241::o;7362:297::-;7566:42;7554:55;;;;7536:74;;7641:2;7626:18;;7619:34;7524:2;7509:18;;7491:168::o;7664:398::-;7876:42;7945:15;;;7927:34;;7992:2;7977:18;;7970:34;;;;8040:15;;;8035:2;8020:18;;8013:43;7854:2;7839:18;;7821:241::o;8067:588::-;;8268:2;8257:9;8250:21;8307:6;8302:2;8291:9;8287:18;8280:34;8364:6;8356;8351:2;8340:9;8336:18;8323:48;8420:4;8415:2;8406:6;8395:9;8391:22;8387:31;8380:45;8552:2;8482:66;8477:2;8469:6;8465:15;8461:88;8450:9;8446:104;8442:113;8434:121;;8605:42;8597:6;8593:55;8586:4;8575:9;8571:20;8564:85;8240:415;;;;;;:::o;8660:442::-;;8809:2;8798:9;8791:21;8841:6;8835:13;8884:6;8879:2;8868:9;8864:18;8857:34;8900:66;8959:6;8954:2;8943:9;8939:18;8934:2;8926:6;8922:15;8900:66;:::i;:::-;9018:2;9006:15;9023:66;9002:88;8987:104;;;;9093:2;8983:113;;8781:321;-1:-1:-1;;8781:321:1:o;9107:345::-;9309:2;9291:21;;;9348:2;9328:18;;;9321:30;9387:23;9382:2;9367:18;;9360:51;9443:2;9428:18;;9281:171::o;9457:355::-;9659:2;9641:21;;;9698:2;9678:18;;;9671:30;9737:33;9732:2;9717:18;;9710:61;9803:2;9788:18;;9631:181::o;9817:342::-;10019:2;10001:21;;;10058:2;10038:18;;;10031:30;10097:20;10092:2;10077:18;;10070:48;10150:2;10135:18;;9991:168::o;10164:402::-;10366:2;10348:21;;;10405:2;10385:18;;;10378:30;10444:34;10439:2;10424:18;;10417:62;10515:8;10510:2;10495:18;;10488:36;10556:3;10541:19;;10338:228::o;10571:344::-;10773:2;10755:21;;;10812:2;10792:18;;;10785:30;10851:22;10846:2;10831:18;;10824:50;10906:2;10891:18;;10745:170::o;10920:344::-;11122:2;11104:21;;;11161:2;11141:18;;;11134:30;11200:22;11195:2;11180:18;;11173:50;11255:2;11240:18;;11094:170::o;11269:341::-;11471:2;11453:21;;;11510:2;11490:18;;;11483:30;11549:19;11544:2;11529:18;;11522:47;11601:2;11586:18;;11443:167::o;11615:351::-;11817:2;11799:21;;;11856:2;11836:18;;;11829:30;11895:29;11890:2;11875:18;;11868:57;11957:2;11942:18;;11789:177::o;11971:350::-;12173:2;12155:21;;;12212:2;12192:18;;;12185:30;12251:28;12246:2;12231:18;;12224:56;12312:2;12297:18;;12145:176::o;12326:356::-;12528:2;12510:21;;;12547:18;;;12540:30;12606:34;12601:2;12586:18;;12579:62;12673:2;12658:18;;12500:182::o;12687:347::-;12889:2;12871:21;;;12928:2;12908:18;;;12901:30;12967:25;12962:2;12947:18;;12940:53;13025:2;13010:18;;12861:173::o;13039:345::-;13241:2;13223:21;;;13280:2;13260:18;;;13253:30;13319:23;13314:2;13299:18;;13292:51;13375:2;13360:18;;13213:171::o;13389:399::-;13591:2;13573:21;;;13630:2;13610:18;;;13603:30;13669:34;13664:2;13649:18;;13642:62;13740:5;13735:2;13720:18;;13713:33;13778:3;13763:19;;13563:225::o;13793:400::-;13995:2;13977:21;;;14034:2;14014:18;;;14007:30;14073:34;14068:2;14053:18;;14046:62;14144:6;14139:2;14124:18;;14117:34;14183:3;14168:19;;13967:226::o;14380:592::-;;;14523:11;14510:25;14613:66;14602:8;14586:14;14582:29;14578:102;14558:18;14554:127;14544:2;;14698:4;14692;14685:18;14544:2;14728:33;;14780:20;;;-1:-1:-1;14823:18:1;14812:30;;14809:2;;;14858:4;14852;14845:18;14809:2;14894:4;14882:17;;-1:-1:-1;14925:14:1;14921:27;;;14911:38;;14908:2;;;14962:1;14959;14952:12;14908:2;14474:498;;;;;:::o;14977:258::-;15049:1;15059:113;15073:6;15070:1;15067:13;15059:113;;;15149:11;;;15143:18;15130:11;;;15123:39;15095:2;15088:10;15059:113;;;15190:6;15187:1;15184:13;15181:2;;;-1:-1:-1;;15225:1:1;15207:16;;15200:27;15030:205::o;15240:156::-;15328:42;15321:5;15317:54;15310:5;15307:65;15297:2;;15386:1;15383;15376:12;15297:2;15287:109;:::o
Swarm Source
ipfs://68ef9be5c857f15e870fcb5c0518ef8740a1e8f5c49ddb10f6256f4b20d39b7f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.