More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Swap
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.15; import { ServiceRegistry } from "../../core/ServiceRegistry.sol"; import { IERC20 } from "../../interfaces/tokens/IERC20.sol"; import { SafeMath } from "../../libs/SafeMath.sol"; import { SafeERC20 } from "../../libs/SafeERC20.sol"; import { ONE_INCH_AGGREGATOR } from "../../core/constants/Common.sol"; import { SwapData } from "../../core/types/Common.sol"; contract Swap { using SafeMath for uint256; using SafeERC20 for IERC20; address public feeBeneficiaryAddress; uint256 public constant feeBase = 10000; mapping(uint256 => bool) public feeTiers; mapping(address => bool) public authorizedAddresses; ServiceRegistry internal immutable registry; error ReceivedLess(uint256 receiveAtLeast, uint256 received); error Unauthorized(); error FeeTierDoesNotExist(uint256 fee); error FeeTierAlreadyExists(uint256 fee); error SwapFailed(); constructor( address authorisedCaller, address feeBeneficiary, uint256 _initialFee, address _registry ) { authorizedAddresses[authorisedCaller] = true; authorizedAddresses[feeBeneficiary] = true; _addFeeTier(_initialFee); feeBeneficiaryAddress = feeBeneficiary; registry = ServiceRegistry(_registry); } event AssetSwap( address indexed assetIn, address indexed assetOut, uint256 amountIn, uint256 amountOut ); event FeePaid(address indexed beneficiary, uint256 amount, address token); event SlippageSaved(uint256 minimumPossible, uint256 actualAmount); event FeeTierAdded(uint256 fee); event FeeTierRemoved(uint256 fee); modifier onlyAuthorised() { if (!authorizedAddresses[msg.sender]) { revert Unauthorized(); } _; } function _addFeeTier(uint256 fee) private { if (feeTiers[fee]) { revert FeeTierAlreadyExists(fee); } feeTiers[fee] = true; emit FeeTierAdded(fee); } function addFeeTier(uint256 fee) public onlyAuthorised { _addFeeTier(fee); } function removeFeeTier(uint256 fee) public onlyAuthorised { if (!feeTiers[fee]) { revert FeeTierDoesNotExist(fee); } feeTiers[fee] = false; emit FeeTierRemoved(fee); } function verifyFee(uint256 feeId) public view returns (bool valid) { valid = feeTiers[feeId]; } function _swap( address fromAsset, address toAsset, uint256 amount, uint256 receiveAtLeast, address callee, bytes calldata withData ) internal returns (uint256 balance) { IERC20(fromAsset).safeApprove(callee, amount); (bool success, ) = callee.call(withData); if (!success) { revert SwapFailed(); } balance = IERC20(toAsset).balanceOf(address(this)); emit SlippageSaved(receiveAtLeast, balance); if (balance < receiveAtLeast) { revert ReceivedLess(receiveAtLeast, balance); } emit SlippageSaved(receiveAtLeast, balance); emit AssetSwap(fromAsset, toAsset, amount, balance); } function _collectFee( address asset, uint256 fromAmount, uint256 fee ) internal returns (uint256 amount) { bool isFeeValid = verifyFee(fee); if (!isFeeValid) { revert FeeTierDoesNotExist(fee); } uint256 feeToTransfer = fromAmount.mul(fee).div(fee.add(feeBase)); if (fee > 0) { IERC20(asset).safeTransfer(feeBeneficiaryAddress, feeToTransfer); emit FeePaid(feeBeneficiaryAddress, feeToTransfer, asset); } amount = fromAmount.sub(feeToTransfer); } function swapTokens( SwapData calldata swapData ) public returns (uint256) { IERC20(swapData.fromAsset).safeTransferFrom(msg.sender, address(this), swapData.amount); uint256 amountFrom = swapData.amount; if (swapData.collectFeeInFromToken) { amountFrom = _collectFee(swapData.fromAsset, swapData.amount, swapData.fee); } address oneInch = registry.getRegisteredService(ONE_INCH_AGGREGATOR); uint256 toTokenBalance = _swap( swapData.fromAsset, swapData.toAsset, amountFrom, swapData.receiveAtLeast, oneInch, swapData.withData ); if (!swapData.collectFeeInFromToken) { toTokenBalance = _collectFee(swapData.toAsset, toTokenBalance, swapData.fee); } uint256 fromTokenBalance = IERC20(swapData.fromAsset).balanceOf(address(this)); if (fromTokenBalance > 0) { IERC20(swapData.fromAsset).safeTransfer(msg.sender, fromTokenBalance); } IERC20(swapData.toAsset).safeTransfer(msg.sender, toTokenBalance); return toTokenBalance; } }
//SPDX-License-Identifier: Unlicense pragma solidity >=0.8.1; contract ServiceRegistry { mapping(address => bool) public trustedAddresses; mapping(bytes32 => uint256) public lastExecuted; mapping(bytes32 => address) private namedService; address public owner; uint256 public requiredDelay = 0; // big enough that any power of miner over timestamp does not matter modifier validateInput(uint256 len) { require(msg.data.length == len, "illegal-padding"); _; } modifier delayedExecution() { bytes32 operationHash = keccak256(msg.data); uint256 reqDelay = requiredDelay; // solhint-disable-next-line not-rely-on-time uint256 blockTimestamp = block.timestamp; if (lastExecuted[operationHash] == 0 && reqDelay > 0) { // not called before, scheduled for execution lastExecuted[operationHash] = blockTimestamp; emit ChangeScheduled(msg.data, operationHash, blockTimestamp + reqDelay); } else { require(blockTimestamp - reqDelay > lastExecuted[operationHash], "delay-to-small"); emit ChangeApplied(msg.data, blockTimestamp); _; lastExecuted[operationHash] = 0; } } modifier onlyOwner() { require(msg.sender == owner, "only-owner"); _; } constructor(uint256 initialDelay) { require(initialDelay < type(uint256).max, "risk-of-overflow"); requiredDelay = initialDelay; owner = msg.sender; } function transferOwnership(address newOwner) public onlyOwner validateInput(36) delayedExecution { owner = newOwner; } function changeRequiredDelay(uint256 newDelay) public onlyOwner validateInput(36) delayedExecution { requiredDelay = newDelay; } function addTrustedAddress(address trustedAddress) public onlyOwner validateInput(36) delayedExecution { trustedAddresses[trustedAddress] = true; } function removeTrustedAddress(address trustedAddress) public onlyOwner validateInput(36) { trustedAddresses[trustedAddress] = false; } function getServiceNameHash(string calldata name) public pure returns (bytes32) { return keccak256(abi.encodePacked(name)); } function addNamedService(bytes32 serviceNameHash, address serviceAddress) public onlyOwner validateInput(68) delayedExecution { require(namedService[serviceNameHash] == address(0), "service-override"); namedService[serviceNameHash] = serviceAddress; } function updateNamedService(bytes32 serviceNameHash, address serviceAddress) public onlyOwner validateInput(68) delayedExecution { require(namedService[serviceNameHash] != address(0), "service-does-not-exist"); namedService[serviceNameHash] = serviceAddress; } function removeNamedService(bytes32 serviceNameHash) public onlyOwner validateInput(36) { require(namedService[serviceNameHash] != address(0), "service-does-not-exist"); namedService[serviceNameHash] = address(0); emit RemoveApplied(serviceNameHash); } function getRegisteredService(string memory serviceName) public view returns (address) { return getServiceAddress(keccak256(abi.encodePacked(serviceName))); } function getServiceAddress(bytes32 serviceNameHash) public view returns (address serviceAddress) { serviceAddress = namedService[serviceNameHash]; require(serviceAddress != address(0), "no-such-service"); } function clearScheduledExecution(bytes32 scheduledExecution) public onlyOwner validateInput(36) { require(lastExecuted[scheduledExecution] > 0, "execution-not-scheduled"); lastExecuted[scheduledExecution] = 0; emit ChangeCancelled(scheduledExecution); } event ChangeScheduled(bytes data, bytes32 dataHash, uint256 firstPossibleExecutionTime); event ChangeCancelled(bytes32 data); event ChangeApplied(bytes data, uint256 firstPossibleExecutionTime); event RemoveApplied(bytes32 nameHash); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; interface IERC20 { function totalSupply() external view returns (uint256 supply); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom( address _from, address _to, uint256 _value ) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function decimals() external view returns (uint256 digits); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.1; import { IERC20 } from "../interfaces/tokens/IERC20.sol"; import { Address } from "./Address.sol"; import { SafeMath } from "./SafeMath.sol"; library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {ERC20-approve}, and its usage is discouraged. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance) ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity ^0.8.15; string constant OPERATION_STORAGE = "OperationStorage"; string constant OPERATION_EXECUTOR = "OperationExecutor"; string constant OPERATIONS_REGISTRY = "OperationsRegistry"; string constant ONE_INCH_AGGREGATOR = "OneInchAggregator"; string constant WETH = "WETH"; string constant DAI = "DAI"; uint256 constant RAY = 10**27; bytes32 constant NULL = ""; string constant PULL_TOKEN_ACTION = "PullToken"; string constant SEND_TOKEN_ACTION = "SendToken"; string constant SET_APPROVAL_ACTION = "SetApproval"; string constant TAKE_FLASH_LOAN_ACTION = "TakeFlashloan"; string constant WRAP_ETH = "WrapEth"; string constant UNWRAP_ETH = "UnwrapEth"; string constant RETURN_FUNDS_ACTION = "ReturnFunds"; string constant UNISWAP_ROUTER = "UniswapRouter"; string constant SWAP = "Swap"; address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
pragma solidity ^0.8.15; struct FlashloanData { uint256 amount; bool dsProxyFlashloan; Call[] calls; } struct PullTokenData { address asset; address from; uint256 amount; } struct SendTokenData { address asset; address to; uint256 amount; } struct SetApprovalData { address asset; address delegate; uint256 amount; } struct SwapData { address fromAsset; address toAsset; uint256 amount; uint256 receiveAtLeast; uint256 fee; bytes withData; bool collectFeeInFromToken; } struct Call { bytes32 targetHash; bytes callData; } struct Operation { uint8 currentAction; bytes32[] actions; } struct WrapEthData { uint256 amount; } struct UnwrapEthData { uint256 amount; } struct ReturnFundsData { address asset; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.1; library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); if (success) { return returndata; } if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } revert(errorMessage); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"authorisedCaller","type":"address"},{"internalType":"address","name":"feeBeneficiary","type":"address"},{"internalType":"uint256","name":"_initialFee","type":"uint256"},{"internalType":"address","name":"_registry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTierAlreadyExists","type":"error"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTierDoesNotExist","type":"error"},{"inputs":[{"internalType":"uint256","name":"receiveAtLeast","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"name":"ReceivedLess","type":"error"},{"inputs":[],"name":"SwapFailed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetIn","type":"address"},{"indexed":true,"internalType":"address","name":"assetOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"AssetSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"FeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTierAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTierRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimumPossible","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"actualAmount","type":"uint256"}],"name":"SlippageSaved","type":"event"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"addFeeTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeBeneficiaryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeTiers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"removeFeeTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"fromAsset","type":"address"},{"internalType":"address","name":"toAsset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"receiveAtLeast","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"bytes","name":"withData","type":"bytes"},{"internalType":"bool","name":"collectFeeInFromToken","type":"bool"}],"internalType":"struct SwapData","name":"swapData","type":"tuple"}],"name":"swapTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeId","type":"uint256"}],"name":"verifyFee","outputs":[{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162001fd938038062001fd98339818101604052810190620000379190620002e8565b6001600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620000f8826200017660201b60201c565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505050505062000388565b6001600082815260200190815260200160002060009054906101000a900460ff1615620001dc57806040517f4552f1cf000000000000000000000000000000000000000000000000000000008152600401620001d391906200036b565b60405180910390fd5b600180600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507fbc87ca7b5649466568014d9ee8ea80f5c5bda3313ef710f49c283aa88a750933816040516200023891906200036b565b60405180910390a150565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002758262000248565b9050919050565b620002878162000268565b81146200029357600080fd5b50565b600081519050620002a7816200027c565b92915050565b6000819050919050565b620002c281620002ad565b8114620002ce57600080fd5b50565b600081519050620002e281620002b7565b92915050565b6000806000806080858703121562000305576200030462000243565b5b6000620003158782880162000296565b9450506020620003288782880162000296565b93505060406200033b87828801620002d1565b92505060606200034e8782880162000296565b91505092959194509250565b6200036581620002ad565b82525050565b60006020820190506200038260008301846200035a565b92915050565b608051611c35620003a4600039600061029d0152611c356000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80635207ce821161005b5780635207ce821461013957806395e911a814610157578063a001c36714610175578063f19e207e1461019157610088565b8063230ed44a1461008d5780632b5e4aab146100bd5780632c835492146100ed57806342b53e5f1461011d575b600080fd5b6100a760048036038101906100a291906112bd565b6101c1565b6040516100b49190611305565b60405180910390f35b6100d760048036038101906100d291906112bd565b6101e1565b6040516100e49190611305565b60405180910390f35b61010760048036038101906101029190611344565b61020b565b604051610114919061139c565b60405180910390f35b610137600480360381019061013291906112bd565b610510565b005b61014161065b565b60405161014e91906113f8565b60405180910390f35b61015f61067f565b60405161016c919061139c565b60405180910390f35b61018f600480360381019061018a91906112bd565b610685565b005b6101ab60048036038101906101a6919061143f565b610714565b6040516101b89190611305565b60405180910390f35b60016020528060005260406000206000915054906101000a900460ff1681565b60006001600083815260200190815260200160002060009054906101000a900460ff169050919050565b60006102503330846040013585600001602081019061022a919061143f565b73ffffffffffffffffffffffffffffffffffffffff16610734909392919063ffffffff16565b6000826040013590508260c001602081019061026c9190611498565b1561029957610296836000016020810190610287919061143f565b846040013585608001356107bd565b90505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630851f3bd6040518060400160405280601181526020017f4f6e65496e636841676772656761746f720000000000000000000000000000008152506040518263ffffffff1660e01b8152600401610329919061155e565b602060405180830381865afa158015610346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036a9190611595565b905060006103b3856000016020810190610384919061143f565b866020016020810190610397919061143f565b858860600135868a8060a001906103ae91906115d1565b61092d565b90508460c00160208101906103c89190611498565b6103f0576103ed8560200160208101906103e2919061143f565b8287608001356107bd565b90505b6000856000016020810190610405919061143f565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161043d91906113f8565b602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190611649565b905060008111156104c7576104c633828860000160208101906104a1919061143f565b73ffffffffffffffffffffffffffffffffffffffff16610ba89092919063ffffffff16565b5b61050433838860200160208101906104df919061143f565b73ffffffffffffffffffffffffffffffffffffffff16610ba89092919063ffffffff16565b81945050505050919050565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610593576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600082815260200190815260200160002060009054906101000a900460ff166105f557806040517f095f4a510000000000000000000000000000000000000000000000000000000081526004016105ec919061139c565b60405180910390fd5b60006001600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2b4584016031d9a0d1fc722a5f384f606370058bfcc1354c24264dbd139d67da81604051610650919061139c565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610708576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071181610c2e565b50565b60026020528060005260406000206000915054906101000a900460ff1681565b6107b7846323b872dd60e01b85858560405160240161075593929190611676565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b50505050565b6000806107c9836101e1565b90508061080d57826040517f095f4a51000000000000000000000000000000000000000000000000000000008152600401610804919061139c565b60405180910390fd5b600061084861082761271086610dbd90919063ffffffff16565b61083a8688610e1b90919063ffffffff16565b610e9590919063ffffffff16565b9050600084111561090f5761089e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828873ffffffffffffffffffffffffffffffffffffffff16610ba89092919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4756ac0011cd274810feab06c84b22207f6cf4374017214d7edbb4793e01b1dc82886040516109069291906116ad565b60405180910390a25b6109228186610edf90919063ffffffff16565b925050509392505050565b600061095a84878a73ffffffffffffffffffffffffffffffffffffffff16610f299092919063ffffffff16565b60008473ffffffffffffffffffffffffffffffffffffffff168484604051610983929190611715565b6000604051808303816000865af19150503d80600081146109c0576040519150601f19603f3d011682016040523d82523d6000602084013e6109c5565b606091505b5050905080610a00576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a3991906113f8565b602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611649565b91507fcfe2b36dff205c560fb985b2c9220458365fa2dcafb12305e0c565e84b84255b8683604051610aad92919061172e565b60405180910390a185821015610afc5785826040517f9061b0fc000000000000000000000000000000000000000000000000000000008152600401610af392919061172e565b60405180910390fd5b7fcfe2b36dff205c560fb985b2c9220458365fa2dcafb12305e0c565e84b84255b8683604051610b2d92919061172e565b60405180910390a18773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f945805326745354040d87a85082ddbf37400ed05d6ffe9ae1452b4c5cfe298838985604051610b9492919061172e565b60405180910390a350979650505050505050565b610c298363a9059cbb60e01b8484604051602401610bc7929190611757565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b505050565b6001600082815260200190815260200160002060009054906101000a900460ff1615610c9157806040517f4552f1cf000000000000000000000000000000000000000000000000000000008152600401610c88919061139c565b60405180910390fd5b600180600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507fbc87ca7b5649466568014d9ee8ea80f5c5bda3313ef710f49c283aa88a75093381604051610ceb919061139c565b60405180910390a150565b6000610d58826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166110319092919063ffffffff16565b9050600081511115610db85780806020019051810190610d789190611795565b610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae90611834565b60405180910390fd5b5b505050565b6000808284610dcc9190611883565b905083811015610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890611925565b60405180910390fd5b8091505092915050565b6000808303610e2d5760009050610e8f565b60008284610e3b9190611945565b9050828482610e4a91906119ce565b14610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190611a71565b60405180910390fd5b809150505b92915050565b6000610ed783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611049565b905092915050565b6000610f2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110ac565b905092915050565b610fab8363095ea7b360e01b846000604051602401610f49929190611ae3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b61102c8363095ea7b360e01b8484604051602401610fca929190611757565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b505050565b60606110408484600085611110565b90509392505050565b60008083118290611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087919061155e565b60405180910390fd5b506000838561109f91906119ce565b9050809150509392505050565b60008383111582906110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb919061155e565b60405180910390fd5b50600083856111039190611b0c565b9050809150509392505050565b606061111b85611232565b61115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190611b8c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111839190611be8565b60006040518083038185875af1925050503d80600081146111c0576040519150601f19603f3d011682016040523d82523d6000602084013e6111c5565b606091505b509150915081156111da57809250505061122a565b6000815111156111ed5780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611221919061155e565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561127457506000801b8214155b92505050919050565b600080fd5b600080fd5b6000819050919050565b61129a81611287565b81146112a557600080fd5b50565b6000813590506112b781611291565b92915050565b6000602082840312156112d3576112d261127d565b5b60006112e1848285016112a8565b91505092915050565b60008115159050919050565b6112ff816112ea565b82525050565b600060208201905061131a60008301846112f6565b92915050565b600080fd5b600060e0828403121561133b5761133a611320565b5b81905092915050565b60006020828403121561135a5761135961127d565b5b600082013567ffffffffffffffff81111561137857611377611282565b5b61138484828501611325565b91505092915050565b61139681611287565b82525050565b60006020820190506113b1600083018461138d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113e2826113b7565b9050919050565b6113f2816113d7565b82525050565b600060208201905061140d60008301846113e9565b92915050565b61141c816113d7565b811461142757600080fd5b50565b60008135905061143981611413565b92915050565b6000602082840312156114555761145461127d565b5b60006114638482850161142a565b91505092915050565b611475816112ea565b811461148057600080fd5b50565b6000813590506114928161146c565b92915050565b6000602082840312156114ae576114ad61127d565b5b60006114bc84828501611483565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156114ff5780820151818401526020810190506114e4565b8381111561150e576000848401525b50505050565b6000601f19601f8301169050919050565b6000611530826114c5565b61153a81856114d0565b935061154a8185602086016114e1565b61155381611514565b840191505092915050565b600060208201905081810360008301526115788184611525565b905092915050565b60008151905061158f81611413565b92915050565b6000602082840312156115ab576115aa61127d565b5b60006115b984828501611580565b91505092915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115ee576115ed6115c2565b5b80840192508235915067ffffffffffffffff8211156116105761160f6115c7565b5b60208301925060018202360383131561162c5761162b6115cc565b5b509250929050565b60008151905061164381611291565b92915050565b60006020828403121561165f5761165e61127d565b5b600061166d84828501611634565b91505092915050565b600060608201905061168b60008301866113e9565b61169860208301856113e9565b6116a5604083018461138d565b949350505050565b60006040820190506116c2600083018561138d565b6116cf60208301846113e9565b9392505050565b600081905092915050565b82818337600083830152505050565b60006116fc83856116d6565b93506117098385846116e1565b82840190509392505050565b60006117228284866116f0565b91508190509392505050565b6000604082019050611743600083018561138d565b611750602083018461138d565b9392505050565b600060408201905061176c60008301856113e9565b611779602083018461138d565b9392505050565b60008151905061178f8161146c565b92915050565b6000602082840312156117ab576117aa61127d565b5b60006117b984828501611780565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061181e602a836114d0565b9150611829826117c2565b604082019050919050565b6000602082019050818103600083015261184d81611811565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061188e82611287565b915061189983611287565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118ce576118cd611854565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061190f601b836114d0565b915061191a826118d9565b602082019050919050565b6000602082019050818103600083015261193e81611902565b9050919050565b600061195082611287565b915061195b83611287565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561199457611993611854565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006119d982611287565b91506119e483611287565b9250826119f4576119f361199f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a5b6021836114d0565b9150611a66826119ff565b604082019050919050565b60006020820190508181036000830152611a8a81611a4e565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b6000611acd611ac8611ac384611a91565b611aa8565b611a9b565b9050919050565b611add81611ab2565b82525050565b6000604082019050611af860008301856113e9565b611b056020830184611ad4565b9392505050565b6000611b1782611287565b9150611b2283611287565b925082821015611b3557611b34611854565b5b828203905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611b76601d836114d0565b9150611b8182611b40565b602082019050919050565b60006020820190508181036000830152611ba581611b69565b9050919050565b600081519050919050565b6000611bc282611bac565b611bcc81856116d6565b9350611bdc8185602086016114e1565b80840191505092915050565b6000611bf48284611bb7565b91508190509291505056fea26469706673582212204b300d879b82017a795621eddf709ac659a9a7dbf53eb377c8607f42205b3c3364736f6c634300080f003300000000000000000000000085f9b7408afe6ceb5e46223451f5d4b832b522dc000000000000000000000000c7b548ad9cf38721810246c079b2d8083aba890900000000000000000000000000000000000000000000000000000000000000140000000000000000000000009b4ae7b164d195df9c4da5d08be88b2848b2eada
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c80635207ce821161005b5780635207ce821461013957806395e911a814610157578063a001c36714610175578063f19e207e1461019157610088565b8063230ed44a1461008d5780632b5e4aab146100bd5780632c835492146100ed57806342b53e5f1461011d575b600080fd5b6100a760048036038101906100a291906112bd565b6101c1565b6040516100b49190611305565b60405180910390f35b6100d760048036038101906100d291906112bd565b6101e1565b6040516100e49190611305565b60405180910390f35b61010760048036038101906101029190611344565b61020b565b604051610114919061139c565b60405180910390f35b610137600480360381019061013291906112bd565b610510565b005b61014161065b565b60405161014e91906113f8565b60405180910390f35b61015f61067f565b60405161016c919061139c565b60405180910390f35b61018f600480360381019061018a91906112bd565b610685565b005b6101ab60048036038101906101a6919061143f565b610714565b6040516101b89190611305565b60405180910390f35b60016020528060005260406000206000915054906101000a900460ff1681565b60006001600083815260200190815260200160002060009054906101000a900460ff169050919050565b60006102503330846040013585600001602081019061022a919061143f565b73ffffffffffffffffffffffffffffffffffffffff16610734909392919063ffffffff16565b6000826040013590508260c001602081019061026c9190611498565b1561029957610296836000016020810190610287919061143f565b846040013585608001356107bd565b90505b60007f0000000000000000000000009b4ae7b164d195df9c4da5d08be88b2848b2eada73ffffffffffffffffffffffffffffffffffffffff16630851f3bd6040518060400160405280601181526020017f4f6e65496e636841676772656761746f720000000000000000000000000000008152506040518263ffffffff1660e01b8152600401610329919061155e565b602060405180830381865afa158015610346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036a9190611595565b905060006103b3856000016020810190610384919061143f565b866020016020810190610397919061143f565b858860600135868a8060a001906103ae91906115d1565b61092d565b90508460c00160208101906103c89190611498565b6103f0576103ed8560200160208101906103e2919061143f565b8287608001356107bd565b90505b6000856000016020810190610405919061143f565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161043d91906113f8565b602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190611649565b905060008111156104c7576104c633828860000160208101906104a1919061143f565b73ffffffffffffffffffffffffffffffffffffffff16610ba89092919063ffffffff16565b5b61050433838860200160208101906104df919061143f565b73ffffffffffffffffffffffffffffffffffffffff16610ba89092919063ffffffff16565b81945050505050919050565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610593576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600082815260200190815260200160002060009054906101000a900460ff166105f557806040517f095f4a510000000000000000000000000000000000000000000000000000000081526004016105ec919061139c565b60405180910390fd5b60006001600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2b4584016031d9a0d1fc722a5f384f606370058bfcc1354c24264dbd139d67da81604051610650919061139c565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610708576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071181610c2e565b50565b60026020528060005260406000206000915054906101000a900460ff1681565b6107b7846323b872dd60e01b85858560405160240161075593929190611676565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b50505050565b6000806107c9836101e1565b90508061080d57826040517f095f4a51000000000000000000000000000000000000000000000000000000008152600401610804919061139c565b60405180910390fd5b600061084861082761271086610dbd90919063ffffffff16565b61083a8688610e1b90919063ffffffff16565b610e9590919063ffffffff16565b9050600084111561090f5761089e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828873ffffffffffffffffffffffffffffffffffffffff16610ba89092919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4756ac0011cd274810feab06c84b22207f6cf4374017214d7edbb4793e01b1dc82886040516109069291906116ad565b60405180910390a25b6109228186610edf90919063ffffffff16565b925050509392505050565b600061095a84878a73ffffffffffffffffffffffffffffffffffffffff16610f299092919063ffffffff16565b60008473ffffffffffffffffffffffffffffffffffffffff168484604051610983929190611715565b6000604051808303816000865af19150503d80600081146109c0576040519150601f19603f3d011682016040523d82523d6000602084013e6109c5565b606091505b5050905080610a00576040517f81ceff3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a3991906113f8565b602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611649565b91507fcfe2b36dff205c560fb985b2c9220458365fa2dcafb12305e0c565e84b84255b8683604051610aad92919061172e565b60405180910390a185821015610afc5785826040517f9061b0fc000000000000000000000000000000000000000000000000000000008152600401610af392919061172e565b60405180910390fd5b7fcfe2b36dff205c560fb985b2c9220458365fa2dcafb12305e0c565e84b84255b8683604051610b2d92919061172e565b60405180910390a18773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f945805326745354040d87a85082ddbf37400ed05d6ffe9ae1452b4c5cfe298838985604051610b9492919061172e565b60405180910390a350979650505050505050565b610c298363a9059cbb60e01b8484604051602401610bc7929190611757565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b505050565b6001600082815260200190815260200160002060009054906101000a900460ff1615610c9157806040517f4552f1cf000000000000000000000000000000000000000000000000000000008152600401610c88919061139c565b60405180910390fd5b600180600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507fbc87ca7b5649466568014d9ee8ea80f5c5bda3313ef710f49c283aa88a75093381604051610ceb919061139c565b60405180910390a150565b6000610d58826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166110319092919063ffffffff16565b9050600081511115610db85780806020019051810190610d789190611795565b610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae90611834565b60405180910390fd5b5b505050565b6000808284610dcc9190611883565b905083811015610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890611925565b60405180910390fd5b8091505092915050565b6000808303610e2d5760009050610e8f565b60008284610e3b9190611945565b9050828482610e4a91906119ce565b14610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190611a71565b60405180910390fd5b809150505b92915050565b6000610ed783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611049565b905092915050565b6000610f2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110ac565b905092915050565b610fab8363095ea7b360e01b846000604051602401610f49929190611ae3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b61102c8363095ea7b360e01b8484604051602401610fca929190611757565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cf6565b505050565b60606110408484600085611110565b90509392505050565b60008083118290611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087919061155e565b60405180910390fd5b506000838561109f91906119ce565b9050809150509392505050565b60008383111582906110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb919061155e565b60405180910390fd5b50600083856111039190611b0c565b9050809150509392505050565b606061111b85611232565b61115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190611b8c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111839190611be8565b60006040518083038185875af1925050503d80600081146111c0576040519150601f19603f3d011682016040523d82523d6000602084013e6111c5565b606091505b509150915081156111da57809250505061122a565b6000815111156111ed5780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611221919061155e565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561127457506000801b8214155b92505050919050565b600080fd5b600080fd5b6000819050919050565b61129a81611287565b81146112a557600080fd5b50565b6000813590506112b781611291565b92915050565b6000602082840312156112d3576112d261127d565b5b60006112e1848285016112a8565b91505092915050565b60008115159050919050565b6112ff816112ea565b82525050565b600060208201905061131a60008301846112f6565b92915050565b600080fd5b600060e0828403121561133b5761133a611320565b5b81905092915050565b60006020828403121561135a5761135961127d565b5b600082013567ffffffffffffffff81111561137857611377611282565b5b61138484828501611325565b91505092915050565b61139681611287565b82525050565b60006020820190506113b1600083018461138d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113e2826113b7565b9050919050565b6113f2816113d7565b82525050565b600060208201905061140d60008301846113e9565b92915050565b61141c816113d7565b811461142757600080fd5b50565b60008135905061143981611413565b92915050565b6000602082840312156114555761145461127d565b5b60006114638482850161142a565b91505092915050565b611475816112ea565b811461148057600080fd5b50565b6000813590506114928161146c565b92915050565b6000602082840312156114ae576114ad61127d565b5b60006114bc84828501611483565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156114ff5780820151818401526020810190506114e4565b8381111561150e576000848401525b50505050565b6000601f19601f8301169050919050565b6000611530826114c5565b61153a81856114d0565b935061154a8185602086016114e1565b61155381611514565b840191505092915050565b600060208201905081810360008301526115788184611525565b905092915050565b60008151905061158f81611413565b92915050565b6000602082840312156115ab576115aa61127d565b5b60006115b984828501611580565b91505092915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126115ee576115ed6115c2565b5b80840192508235915067ffffffffffffffff8211156116105761160f6115c7565b5b60208301925060018202360383131561162c5761162b6115cc565b5b509250929050565b60008151905061164381611291565b92915050565b60006020828403121561165f5761165e61127d565b5b600061166d84828501611634565b91505092915050565b600060608201905061168b60008301866113e9565b61169860208301856113e9565b6116a5604083018461138d565b949350505050565b60006040820190506116c2600083018561138d565b6116cf60208301846113e9565b9392505050565b600081905092915050565b82818337600083830152505050565b60006116fc83856116d6565b93506117098385846116e1565b82840190509392505050565b60006117228284866116f0565b91508190509392505050565b6000604082019050611743600083018561138d565b611750602083018461138d565b9392505050565b600060408201905061176c60008301856113e9565b611779602083018461138d565b9392505050565b60008151905061178f8161146c565b92915050565b6000602082840312156117ab576117aa61127d565b5b60006117b984828501611780565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061181e602a836114d0565b9150611829826117c2565b604082019050919050565b6000602082019050818103600083015261184d81611811565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061188e82611287565b915061189983611287565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118ce576118cd611854565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061190f601b836114d0565b915061191a826118d9565b602082019050919050565b6000602082019050818103600083015261193e81611902565b9050919050565b600061195082611287565b915061195b83611287565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561199457611993611854565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006119d982611287565b91506119e483611287565b9250826119f4576119f361199f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a5b6021836114d0565b9150611a66826119ff565b604082019050919050565b60006020820190508181036000830152611a8a81611a4e565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b6000611acd611ac8611ac384611a91565b611aa8565b611a9b565b9050919050565b611add81611ab2565b82525050565b6000604082019050611af860008301856113e9565b611b056020830184611ad4565b9392505050565b6000611b1782611287565b9150611b2283611287565b925082821015611b3557611b34611854565b5b828203905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611b76601d836114d0565b9150611b8182611b40565b602082019050919050565b60006020820190508181036000830152611ba581611b69565b9050919050565b600081519050919050565b6000611bc282611bac565b611bcc81856116d6565b9350611bdc8185602086016114e1565b80840191505092915050565b6000611bf48284611bb7565b91508190509291505056fea26469706673582212204b300d879b82017a795621eddf709ac659a9a7dbf53eb377c8607f42205b3c3364736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000085f9b7408afe6ceb5e46223451f5d4b832b522dc000000000000000000000000c7b548ad9cf38721810246c079b2d8083aba890900000000000000000000000000000000000000000000000000000000000000140000000000000000000000009b4ae7b164d195df9c4da5d08be88b2848b2eada
-----Decoded View---------------
Arg [0] : authorisedCaller (address): 0x85f9b7408afE6CEb5E46223451f5d4b832B522dc
Arg [1] : feeBeneficiary (address): 0xC7b548AD9Cf38721810246C079b2d8083aba8909
Arg [2] : _initialFee (uint256): 20
Arg [3] : _registry (address): 0x9b4Ae7b164d195df9C4Da5d08Be88b2848b2EaDA
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000085f9b7408afe6ceb5e46223451f5d4b832b522dc
Arg [1] : 000000000000000000000000c7b548ad9cf38721810246c079b2d8083aba8909
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 0000000000000000000000009b4ae7b164d195df9c4da5d08be88b2848b2eada
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.