Overview
ETH Balance
0.009823484678145066 ETH
ETH Value
$38.31 (@ $3,899.98/ETH)More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0xd81120d1480dabc74668a3fd62e68ea90edc2cf9053af976c80cdf8746a08a0d | - | (pending) | 42 days ago | IN | 0.0000994684 ETH | (Pending) | |||
0x57a6f919809d629ad1943e26b9deec09b6877ed1678ee6d9ed21cf945a88105a | - | (pending) | 44 days ago | IN | 0.00845379 ETH | (Pending) | |||
Send Deposits | 11681780 | 2 hrs ago | IN | 0.0000967 ETH | 0.00001937 | ||||
Send Deposits | 11681621 | 2 hrs ago | IN | 0.00002146 ETH | 0.00002145 | ||||
Send Deposits | 11678634 | 4 hrs ago | IN | 0.00139701 ETH | 0.00002645 | ||||
Send Deposits | 11676173 | 7 hrs ago | IN | 0.00040032 ETH | 0.00002488 | ||||
Send Deposits | 11672052 | 10 hrs ago | IN | 0.00242673 ETH | 0.00002716 | ||||
Send Deposits | 11670351 | 12 hrs ago | IN | 0.00087889 ETH | 0.00002577 | ||||
Send Deposits | 11669380 | 12 hrs ago | IN | 0.00032408 ETH | 0.00003089 | ||||
Send Deposits | 11668745 | 13 hrs ago | IN | 0.00002268 ETH | 0.00016645 | ||||
Send Deposits | 11667162 | 14 hrs ago | IN | 0.0003812 ETH | 0.00002467 | ||||
Send Deposits | 11666163 | 15 hrs ago | IN | 0.0000139 ETH | 0.00002232 | ||||
Send Deposits | 11666155 | 15 hrs ago | IN | 0.00002683 ETH | 0.00002259 | ||||
Send Deposits | 11666149 | 15 hrs ago | IN | 0.00001946 ETH | 0.00002275 | ||||
Send Deposits | 11664943 | 16 hrs ago | IN | 0.00319835 ETH | 0.00002018 | ||||
Send Deposits | 11663314 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002624 | ||||
Send Deposits | 11663313 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002758 | ||||
Send Deposits | 11663313 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002532 | ||||
Send Deposits | 11663312 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002532 | ||||
Send Deposits | 11663311 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002758 | ||||
Send Deposits | 11663310 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002758 | ||||
Send Deposits | 11663310 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002532 | ||||
Send Deposits | 11663309 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002984 | ||||
Send Deposits | 11663308 | 18 hrs ago | IN | 0.00033582 ETH | 0.00002532 | ||||
Send Deposits | 11663298 | 18 hrs ago | IN | 0.00002407 ETH | 0.00002561 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11681780 | 2 hrs ago | 0.00982348 ETH | ||||
11681780 | 2 hrs ago | 0.00992008 ETH | ||||
11681621 | 2 hrs ago | 0.00982338 ETH | ||||
11681621 | 2 hrs ago | 0.00984485 ETH | ||||
11678634 | 4 hrs ago | 0.00982338 ETH | ||||
11678634 | 4 hrs ago | 0.01121443 ETH | ||||
11676173 | 7 hrs ago | 0.00981741 ETH | ||||
11676173 | 7 hrs ago | 0.01021773 ETH | ||||
11672052 | 10 hrs ago | 0.0098174 ETH | ||||
11672052 | 10 hrs ago | 0.01224404 ETH | ||||
11670351 | 12 hrs ago | 0.0098173 ETH | ||||
11670351 | 12 hrs ago | 0.01069564 ETH | ||||
11669380 | 12 hrs ago | 0.00981674 ETH | ||||
11669380 | 12 hrs ago | 0.01014073 ETH | ||||
11668745 | 13 hrs ago | 0.00981664 ETH | ||||
11668745 | 13 hrs ago | 0.0098392 ETH | ||||
11667162 | 14 hrs ago | 0.00981651 ETH | ||||
11667162 | 14 hrs ago | 0.01019771 ETH | ||||
11666163 | 15 hrs ago | 0.00981651 ETH | ||||
11666163 | 15 hrs ago | 0.00983042 ETH | ||||
11666155 | 15 hrs ago | 0.00981651 ETH | ||||
11666155 | 15 hrs ago | 0.0098418 ETH | ||||
11666149 | 15 hrs ago | 0.00981496 ETH | ||||
11666149 | 15 hrs ago | 0.00983432 ETH | ||||
11664943 | 16 hrs ago | 0.00981486 ETH |
Loading...
Loading
Contract Name:
GasLZV2
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./OptimizedOApp.sol"; contract GasLZV2 is OptimizedOApp { constructor(address _owner, address _endpoint) OptimizedOApp(_owner, _endpoint) {} event SentMessages(uint32[] eids, bytes[] messages, uint value, uint fee, address from); event SentDeposits(uint256[] params, address to, uint value, uint fee, address from); function sendMessages( uint32[] calldata _dstEids, bytes[] calldata _messages ) external payable { uint256 fee; for (uint i; i < _messages.length; i++) { fee += _sendMessage(_dstEids[i], _messages[i]); } require(msg.value >= fee, "Fee Not Met"); emit SentMessages(_dstEids, _messages, msg.value, fee, msg.sender); } function sendDeposits( uint256[] calldata _depositParams, address _to ) external payable { uint256 fee; for (uint i; i < _depositParams.length; i++) { fee += _sendDeposit(uint32(_depositParams[i] >> 224), uint128(_depositParams[i]), _to); } require(msg.value >= fee, "Fee Not Met"); emit SentDeposits(_depositParams, _to, msg.value, fee, msg.sender); } function _sendMessage(uint32 _dstEid, bytes calldata _message) internal returns (uint256 fee) { MessagingReceipt memory receipt = _lzSend(_dstEid, _message, createReceiveOption(_dstEid), address(this).balance, address(this)); return receipt.fee.nativeFee; } function _sendDeposit(uint32 _dstEid, uint128 _amount, address _to) internal returns (uint256 fee) { MessagingReceipt memory receipt = _lzSend(_dstEid, "", createNativeDropOption(_dstEid, _amount, _to), address(this).balance, address(this)); return receipt.fee.nativeFee; } function createReceiveOption(uint32 _dstEid) public view returns (bytes memory) { return abi.encodePacked( abi.encodePacked(uint16(3)), uint8(1), uint16(16+1), uint8(1), abi.encodePacked(getGasLimit(_dstEid)) ); } function createNativeDropOption(uint32 _dstEid, uint128 _nativeAmount, address _to) public view returns (bytes memory) { return abi.encodePacked( createReceiveOption(_dstEid), uint8(1), uint16(32+16+1), uint8(2), abi.encodePacked(_nativeAmount, bytes32(uint256(uint160(_to)))) ); } function estimateFees( uint32[] calldata _dstEids, bytes[] calldata _messages, bytes[] calldata _options ) external view returns (uint256[] memory nativeFees) { nativeFees = new uint256[](_dstEids.length); for (uint i; i < _dstEids.length; i++) { nativeFees[i] = quote(_dstEids[i], _messages[i], _options[i]); } } function quote(uint32 _dstEid, bytes calldata _message, bytes memory _options) public view returns (uint256 nativeFee) { MessagingFee memory fee = endpoint.quote(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), address(this)); return fee.nativeFee; } function withdraw(address token, uint256 amount) external onlyOwner { bool s; if (token == address(0)) { (s,) = msg.sender.call{value: address(this).balance}(""); } else { (s,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, amount)); } require(s, "Withdraw Failed"); } receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../Ownable.sol"; import "./ILayerZeroEndpointV2.sol"; import "./IMessageLibManager.sol"; import "./IUlnBase.sol"; abstract contract OptimizedOApp is Ownable { ILayerZeroEndpointV2 public immutable endpoint; mapping(uint32 => bytes32) public peers; mapping(uint32 => uint128) public gasLimitLookup; uint128 public defaultGasLimit = 20_000; constructor(address _owner, address _endpoint) { endpoint = ILayerZeroEndpointV2(_endpoint); _initializeOwner(_owner); endpoint.setDelegate(_owner); } // Receive function nextNonce(uint32, bytes32) public pure virtual returns (uint64 nonce) { return 0; } function allowInitializePath(Origin calldata origin) public view virtual returns (bool) { return getPeer(origin.srcEid) == origin.sender; } function lzReceive( Origin calldata, bytes32, bytes calldata, address, bytes calldata ) external pure { return; } // Send function _lzSend( uint32 _dstEid, bytes memory _message, bytes memory _options, uint _nativeFee, address _refundAddress ) internal virtual returns (MessagingReceipt memory receipt) { return endpoint.send{value: _nativeFee}(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), _refundAddress); } function getPeer(uint32 _dstEid) internal view returns (bytes32) { bytes32 trustedRemote = peers[_dstEid]; if (trustedRemote == 0) { return bytes32(uint256(uint160(address(this)))); } else { return trustedRemote; } } function getGasLimit(uint32 _dstEid) internal view returns (uint128) { uint128 gasLimit = gasLimitLookup[_dstEid]; if (gasLimit == 0) { return defaultGasLimit; } else { return gasLimit; } } function setPeers( uint32[] calldata _remoteEids, bytes32[] calldata _remoteAddresses ) external onlyOwner { require(_remoteEids.length == _remoteAddresses.length, "Length Mismatch"); for (uint i; i < _remoteEids.length; i++) { peers[_remoteEids[i]] = _remoteAddresses[i]; } } function setGasLimit( uint32[] calldata _remoteEids, uint128[] calldata _gasLimits ) external onlyOwner { require(_remoteEids.length == _gasLimits.length, "Length Mismatch"); for (uint i; i < _remoteEids.length; i++) { gasLimitLookup[_remoteEids[i]] = _gasLimits[i]; } } function setDefaultGasLimit(uint128 _defaultGasLimit) external onlyOwner { defaultGasLimit = _defaultGasLimit; } function setDelegate(address _delegate) external onlyOwner { endpoint.setDelegate(_delegate); } function setUlnConfigs(address _lib, uint64 confirmations, uint32[] calldata eids, address dvn) external onlyOwner { SetConfigParam[] memory configs = new SetConfigParam[](eids.length); for(uint i; i < eids.length; i++) { address[] memory opt = new address[](0); address[] memory req = new address[](1); req[0] = dvn; bytes memory config = abi.encode(UlnConfig(confirmations, uint8(1), 0, 0, req, opt)); configs[i] = SetConfigParam({eid: eids[i], configType: 2, config: config}); } IMessageLibManager(address(endpoint)).setConfig(address(this), _lib, configs); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Simple single owner authorization mixin. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol) /// /// @dev Note: /// This implementation does NOT auto-initialize the owner to `msg.sender`. /// You MUST call the `_initializeOwner` in the constructor / initializer. /// /// While the ownable portion follows /// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility, /// the nomenclature for the 2-step ownership handover may be unique to this codebase. abstract contract Ownable { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CUSTOM ERRORS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The caller is not authorized to call the function. error Unauthorized(); /// @dev The `newOwner` cannot be the zero address. error NewOwnerIsZeroAddress(); /// @dev The `pendingOwner` does not have a valid handover request. error NoHandoverRequest(); /// @dev Cannot double-initialize. error AlreadyInitialized(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* EVENTS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The ownership is transferred from `oldOwner` to `newOwner`. /// This event is intentionally kept the same as OpenZeppelin's Ownable to be /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), /// despite it not being as lightweight as a single argument event. event OwnershipTransferred(address indexed oldOwner, address indexed newOwner); /// @dev An ownership handover to `pendingOwner` has been requested. event OwnershipHandoverRequested(address indexed pendingOwner); /// @dev The ownership handover to `pendingOwner` has been canceled. event OwnershipHandoverCanceled(address indexed pendingOwner); /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`. uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE = 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0; /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE = 0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d; /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE = 0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* STORAGE */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The owner slot is given by: /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`. /// It is intentionally chosen to be a high value /// to avoid collision with lower slots. /// The choice of manual storage layout is to enable compatibility /// with both regular and upgradeable contracts. bytes32 internal constant _OWNER_SLOT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927; /// The ownership handover slot of `newOwner` is given by: /// ``` /// mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED)) /// let handoverSlot := keccak256(0x00, 0x20) /// ``` /// It stores the expiry timestamp of the two-step ownership handover. uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* INTERNAL FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Override to return true to make `_initializeOwner` prevent double-initialization. function _guardInitializeOwner() internal pure virtual returns (bool guard) {} /// @dev Initializes the owner directly without authorization guard. /// This function must be called upon initialization, /// regardless of whether the contract is upgradeable or not. /// This is to enable generalization to both regular and upgradeable contracts, /// and to save gas in case the initial owner is not the caller. /// For performance reasons, this function will not check if there /// is an existing owner. function _initializeOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT if sload(ownerSlot) { mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`. revert(0x1c, 0x04) } // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } else { /// @solidity memory-safe-assembly assembly { // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(_OWNER_SLOT, newOwner) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } } /// @dev Sets the owner directly without authorization guard. function _setOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) } } else { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, newOwner) } } } /// @dev Throws if the sender is not the owner. function _checkOwner() internal view virtual { /// @solidity memory-safe-assembly assembly { // If the caller is not the stored owner, revert. if iszero(eq(caller(), sload(_OWNER_SLOT))) { mstore(0x00, 0x82b42900) // `Unauthorized()`. revert(0x1c, 0x04) } } } /// @dev Returns how long a two-step ownership handover is valid for in seconds. /// Override to return a different value if needed. /// Made internal to conserve bytecode. Wrap it in a public function if needed. function _ownershipHandoverValidFor() internal view virtual returns (uint64) { return 48 * 3600; } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC UPDATE FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Allows the owner to transfer the ownership to `newOwner`. function transferOwnership(address newOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { if iszero(shl(96, newOwner)) { mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`. revert(0x1c, 0x04) } } _setOwner(newOwner); } /// @dev Allows the owner to renounce their ownership. function renounceOwnership() public payable virtual onlyOwner { _setOwner(address(0)); } /// @dev Request a two-step ownership handover to the caller. /// The request will automatically expire in 48 hours (172800 seconds) by default. function requestOwnershipHandover() public payable virtual { unchecked { uint256 expires = block.timestamp + _ownershipHandoverValidFor(); /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to `expires`. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), expires) // Emit the {OwnershipHandoverRequested} event. log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller()) } } } /// @dev Cancels the two-step ownership handover to the caller, if any. function cancelOwnershipHandover() public payable virtual { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), 0) // Emit the {OwnershipHandoverCanceled} event. log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller()) } } /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`. /// Reverts if there is no existing ownership handover requested by `pendingOwner`. function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) let handoverSlot := keccak256(0x0c, 0x20) // If the handover does not exist, or has expired. if gt(timestamp(), sload(handoverSlot)) { mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`. revert(0x1c, 0x04) } // Set the handover slot to 0. sstore(handoverSlot, 0) } _setOwner(pendingOwner); } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC READ FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Returns the owner of the contract. function owner() public view virtual returns (address result) { /// @solidity memory-safe-assembly assembly { result := sload(_OWNER_SLOT) } } /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`. function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { // Compute the handover slot. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) // Load the handover slot. result := sload(keccak256(0x0c, 0x20)) } } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* MODIFIERS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Marks a function as only callable by the owner. modifier onlyOwner() virtual { _checkOwner(); _; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; struct MessagingParams { uint32 dstEid; bytes32 receiver; bytes message; bytes options; bool payInLzToken; } struct MessagingReceipt { bytes32 guid; uint64 nonce; MessagingFee fee; } struct MessagingFee { uint256 nativeFee; uint256 lzTokenFee; } struct Origin { uint32 srcEid; bytes32 sender; uint64 nonce; } interface ILayerZeroEndpointV2 { event PacketSent(bytes encodedPayload, bytes options, address sendLibrary); event PacketVerified(Origin origin, address receiver, bytes32 payloadHash); event PacketDelivered(Origin origin, address receiver); event LzReceiveAlert( address indexed receiver, address indexed executor, Origin origin, bytes32 guid, uint256 gas, uint256 value, bytes message, bytes extraData, bytes reason ); event LzTokenSet(address token); event DelegateSet(address sender, address delegate); function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory); function send( MessagingParams calldata _params, address _refundAddress ) external payable returns (MessagingReceipt memory); function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external; function verifiable(Origin calldata _origin, address _receiver) external view returns (bool); function initializable(Origin calldata _origin, address _receiver) external view returns (bool); function lzReceive( Origin calldata _origin, address _receiver, bytes32 _guid, bytes calldata _message, bytes calldata _extraData ) external payable; // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external; function setLzToken(address _lzToken) external; function lzToken() external view returns (address); function nativeToken() external view returns (address); function setDelegate(address _delegate) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; struct SetConfigParam { uint32 eid; uint32 configType; bytes config; } interface IMessageLibManager { struct Timeout { address lib; uint256 expiry; } event LibraryRegistered(address newLib); event DefaultSendLibrarySet(uint32 eid, address newLib); event DefaultReceiveLibrarySet(uint32 eid, address newLib); event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry); event SendLibrarySet(address sender, uint32 eid, address newLib); event ReceiveLibrarySet(address receiver, uint32 eid, address newLib); event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout); function registerLibrary(address _lib) external; function isRegisteredLibrary(address _lib) external view returns (bool); function getRegisteredLibraries() external view returns (address[] memory); function setDefaultSendLibrary(uint32 _eid, address _newLib) external; function defaultSendLibrary(uint32 _eid) external view returns (address); function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _timeout) external; function defaultReceiveLibrary(uint32 _eid) external view returns (address); function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external; function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry); function isSupportedEid(uint32 _eid) external view returns (bool); function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool); /// ------------------- OApp interfaces ------------------- function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external; function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib); function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool); function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external; function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault); function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _gracePeriod) external; function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry); function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external; function getConfig( address _oapp, address _lib, uint32 _eid, uint32 _configType ) external view returns (bytes memory config); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; struct UlnConfig { uint64 confirmations; // we store the length of required DVNs and optional DVNs instead of using DVN.length directly to save gas uint8 requiredDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default) uint8 optionalDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default) uint8 optionalDVNThreshold; // (0, optionalDVNCount] address[] requiredDVNs; // no duplicates. sorted an an ascending order. allowed overlap with optionalDVNs address[] optionalDVNs; // no duplicates. sorted an an ascending order. allowed overlap with requiredDVNs } interface IUlnBase { function getUlnConfig(address, uint32) external returns (UlnConfig memory); }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 200000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_endpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"params","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentDeposits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"indexed":false,"internalType":"bytes[]","name":"messages","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentMessages","type":"event"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"}],"name":"allowInitializePath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"uint128","name":"_nativeAmount","type":"uint128"},{"internalType":"address","name":"_to","type":"address"}],"name":"createNativeDropOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"}],"name":"createReceiveOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultGasLimit","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"},{"internalType":"bytes[]","name":"_options","type":"bytes[]"}],"name":"estimateFees","outputs":[{"internalType":"uint256[]","name":"nativeFees","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"gasLimitLookup","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nextNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"peers","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_options","type":"bytes"}],"name":"quote","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_depositParams","type":"uint256[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"sendDeposits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"}],"name":"sendMessages","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_defaultGasLimit","type":"uint128"}],"name":"setDefaultGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"uint128[]","name":"_gasLimits","type":"uint128[]"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"bytes32[]","name":"_remoteAddresses","type":"bytes32[]"}],"name":"setPeers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lib","type":"address"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"internalType":"address","name":"dvn","type":"address"}],"name":"setUlnConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052600280546001600160801b031916614e201790553480156200002557600080fd5b50604051620026b5380380620026b5833981016040819052620000489162000126565b6001600160a01b03811660805281816200006282620000cd565b60805160405163ca5eb5e160e01b81526001600160a01b0384811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000aa57600080fd5b505af1158015620000bf573d6000803e3d6000fd5b50505050505050506200015e565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b80516001600160a01b03811681146200012157600080fd5b919050565b600080604083850312156200013a57600080fd5b620001458362000109565b9150620001556020840162000109565b90509250929050565b60805161251f62000196600039600081816102de0152818161097001528181610e7d015281816113240152611605015261251f6000f3fe6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a3146104e4578063fccbe22014610504578063fee81cf414610524578063ff7bd03d1461055757600080fd5b8063ec089c411461049e578063f04e283e146104be578063f2fde38b146104d157600080fd5b8063bb0b6a53116100bb578063bb0b6a5314610430578063ca5eb5e11461046b578063d29e9f321461048b57600080fd5b80638da5cb5b146103a657806394ca88aa146103da57806395368d2e1461040757600080fd5b80633772df581161014e578063715018a611610128578063715018a6146103255780637154cc651461032d5780637d25a05e1461035a57806389a281b61461039357600080fd5b80633772df58146102a457806354d1f13d146102c45780635e280f11146102cc57600080fd5b806329b85fff1161017f57806329b85fff146101ff5780632b94e4991461021f57806333ebcb741461023f57600080fd5b8063128c9991146101b157806313137d65146101d357806325692962146101f757600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611777565b610587565b005b3480156101df57600080fd5b506101d16101ee366004611866565b50505050505050565b6101d16106c8565b34801561020b57600080fd5b506101d161021a366004611925565b610718565b34801561022b57600080fd5b506101d161023a36600461195d565b610763565b34801561024b57600080fd5b5061027e61025a3660046119e9565b6001602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b057600080fd5b506101d16102bf366004611777565b6109e3565b6101d1610acb565b3480156102d857600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b6101d1610b07565b34801561033957600080fd5b5061034d610348366004611a04565b610b1b565b60405161029b9190611ab5565b34801561036657600080fd5b5061037a610375366004611ac8565b610bd4565b60405167ffffffffffffffff909116815260200161029b565b6101d16103a1366004611af2565b610bdd565b3480156103b257600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610300565b3480156103e657600080fd5b506103fa6103f5366004611b3d565b610cf8565b60405161029b9190611bd7565b34801561041357600080fd5b5060025461027e906fffffffffffffffffffffffffffffffff1681565b34801561043c57600080fd5b5061045d61044b3660046119e9565b60006020819052908152604090205481565b60405190815260200161029b565b34801561047757600080fd5b506101d1610486366004611c1b565b610e30565b6101d1610499366004611777565b610ed5565b3480156104aa57600080fd5b5061034d6104b93660046119e9565b611007565b6101d16104cc366004611c1b565b6110e3565b6101d16104df366004611c1b565b611123565b3480156104f057600080fd5b506101d16104ff366004611c36565b61114a565b34801561051057600080fd5b5061045d61051f366004611cd0565b61131f565b34801561053057600080fd5b5061045d61053f366004611c1b565b63389a75e1600c908152600091909152602090205490565b34801561056357600080fd5b50610577610572366004611dbe565b61144c565b604051901515815260200161029b565b61058f61146f565b8281146105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b838110156106c15782828281811061061a5761061a611dda565b905060200201602081019061062f9190611925565b6001600087878581811061064557610645611dda565b905060200201602081019061065a91906119e9565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055806106b981611e38565b915050610600565b5050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b61072061146f565b600280547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b61076b61146f565b60008267ffffffffffffffff81111561078657610786611c52565b6040519080825280602002602001820160405280156107d357816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816107a45790505b50905060005b838110156109325760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061082057610820611dda565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091018201526040805160c08101825267ffffffffffffffff8b1681526001818401526000818301819052606082018190526080820185905260a082018690529151919261088c9201611ec1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152606083019091529150808989878181106108d3576108d3611dda565b90506020020160208101906108e891906119e9565b63ffffffff16815260026020820152604001829052855186908690811061091157610911611dda565b6020026020010181905250505050808061092a90611e38565b9150506107d9565b506040517f6dbd9f9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636dbd9f90906109a99030908a908690600401611f5c565b600060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b50505050505050505050565b6109eb61146f565b828114610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064016105f4565b60005b838110156106c157828282818110610a7157610a71611dda565b90506020020135600080878785818110610a8d57610a8d611dda565b9050602002016020810190610aa291906119e9565b63ffffffff16815260208101919091526040016000205580610ac381611e38565b915050610a57565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610b0f61146f565b610b1960006114a5565b565b6060610b2684611007565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b16602082015273ffffffffffffffffffffffffffffffffffffffff84166030820152600190603190600290605001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bbc959493929160200161202b565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610c4657610c2860e0868684818110610c0057610c00611dda565b90506020020135901c868684818110610c1b57610c1b611dda565b905060200201358561150b565b610c3290836120c4565b915080610c3e81611e38565b915050610be1565b5080341015610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610cea969594939291906120d7565b60405180910390a150505050565b60608567ffffffffffffffff811115610d1357610d13611c52565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b86811015610e2557610df6888883818110610d5f57610d5f611dda565b9050602002016020810190610d7491906119e9565b878784818110610d8657610d86611dda565b9050602002810190610d98919061215b565b878786818110610daa57610daa611dda565b9050602002810190610dbc919061215b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131f92505050565b828281518110610e0857610e08611dda565b602090810291909101015280610e1d81611e38565b915050610d42565b509695505050505050565b610e3861146f565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015610ec157600080fd5b505af11580156106c1573d6000803e3d6000fd5b6000805b82811015610f5257610f34868683818110610ef657610ef6611dda565b9050602002016020810190610f0b91906119e9565b858584818110610f1d57610f1d611dda565b9050602002810190610f2f919061215b565b611542565b610f3e90836120c4565b915080610f4a81611e38565b915050610ed9565b5080341015610fbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610ff89796959493929190612209565b60405180910390a15050505050565b6040517e0300000000000000000000000000000000000000000000000000000000000060208201526060906022016040516020818303038152906040526001601160016110538661158b565b60405160200161108e919060809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016815260100190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526110cd959493929160200161202b565b6040516020818303038152906040529050919050565b6110eb61146f565b63389a75e1600c52806000526020600c20805442111561111357636f5e88186000526004601cfd5b60009055611120816114a5565b50565b61112b61146f565b8060601b61114157637448fbae6000526004601cfd5b611120816114a5565b61115261146f565b600073ffffffffffffffffffffffffffffffffffffffff83166111bf5760405133904790600081818185875af1925050503d80600081146111af576040519150601f19603f3d011682016040523d82523d6000602084013e6111b4565b606091505b5050809150506112b3565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790525161126b9190612356565b6000604051808303816000865af19150503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50909150505b8061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c6564000000000000000000000000000000000060448201526064016105f4565b505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808963ffffffff16815260200161137e8a6115d6565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261140191903090600401612372565b6040805180830381865afa15801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612465565b519695505050505050565b6000602082018035906114689061146390856119e9565b6115d6565b1492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b19576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b600080611534856040518060200160405280600081525061152d888888610b1b565b47306115fb565b604001515195945050505050565b6000806115348585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061152d92508a91506110079050565b63ffffffff81166000908152600160205260408120546fffffffffffffffffffffffffffffffff16808203610bd75750506002546fffffffffffffffffffffffffffffffff16919050565b63ffffffff8116600090815260208190526040812054808203610bd757503092915050565b6116036116e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450846040518060a001604052808a63ffffffff1681526020016116608b6115d6565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b8152600401611696929190612372565b60806040518083038185885af11580156116b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d99190612481565b9695505050505050565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001611726604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261173d57600080fd5b50813567ffffffffffffffff81111561175557600080fd5b6020830191508360208260051b850101111561177057600080fd5b9250929050565b6000806000806040858703121561178d57600080fd5b843567ffffffffffffffff808211156117a557600080fd5b6117b18883890161172b565b909650945060208701359150808211156117ca57600080fd5b506117d78782880161172b565b95989497509550505050565b6000606082840312156117f557600080fd5b50919050565b60008083601f84011261180d57600080fd5b50813567ffffffffffffffff81111561182557600080fd5b60208301915083602082850101111561177057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461186157600080fd5b919050565b600080600080600080600060e0888a03121561188157600080fd5b61188b89896117e3565b965060608801359550608088013567ffffffffffffffff808211156118af57600080fd5b6118bb8b838c016117fb565b90975095508591506118cf60a08b0161183d565b945060c08a01359150808211156118e557600080fd5b506118f28a828b016117fb565b989b979a50959850939692959293505050565b80356fffffffffffffffffffffffffffffffff8116811461186157600080fd5b60006020828403121561193757600080fd5b61194082611905565b9392505050565b67ffffffffffffffff8116811461112057600080fd5b60008060008060006080868803121561197557600080fd5b61197e8661183d565b9450602086013561198e81611947565b9350604086013567ffffffffffffffff8111156119aa57600080fd5b6119b68882890161172b565b90945092506119c990506060870161183d565b90509295509295909350565b803563ffffffff8116811461186157600080fd5b6000602082840312156119fb57600080fd5b611940826119d5565b600080600060608486031215611a1957600080fd5b611a22846119d5565b9250611a3060208501611905565b9150611a3e6040850161183d565b90509250925092565b60005b83811015611a62578181015183820152602001611a4a565b50506000910152565b60008151808452611a83816020860160208601611a47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119406020830184611a6b565b60008060408385031215611adb57600080fd5b611ae4836119d5565b946020939093013593505050565b600080600060408486031215611b0757600080fd5b833567ffffffffffffffff811115611b1e57600080fd5b611b2a8682870161172b565b9094509250611a3e90506020850161183d565b60008060008060008060608789031215611b5657600080fd5b863567ffffffffffffffff80821115611b6e57600080fd5b611b7a8a838b0161172b565b90985096506020890135915080821115611b9357600080fd5b611b9f8a838b0161172b565b90965094506040890135915080821115611bb857600080fd5b50611bc589828a0161172b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015611c0f57835183529284019291840191600101611bf3565b50909695505050505050565b600060208284031215611c2d57600080fd5b6119408261183d565b60008060408385031215611c4957600080fd5b611ae48361183d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc857611cc8611c52565b604052919050565b60008060008060608587031215611ce657600080fd5b611cef856119d5565b935060208086013567ffffffffffffffff80821115611d0d57600080fd5b611d1989838a016117fb565b90965094506040880135915080821115611d3257600080fd5b818801915088601f830112611d4657600080fd5b813581811115611d5857611d58611c52565b611d88847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611c81565b91508082528984828501011115611d9e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608284031215611dd057600080fd5b61194083836117e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6957611e69611e09565b5060010190565b600081518084526020808501945080840160005b83811015611eb657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e84565b509495945050505050565b6020815267ffffffffffffffff825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611f1860e0840182611e70565b905060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c0850152611f538282611e70565b95945050505050565b6000606080830173ffffffffffffffffffffffffffffffffffffffff808816855260208188168187015260409150838287015282875180855260808801915060808160051b890101945082890160005b8281101561201a578987037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800184528151805163ffffffff908116895286820151168689015286015186880189905261200789890182611a6b565b9750509284019290840190600101611fac565b50949b9a5050505050505050505050565b6000865161203d818460208b01611a47565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516120b5816004840160208801611a47565b01600401979650505050505050565b80820180821115610bd757610bd7611e09565b60a081528560a082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87111561211057600080fd5b8660051b808960c085013773ffffffffffffffffffffffffffffffffffffffff9687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261219057600080fd5b83018035915067ffffffffffffffff8211156121ab57600080fd5b60200191503681900382131561177057600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a0808252810187905260008860c08301825b8a8110156122475763ffffffff612232846119d5565b1682526020928301929091019060010161221c565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015612313577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18e36030181126122c957600080fd5b8d01868101903567ffffffffffffffff8111156122e557600080fd5b8036038213156122f457600080fd5b6122ff8582846121c0565b958801959450505090850190600101612268565b50508094505050505084604083015283606083015261234a608083018473ffffffffffffffffffffffffffffffffffffffff169052565b98975050505050505050565b60008251612368818460208701611a47565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526123a860e0840182611a6b565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526123e38282611a6b565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b60006040828403121561242857600080fd5b6040516040810181811067ffffffffffffffff8211171561244b5761244b611c52565b604052825181526020928301519281019290925250919050565b60006040828403121561247757600080fd5b6119408383612416565b60006080828403121561249357600080fd5b6040516060810181811067ffffffffffffffff821117156124b6576124b6611c52565b6040528251815260208301516124cb81611947565b60208201526124dd8460408501612416565b6040820152939250505056fea264697066735822122003802418fd76c668814738a0ada7739fe057268c6807317835b9193206c2797364736f6c63430008150033000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a0000000000000000000000001a44076050125825900e736c501f859c50fe728c
Deployed Bytecode
0x6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a3146104e4578063fccbe22014610504578063fee81cf414610524578063ff7bd03d1461055757600080fd5b8063ec089c411461049e578063f04e283e146104be578063f2fde38b146104d157600080fd5b8063bb0b6a53116100bb578063bb0b6a5314610430578063ca5eb5e11461046b578063d29e9f321461048b57600080fd5b80638da5cb5b146103a657806394ca88aa146103da57806395368d2e1461040757600080fd5b80633772df581161014e578063715018a611610128578063715018a6146103255780637154cc651461032d5780637d25a05e1461035a57806389a281b61461039357600080fd5b80633772df58146102a457806354d1f13d146102c45780635e280f11146102cc57600080fd5b806329b85fff1161017f57806329b85fff146101ff5780632b94e4991461021f57806333ebcb741461023f57600080fd5b8063128c9991146101b157806313137d65146101d357806325692962146101f757600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611777565b610587565b005b3480156101df57600080fd5b506101d16101ee366004611866565b50505050505050565b6101d16106c8565b34801561020b57600080fd5b506101d161021a366004611925565b610718565b34801561022b57600080fd5b506101d161023a36600461195d565b610763565b34801561024b57600080fd5b5061027e61025a3660046119e9565b6001602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b057600080fd5b506101d16102bf366004611777565b6109e3565b6101d1610acb565b3480156102d857600080fd5b506103007f0000000000000000000000001a44076050125825900e736c501f859c50fe728c81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b6101d1610b07565b34801561033957600080fd5b5061034d610348366004611a04565b610b1b565b60405161029b9190611ab5565b34801561036657600080fd5b5061037a610375366004611ac8565b610bd4565b60405167ffffffffffffffff909116815260200161029b565b6101d16103a1366004611af2565b610bdd565b3480156103b257600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610300565b3480156103e657600080fd5b506103fa6103f5366004611b3d565b610cf8565b60405161029b9190611bd7565b34801561041357600080fd5b5060025461027e906fffffffffffffffffffffffffffffffff1681565b34801561043c57600080fd5b5061045d61044b3660046119e9565b60006020819052908152604090205481565b60405190815260200161029b565b34801561047757600080fd5b506101d1610486366004611c1b565b610e30565b6101d1610499366004611777565b610ed5565b3480156104aa57600080fd5b5061034d6104b93660046119e9565b611007565b6101d16104cc366004611c1b565b6110e3565b6101d16104df366004611c1b565b611123565b3480156104f057600080fd5b506101d16104ff366004611c36565b61114a565b34801561051057600080fd5b5061045d61051f366004611cd0565b61131f565b34801561053057600080fd5b5061045d61053f366004611c1b565b63389a75e1600c908152600091909152602090205490565b34801561056357600080fd5b50610577610572366004611dbe565b61144c565b604051901515815260200161029b565b61058f61146f565b8281146105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b838110156106c15782828281811061061a5761061a611dda565b905060200201602081019061062f9190611925565b6001600087878581811061064557610645611dda565b905060200201602081019061065a91906119e9565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055806106b981611e38565b915050610600565b5050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b61072061146f565b600280547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b61076b61146f565b60008267ffffffffffffffff81111561078657610786611c52565b6040519080825280602002602001820160405280156107d357816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816107a45790505b50905060005b838110156109325760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061082057610820611dda565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091018201526040805160c08101825267ffffffffffffffff8b1681526001818401526000818301819052606082018190526080820185905260a082018690529151919261088c9201611ec1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152606083019091529150808989878181106108d3576108d3611dda565b90506020020160208101906108e891906119e9565b63ffffffff16815260026020820152604001829052855186908690811061091157610911611dda565b6020026020010181905250505050808061092a90611e38565b9150506107d9565b506040517f6dbd9f9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c1690636dbd9f90906109a99030908a908690600401611f5c565b600060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b50505050505050505050565b6109eb61146f565b828114610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064016105f4565b60005b838110156106c157828282818110610a7157610a71611dda565b90506020020135600080878785818110610a8d57610a8d611dda565b9050602002016020810190610aa291906119e9565b63ffffffff16815260208101919091526040016000205580610ac381611e38565b915050610a57565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610b0f61146f565b610b1960006114a5565b565b6060610b2684611007565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b16602082015273ffffffffffffffffffffffffffffffffffffffff84166030820152600190603190600290605001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bbc959493929160200161202b565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610c4657610c2860e0868684818110610c0057610c00611dda565b90506020020135901c868684818110610c1b57610c1b611dda565b905060200201358561150b565b610c3290836120c4565b915080610c3e81611e38565b915050610be1565b5080341015610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610cea969594939291906120d7565b60405180910390a150505050565b60608567ffffffffffffffff811115610d1357610d13611c52565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b86811015610e2557610df6888883818110610d5f57610d5f611dda565b9050602002016020810190610d7491906119e9565b878784818110610d8657610d86611dda565b9050602002810190610d98919061215b565b878786818110610daa57610daa611dda565b9050602002810190610dbc919061215b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131f92505050565b828281518110610e0857610e08611dda565b602090810291909101015280610e1d81611e38565b915050610d42565b509695505050505050565b610e3861146f565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000001a44076050125825900e736c501f859c50fe728c169063ca5eb5e190602401600060405180830381600087803b158015610ec157600080fd5b505af11580156106c1573d6000803e3d6000fd5b6000805b82811015610f5257610f34868683818110610ef657610ef6611dda565b9050602002016020810190610f0b91906119e9565b858584818110610f1d57610f1d611dda565b9050602002810190610f2f919061215b565b611542565b610f3e90836120c4565b915080610f4a81611e38565b915050610ed9565b5080341015610fbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610ff89796959493929190612209565b60405180910390a15050505050565b6040517e0300000000000000000000000000000000000000000000000000000000000060208201526060906022016040516020818303038152906040526001601160016110538661158b565b60405160200161108e919060809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016815260100190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526110cd959493929160200161202b565b6040516020818303038152906040529050919050565b6110eb61146f565b63389a75e1600c52806000526020600c20805442111561111357636f5e88186000526004601cfd5b60009055611120816114a5565b50565b61112b61146f565b8060601b61114157637448fbae6000526004601cfd5b611120816114a5565b61115261146f565b600073ffffffffffffffffffffffffffffffffffffffff83166111bf5760405133904790600081818185875af1925050503d80600081146111af576040519150601f19603f3d011682016040523d82523d6000602084013e6111b4565b606091505b5050809150506112b3565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790525161126b9190612356565b6000604051808303816000865af19150503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50909150505b8061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c6564000000000000000000000000000000000060448201526064016105f4565b505050565b6000807f0000000000000000000000001a44076050125825900e736c501f859c50fe728c73ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808963ffffffff16815260200161137e8a6115d6565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261140191903090600401612372565b6040805180830381865afa15801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612465565b519695505050505050565b6000602082018035906114689061146390856119e9565b6115d6565b1492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b19576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b600080611534856040518060200160405280600081525061152d888888610b1b565b47306115fb565b604001515195945050505050565b6000806115348585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061152d92508a91506110079050565b63ffffffff81166000908152600160205260408120546fffffffffffffffffffffffffffffffff16808203610bd75750506002546fffffffffffffffffffffffffffffffff16919050565b63ffffffff8116600090815260208190526040812054808203610bd757503092915050565b6116036116e3565b7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c73ffffffffffffffffffffffffffffffffffffffff16632637a450846040518060a001604052808a63ffffffff1681526020016116608b6115d6565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b8152600401611696929190612372565b60806040518083038185885af11580156116b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d99190612481565b9695505050505050565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001611726604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261173d57600080fd5b50813567ffffffffffffffff81111561175557600080fd5b6020830191508360208260051b850101111561177057600080fd5b9250929050565b6000806000806040858703121561178d57600080fd5b843567ffffffffffffffff808211156117a557600080fd5b6117b18883890161172b565b909650945060208701359150808211156117ca57600080fd5b506117d78782880161172b565b95989497509550505050565b6000606082840312156117f557600080fd5b50919050565b60008083601f84011261180d57600080fd5b50813567ffffffffffffffff81111561182557600080fd5b60208301915083602082850101111561177057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461186157600080fd5b919050565b600080600080600080600060e0888a03121561188157600080fd5b61188b89896117e3565b965060608801359550608088013567ffffffffffffffff808211156118af57600080fd5b6118bb8b838c016117fb565b90975095508591506118cf60a08b0161183d565b945060c08a01359150808211156118e557600080fd5b506118f28a828b016117fb565b989b979a50959850939692959293505050565b80356fffffffffffffffffffffffffffffffff8116811461186157600080fd5b60006020828403121561193757600080fd5b61194082611905565b9392505050565b67ffffffffffffffff8116811461112057600080fd5b60008060008060006080868803121561197557600080fd5b61197e8661183d565b9450602086013561198e81611947565b9350604086013567ffffffffffffffff8111156119aa57600080fd5b6119b68882890161172b565b90945092506119c990506060870161183d565b90509295509295909350565b803563ffffffff8116811461186157600080fd5b6000602082840312156119fb57600080fd5b611940826119d5565b600080600060608486031215611a1957600080fd5b611a22846119d5565b9250611a3060208501611905565b9150611a3e6040850161183d565b90509250925092565b60005b83811015611a62578181015183820152602001611a4a565b50506000910152565b60008151808452611a83816020860160208601611a47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119406020830184611a6b565b60008060408385031215611adb57600080fd5b611ae4836119d5565b946020939093013593505050565b600080600060408486031215611b0757600080fd5b833567ffffffffffffffff811115611b1e57600080fd5b611b2a8682870161172b565b9094509250611a3e90506020850161183d565b60008060008060008060608789031215611b5657600080fd5b863567ffffffffffffffff80821115611b6e57600080fd5b611b7a8a838b0161172b565b90985096506020890135915080821115611b9357600080fd5b611b9f8a838b0161172b565b90965094506040890135915080821115611bb857600080fd5b50611bc589828a0161172b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015611c0f57835183529284019291840191600101611bf3565b50909695505050505050565b600060208284031215611c2d57600080fd5b6119408261183d565b60008060408385031215611c4957600080fd5b611ae48361183d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc857611cc8611c52565b604052919050565b60008060008060608587031215611ce657600080fd5b611cef856119d5565b935060208086013567ffffffffffffffff80821115611d0d57600080fd5b611d1989838a016117fb565b90965094506040880135915080821115611d3257600080fd5b818801915088601f830112611d4657600080fd5b813581811115611d5857611d58611c52565b611d88847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611c81565b91508082528984828501011115611d9e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608284031215611dd057600080fd5b61194083836117e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6957611e69611e09565b5060010190565b600081518084526020808501945080840160005b83811015611eb657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e84565b509495945050505050565b6020815267ffffffffffffffff825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611f1860e0840182611e70565b905060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c0850152611f538282611e70565b95945050505050565b6000606080830173ffffffffffffffffffffffffffffffffffffffff808816855260208188168187015260409150838287015282875180855260808801915060808160051b890101945082890160005b8281101561201a578987037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800184528151805163ffffffff908116895286820151168689015286015186880189905261200789890182611a6b565b9750509284019290840190600101611fac565b50949b9a5050505050505050505050565b6000865161203d818460208b01611a47565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516120b5816004840160208801611a47565b01600401979650505050505050565b80820180821115610bd757610bd7611e09565b60a081528560a082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87111561211057600080fd5b8660051b808960c085013773ffffffffffffffffffffffffffffffffffffffff9687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261219057600080fd5b83018035915067ffffffffffffffff8211156121ab57600080fd5b60200191503681900382131561177057600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a0808252810187905260008860c08301825b8a8110156122475763ffffffff612232846119d5565b1682526020928301929091019060010161221c565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015612313577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18e36030181126122c957600080fd5b8d01868101903567ffffffffffffffff8111156122e557600080fd5b8036038213156122f457600080fd5b6122ff8582846121c0565b958801959450505090850190600101612268565b50508094505050505084604083015283606083015261234a608083018473ffffffffffffffffffffffffffffffffffffffff169052565b98975050505050505050565b60008251612368818460208701611a47565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526123a860e0840182611a6b565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526123e38282611a6b565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b60006040828403121561242857600080fd5b6040516040810181811067ffffffffffffffff8211171561244b5761244b611c52565b604052825181526020928301519281019290925250919050565b60006040828403121561247757600080fd5b6119408383612416565b60006080828403121561249357600080fd5b6040516060810181811067ffffffffffffffff821117156124b6576124b6611c52565b6040528251815260208301516124cb81611947565b60208201526124dd8460408501612416565b6040820152939250505056fea264697066735822122003802418fd76c668814738a0ada7739fe057268c6807317835b9193206c2797364736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a0000000000000000000000001a44076050125825900e736c501f859c50fe728c
-----Decoded View---------------
Arg [0] : _owner (address): 0xBC2C7144b1F8D708A0601961da6B6102f4Af286a
Arg [1] : _endpoint (address): 0x1a44076050125825900e736c501f859c50fE728c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a
Arg [1] : 0000000000000000000000001a44076050125825900e736c501f859c50fe728c
Deployed Bytecode Sourcemap
89:3481:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:332:5;;;;;;;;;;-1:-1:-1;2339:332:5;;;;;:::i;:::-;;:::i;:::-;;896:169;;;;;;;;;;-1:-1:-1;896:169:5;;;;;:::i;:::-;;;;;;;;;9021:617:0;;;:::i;2677:124:5:-;;;;;;;;;;-1:-1:-1;2677:124:5;;;;;:::i;:::-;;:::i;2920:661::-;;;;;;;;;;-1:-1:-1;2920:661:5;;;;;:::i;:::-;;:::i;328:48::-;;;;;;;;;;-1:-1:-1;328:48:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4636:34:6;4624:47;;;4606:66;;4594:2;4579:18;328:48:5;;;;;;;;1995:338;;;;;;;;;;-1:-1:-1;1995:338:5;;;;;:::i;:::-;;:::i;9720:456:0:-;;;:::i;230:46:5:-;;;;;;;;;;;;;;;;;;5662:42:6;5650:55;;;5632:74;;5620:2;5605:18;230:46:5;5458:254:6;8762:100:0;;;:::i;2114:361:1:-;;;;;;;;;;-1:-1:-1;2114:361:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;629:104:5:-;;;;;;;;;;-1:-1:-1;629:104:5;;;;;:::i;:::-;;:::i;:::-;;;7296:18:6;7284:31;;;7266:50;;7254:2;7239:18;629:104:5;7122:200:6;799:428:1;;;;;;:::i;:::-;;:::i;11408:182:0:-;;;;;;;;;;-1:-1:-1;11562:11:0;11556:18;11408:182;;2481:381:1;;;;;;;;;;-1:-1:-1;2481:381:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;383:39:5:-;;;;;;;;;;-1:-1:-1;383:39:5;;;;;;;;283;;;;;;;;;;-1:-1:-1;283:39:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10099:25:6;;;10087:2;10072:18;283:39:5;9953:177:6;2807:107:5;;;;;;;;;;-1:-1:-1;2807:107:5;;;;;:::i;:::-;;:::i;402:391:1:-;;;;;;:::i;:::-;;:::i;1815:293::-;;;;;;;;;;-1:-1:-1;1815:293:1;;;;;:::i;:::-;;:::i;10363:708:0:-;;;;;;:::i;:::-;;:::i;8348:349::-;;;;;;:::i;:::-;;:::i;3166:367:1:-;;;;;;;;;;-1:-1:-1;3166:367:1;;;;;:::i;:::-;;:::i;2868:292::-;;;;;;;;;;-1:-1:-1;2868:292:1;;;;;:::i;:::-;;:::i;11693:435:0:-;;;;;;;;;;-1:-1:-1;11693:435:0;;;;;:::i;:::-;11963:19;11957:4;11950:33;;;11812:14;11996:26;;;;12106:4;12090:21;;12084:28;;11693:435;739:151:5;;;;;;;;;;-1:-1:-1;739:151:5;;;;;:::i;:::-;;:::i;:::-;;;13672:14:6;;13665:22;13647:41;;13635:2;13620:18;739:151:5;13507:187:6;2339:332:5;12517:13:0;:11;:13::i;:::-;2482:39:5;;::::1;2474:67;;;::::0;::::1;::::0;;13901:2:6;2474:67:5::1;::::0;::::1;13883:21:6::0;13940:2;13920:18;;;13913:30;13979:17;13959:18;;;13952:45;14014:18;;2474:67:5::1;;;;;;;;;2557:6;2552:113;2565:22:::0;;::::1;2552:113;;;2641:10;;2652:1;2641:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2608:14;:30;2623:11;;2635:1;2623:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2608:30;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2608:30:5;:46;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2589:3;::::1;::::0;::::1;:::i;:::-;;;;2552:113;;;;2339:332:::0;;;;:::o;9021:617:0:-;9114:15;7972:9;9132:46;;:15;:46;9114:64;;9346:19;9340:4;9333:33;9396:8;9390:4;9383:22;9452:7;9445:4;9439;9429:21;9422:38;9599:8;9552:45;9549:1;9546;9541:67;9248:374;9021:617::o;2677:124:5:-;12517:13:0;:11;:13::i;:::-;2760:15:5::1;:34:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2677:124::o;2920:661::-;12517:13:0;:11;:13::i;:::-;3045:31:5::1;3100:4:::0;3079:33:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;3079:33:5::1;;;;;;;;;;;;;;;;3045:67;;3127:6;3123:364;3135:15:::0;;::::1;3123:364;;;3194:16;::::0;;3171:20:::1;3194:16:::0;;;3261:1:::1;3194:16;::::0;;::::1;3247::::0;;;;;;;;3194;;3171:20;;3194:16;3247;;;3194;3247::::1;::::0;::::1;;::::0;-1:-1:-1;3247:16:5::1;3224:39;;3286:3;3277;3281:1;3277:6;;;;;;;;:::i;:::-;:12;::::0;;::::1;:6;::::0;;::::1;::::0;;;;;;:12;3337:50:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;3368:1:::1;3337:50:::0;;::::1;::::0;3304:19:::1;3337:50:::0;;;;;;;;;;;;;;;;;;;;;;;;3326:62;;3304:19;;3326:62:::1;::::0;::::1;;:::i;:::-;;::::0;;;;;::::1;::::0;;;3415:61:::1;::::0;::::1;::::0;;;3326:62;-1:-1:-1;3326:62:5;3436:4;;3441:1;3436:7;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3415:61;;::::0;;3457:1:::1;3415:61;::::0;::::1;::::0;;;;;;3402:10;;:7;;3410:1;;3402:10;::::1;;;;;:::i;:::-;;;;;;:74;;;;3157:330;;;3152:3;;;;;:::i;:::-;;;;3123:364;;;-1:-1:-1::0;3497:77:5::1;::::0;;;;:47:::1;3524:8;3497:47;::::0;::::1;::::0;:77:::1;::::0;3553:4:::1;::::0;3560;;3566:7;;3497:77:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3035:546;2920:661:::0;;;;;:::o;1995:338::-;12517:13:0;:11;:13::i;:::-;2141:45:5;;::::1;2133:73;;;::::0;::::1;::::0;;13901:2:6;2133:73:5::1;::::0;::::1;13883:21:6::0;13940:2;13920:18;;;13913:30;13979:17;13959:18;;;13952:45;14014:18;;2133:73:5::1;13699:339:6::0;2133:73:5::1;2222:6;2217:110;2230:22:::0;;::::1;2217:110;;;2297:16;;2314:1;2297:19;;;;;;;:::i;:::-;;;;;;;2273:5;:21:::0;2279:11:::1;;2291:1;2279:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2273:21;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2273:21:5;:43;2254:3;::::1;::::0;::::1;:::i;:::-;;;;2217:110;;9720:456:0::0;9922:19;9916:4;9909:33;9968:8;9962:4;9955:22;10020:1;10013:4;10007;9997:21;9990:32;10151:8;10105:44;10102:1;10099;10094:66;9720:456::o;8762:100::-;12517:13;:11;:13::i;:::-;8834:21:::1;8852:1;8834:9;:21::i;:::-;8762:100::o:0;2114:361:1:-;2219:12;2280:28;2300:7;2280:19;:28::i;:::-;2395:63;;17674:66:6;17660:3;17656:16;;;17652:89;2395:63:1;;;17640:102:6;2435:21:1;;;17758:12:6;;;17751:28;2328:1:1;;2351:7;;2379:1;;17795:12:6;;2395:63:1;;;;;;;;;;;;;;2250:218;;;;;;2395:63;2250:218;;:::i;:::-;;;;;;;;;;;;;2243:225;;2114:361;;;;;:::o;629:104:5:-;694:12;629:104;;;;;:::o;799:428:1:-;918:11;944:6;939:156;952:25;;;939:156;;;1005:79;1046:3;1025:14;;1040:1;1025:17;;;;;;;:::i;:::-;;;;;;;:24;;1060:14;;1075:1;1060:17;;;;;;;:::i;:::-;;;;;;;1080:3;1005:12;:79::i;:::-;998:86;;;;:::i;:::-;;-1:-1:-1;979:3:1;;;;:::i;:::-;;;;939:156;;;;1125:3;1112:9;:16;;1104:40;;;;;;;19049:2:6;1104:40:1;;;19031:21:6;19088:2;19068:18;;;19061:30;19127:13;19107:18;;;19100:41;19158:18;;1104:40:1;18847:335:6;1104:40:1;1159:61;1172:14;;1188:3;1193:9;1204:3;1209:10;1159:61;;;;;;;;;;;:::i;:::-;;;;;;;;908:319;799:428;;;:::o;2481:381::-;2639:27;2705:8;2691:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2691:30:1;;2678:43;;2736:6;2731:125;2744:19;;;2731:125;;;2800:45;2806:8;;2815:1;2806:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2819:9;;2829:1;2819:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2833:8;;2842:1;2833:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2800:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2800:5:1;;-1:-1:-1;;;2800:45:1:i;:::-;2784:10;2795:1;2784:13;;;;;;;;:::i;:::-;;;;;;;;;;:61;2765:3;;;;:::i;:::-;;;;2731:125;;;;2481:381;;;;;;;;:::o;2807:107:5:-;12517:13:0;:11;:13::i;:::-;2876:31:5::1;::::0;;;;:20:::1;5650:55:6::0;;;2876:31:5::1;::::0;::::1;5632:74:6::0;2876:8:5::1;:20;::::0;::::1;::::0;5605:18:6;;2876:31:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;402:391:1::0;529:11;555:6;550:111;563:20;;;550:111;;;611:39;624:8;;633:1;624:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;637:9;;647:1;637:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;611;:39::i;:::-;604:46;;;;:::i;:::-;;-1:-1:-1;585:3:1;;;;:::i;:::-;;;;550:111;;;;691:3;678:9;:16;;670:40;;;;;;;19049:2:6;670:40:1;;;19031:21:6;19088:2;19068:18;;;19061:30;19127:13;19107:18;;;19100:41;19158:18;;670:40:1;18847:335:6;670:40:1;725:61;738:8;;748:9;;759;770:3;775:10;725:61;;;;;;;;;;;;:::i;:::-;;;;;;;;519:274;402:391;;;;:::o;1815:293::-;1942:27;;23207:16:6;1942:27:1;;;23191:102:6;1881:12:1;;23309:11:6;;1942:27:1;;;;;;;;;;;;1989:1;2012:4;2037:1;2070:20;2082:7;2070:11;:20::i;:::-;2053:38;;;;;;;23480:3:6;23476:16;;;;23494:66;23472:89;23460:102;;23587:2;23578:12;;23331:265;2053:38:1;;;;;;;;;;;;;;;1912:189;;;;;;2053:38;1912:189;;:::i;:::-;;;;;;;;;;;;;1905:196;;1815:293;;;:::o;10363:708:0:-;12517:13;:11;:13::i;:::-;10597:19:::1;10591:4;10584:33;10643:12;10637:4;10630:26;10705:4;10699;10689:21;10811:12;10805:19;10792:11;10789:36;10786:157;;;10857:10;10851:4;10844:24;10924:4;10918;10911:18;10786:157;11020:1;10999:23:::0;;11041::::1;11051:12:::0;11041:9:::1;:23::i;:::-;10363:708:::0;:::o;8348:349::-;12517:13;:11;:13::i;:::-;8520:8:::1;8516:2;8512:17;8502:150;;8562:10;8556:4;8549:24;8633:4;8627;8620:18;8502:150;8671:19;8681:8;8671:9;:19::i;3166:367:1:-:0;12517:13:0;:11;:13::i;:::-;3244:6:1::1;3264:19;::::0;::::1;3260:228;;3306:49;::::0;:10:::1;::::0;3329:21:::1;::::0;3306:49:::1;::::0;;;3329:21;3306:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3299:56;;;;;3260:228;;;3404:72;::::0;3457:10:::1;3404:72;::::0;::::1;23985:74:6::0;24075:18;;;24068:34;;;3393:10:1::1;::::0;::::1;::::0;23958:18:6;;3404:72:1::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;;;::::0;;3393:84;::::1;::::0;3404:72;3393:84:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;3386:91:1;;-1:-1:-1;;3260:228:1::1;3505:1;3497:29;;;::::0;::::1;::::0;;24607:2:6;3497:29:1::1;::::0;::::1;24589:21:6::0;24646:2;24626:18;;;24619:30;24685:17;24665:18;;;24658:45;24720:18;;3497:29:1::1;24405:339:6::0;3497:29:1::1;3234:299;3166:367:::0;;:::o;2868:292::-;2968:17;2997:23;3023:8;:14;;;3038:69;;;;;;;;3054:7;3038:69;;;;;;3063:16;3071:7;3063;:16::i;:::-;3038:69;;;;3081:8;;3038:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3038:69:1;;;-1:-1:-1;;;3038:69:1;;;;;;;;;;;3023:100;;;;;;;;;;;;3117:4;;3023:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3140:13;;2868:292;-1:-1:-1;;;;;;2868:292:1:o;739:151:5:-;821:4;870:13;;;;;;844:22;;852:13;;870:6;852:13;:::i;:::-;844:7;:22::i;:::-;:39;;739:151;-1:-1:-1;;739:151:5:o;7292:355:0:-;7504:11;7498:18;7488:8;7485:32;7475:156;;7550:10;7544:4;7537:24;7612:4;7606;7599:18;6145:1089;6857:11;7093:16;;6941:26;;;;;;;7053:38;7050:1;;7042:78;7177:27;6145:1089::o;1516:293:1:-;1602:11;1625:31;1659:105;1667:7;1659:105;;;;;;;;;;;;1680:45;1703:7;1712;1721:3;1680:22;:45::i;:::-;1727:21;1758:4;1659:7;:105::i;:::-;1781:11;;;:21;;1516:293;-1:-1:-1;;;;;1516:293:1:o;1233:277::-;1314:11;1337:31;1371:94;1379:7;1388:8;;1371:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1398:28:1;;-1:-1:-1;1418:7:1;;-1:-1:-1;1398:19:1;;-1:-1:-1;1398:28:1:i;1740:249:5:-;1838:23;;;1800:7;1838:23;;;:14;:23;;;;;;;;1875:13;;;1871:112;;-1:-1:-1;;1911:15:5;;;;;1740:249;-1:-1:-1;1740:249:5:o;1458:276::-;1557:14;;;1514:7;1557:14;;;;;;;;;;;1585:18;;;1581:147;;-1:-1:-1;1658:4:5;;1458:276;-1:-1:-1;;1458:276:5:o;1084:368::-;1276:31;;:::i;:::-;1326:8;:13;;;1347:10;1359:69;;;;;;;;1375:7;1359:69;;;;;;1384:16;1392:7;1384;:16::i;:::-;1359:69;;;;1402:8;1359:69;;;;1412:8;1359:69;;;;1422:5;1359:69;;;;;1430:14;1326:119;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1319:126;1084:368;-1:-1:-1;;;;;;1084:368:5:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:366:6:-;76:8;86:6;140:3;133:4;125:6;121:17;117:27;107:55;;158:1;155;148:12;107:55;-1:-1:-1;181:20:6;;224:18;213:30;;210:50;;;256:1;253;246:12;210:50;293:4;285:6;281:17;269:29;;353:3;346:4;336:6;333:1;329:14;321:6;317:27;313:38;310:47;307:67;;;370:1;367;360:12;307:67;14:366;;;;;:::o;385:770::-;506:6;514;522;530;583:2;571:9;562:7;558:23;554:32;551:52;;;599:1;596;589:12;551:52;639:9;626:23;668:18;709:2;701:6;698:14;695:34;;;725:1;722;715:12;695:34;764:69;825:7;816:6;805:9;801:22;764:69;:::i;:::-;852:8;;-1:-1:-1;738:95:6;-1:-1:-1;940:2:6;925:18;;912:32;;-1:-1:-1;956:16:6;;;953:36;;;985:1;982;975:12;953:36;;1024:71;1087:7;1076:8;1065:9;1061:24;1024:71;:::i;:::-;385:770;;;;-1:-1:-1;1114:8:6;-1:-1:-1;;;;385:770:6:o;1160:154::-;1219:5;1264:2;1255:6;1250:3;1246:16;1242:25;1239:45;;;1280:1;1277;1270:12;1239:45;-1:-1:-1;1302:6:6;1160:154;-1:-1:-1;1160:154:6:o;1319:347::-;1370:8;1380:6;1434:3;1427:4;1419:6;1415:17;1411:27;1401:55;;1452:1;1449;1442:12;1401:55;-1:-1:-1;1475:20:6;;1518:18;1507:30;;1504:50;;;1550:1;1547;1540:12;1504:50;1587:4;1579:6;1575:17;1563:29;;1639:3;1632:4;1623:6;1615;1611:19;1607:30;1604:39;1601:59;;;1656:1;1653;1646:12;1671:196;1739:20;;1799:42;1788:54;;1778:65;;1768:93;;1857:1;1854;1847:12;1768:93;1671:196;;;:::o;1872:986::-;2014:6;2022;2030;2038;2046;2054;2062;2115:3;2103:9;2094:7;2090:23;2086:33;2083:53;;;2132:1;2129;2122:12;2083:53;2155;2200:7;2189:9;2155:53;:::i;:::-;2145:63;;2255:2;2244:9;2240:18;2227:32;2217:42;;2310:3;2299:9;2295:19;2282:33;2334:18;2375:2;2367:6;2364:14;2361:34;;;2391:1;2388;2381:12;2361:34;2430:58;2480:7;2471:6;2460:9;2456:22;2430:58;:::i;:::-;2507:8;;-1:-1:-1;2404:84:6;-1:-1:-1;2404:84:6;;-1:-1:-1;2561:39:6;2595:3;2580:19;;2561:39;:::i;:::-;2551:49;;2653:3;2642:9;2638:19;2625:33;2609:49;;2683:2;2673:8;2670:16;2667:36;;;2699:1;2696;2689:12;2667:36;;2738:60;2790:7;2779:8;2768:9;2764:24;2738:60;:::i;:::-;1872:986;;;;-1:-1:-1;1872:986:6;;-1:-1:-1;1872:986:6;;;;2712:86;;-1:-1:-1;;;1872:986:6:o;2863:188::-;2931:20;;2991:34;2980:46;;2970:57;;2960:85;;3041:1;3038;3031:12;3056:186;3115:6;3168:2;3156:9;3147:7;3143:23;3139:32;3136:52;;;3184:1;3181;3174:12;3136:52;3207:29;3226:9;3207:29;:::i;:::-;3197:39;3056:186;-1:-1:-1;;;3056:186:6:o;3247:129::-;3332:18;3325:5;3321:30;3314:5;3311:41;3301:69;;3366:1;3363;3356:12;3381:717;3492:6;3500;3508;3516;3524;3577:3;3565:9;3556:7;3552:23;3548:33;3545:53;;;3594:1;3591;3584:12;3545:53;3617:29;3636:9;3617:29;:::i;:::-;3607:39;;3696:2;3685:9;3681:18;3668:32;3709:30;3733:5;3709:30;:::i;:::-;3758:5;-1:-1:-1;3814:2:6;3799:18;;3786:32;3841:18;3830:30;;3827:50;;;3873:1;3870;3863:12;3827:50;3912:69;3973:7;3964:6;3953:9;3949:22;3912:69;:::i;:::-;4000:8;;-1:-1:-1;3886:95:6;-1:-1:-1;4054:38:6;;-1:-1:-1;4088:2:6;4073:18;;4054:38;:::i;:::-;4044:48;;3381:717;;;;;;;;:::o;4103:163::-;4170:20;;4230:10;4219:22;;4209:33;;4199:61;;4256:1;4253;4246:12;4271:184;4329:6;4382:2;4370:9;4361:7;4357:23;4353:32;4350:52;;;4398:1;4395;4388:12;4350:52;4421:28;4439:9;4421:28;:::i;5717:332::-;5793:6;5801;5809;5862:2;5850:9;5841:7;5837:23;5833:32;5830:52;;;5878:1;5875;5868:12;5830:52;5901:28;5919:9;5901:28;:::i;:::-;5891:38;;5948;5982:2;5971:9;5967:18;5948:38;:::i;:::-;5938:48;;6005:38;6039:2;6028:9;6024:18;6005:38;:::i;:::-;5995:48;;5717:332;;;;;:::o;6054:250::-;6139:1;6149:113;6163:6;6160:1;6157:13;6149:113;;;6239:11;;;6233:18;6220:11;;;6213:39;6185:2;6178:10;6149:113;;;-1:-1:-1;;6296:1:6;6278:16;;6271:27;6054:250::o;6309:329::-;6350:3;6388:5;6382:12;6415:6;6410:3;6403:19;6431:76;6500:6;6493:4;6488:3;6484:14;6477:4;6470:5;6466:16;6431:76;:::i;:::-;6552:2;6540:15;6557:66;6536:88;6527:98;;;;6627:4;6523:109;;6309:329;-1:-1:-1;;6309:329:6:o;6643:217::-;6790:2;6779:9;6772:21;6753:4;6810:44;6850:2;6839:9;6835:18;6827:6;6810:44;:::i;6865:252::-;6932:6;6940;6993:2;6981:9;6972:7;6968:23;6964:32;6961:52;;;7009:1;7006;6999:12;6961:52;7032:28;7050:9;7032:28;:::i;:::-;7022:38;7107:2;7092:18;;;;7079:32;;-1:-1:-1;;;6865:252:6:o;7327:510::-;7422:6;7430;7438;7491:2;7479:9;7470:7;7466:23;7462:32;7459:52;;;7507:1;7504;7497:12;7459:52;7547:9;7534:23;7580:18;7572:6;7569:30;7566:50;;;7612:1;7609;7602:12;7566:50;7651:69;7712:7;7703:6;7692:9;7688:22;7651:69;:::i;:::-;7739:8;;-1:-1:-1;7625:95:6;-1:-1:-1;7793:38:6;;-1:-1:-1;7827:2:6;7812:18;;7793:38;:::i;8205:1106::-;8384:6;8392;8400;8408;8416;8424;8477:2;8465:9;8456:7;8452:23;8448:32;8445:52;;;8493:1;8490;8483:12;8445:52;8533:9;8520:23;8562:18;8603:2;8595:6;8592:14;8589:34;;;8619:1;8616;8609:12;8589:34;8658:69;8719:7;8710:6;8699:9;8695:22;8658:69;:::i;:::-;8746:8;;-1:-1:-1;8632:95:6;-1:-1:-1;8834:2:6;8819:18;;8806:32;;-1:-1:-1;8850:16:6;;;8847:36;;;8879:1;8876;8869:12;8847:36;8918:71;8981:7;8970:8;8959:9;8955:24;8918:71;:::i;:::-;9008:8;;-1:-1:-1;8892:97:6;-1:-1:-1;9096:2:6;9081:18;;9068:32;;-1:-1:-1;9112:16:6;;;9109:36;;;9141:1;9138;9131:12;9109:36;;9180:71;9243:7;9232:8;9221:9;9217:24;9180:71;:::i;:::-;8205:1106;;;;-1:-1:-1;8205:1106:6;;-1:-1:-1;8205:1106:6;;9270:8;;8205:1106;-1:-1:-1;;;8205:1106:6:o;9316:632::-;9487:2;9539:21;;;9609:13;;9512:18;;;9631:22;;;9458:4;;9487:2;9710:15;;;;9684:2;9669:18;;;9458:4;9753:169;9767:6;9764:1;9761:13;9753:169;;;9828:13;;9816:26;;9897:15;;;;9862:12;;;;9789:1;9782:9;9753:169;;;-1:-1:-1;9939:3:6;;9316:632;-1:-1:-1;;;;;;9316:632:6:o;10135:186::-;10194:6;10247:2;10235:9;10226:7;10222:23;10218:32;10215:52;;;10263:1;10260;10253:12;10215:52;10286:29;10305:9;10286:29;:::i;11112:254::-;11180:6;11188;11241:2;11229:9;11220:7;11216:23;11212:32;11209:52;;;11257:1;11254;11247:12;11209:52;11280:29;11299:9;11280:29;:::i;11371:184::-;11423:77;11420:1;11413:88;11520:4;11517:1;11510:15;11544:4;11541:1;11534:15;11560:334;11631:2;11625:9;11687:2;11677:13;;11692:66;11673:86;11661:99;;11790:18;11775:34;;11811:22;;;11772:62;11769:88;;;11837:18;;:::i;:::-;11873:2;11866:22;11560:334;;-1:-1:-1;11560:334:6:o;11899:1181::-;11995:6;12003;12011;12019;12072:2;12060:9;12051:7;12047:23;12043:32;12040:52;;;12088:1;12085;12078:12;12040:52;12111:28;12129:9;12111:28;:::i;:::-;12101:38;;12158:2;12211;12200:9;12196:18;12183:32;12234:18;12275:2;12267:6;12264:14;12261:34;;;12291:1;12288;12281:12;12261:34;12330:58;12380:7;12371:6;12360:9;12356:22;12330:58;:::i;:::-;12407:8;;-1:-1:-1;12304:84:6;-1:-1:-1;12495:2:6;12480:18;;12467:32;;-1:-1:-1;12511:16:6;;;12508:36;;;12540:1;12537;12530:12;12508:36;12578:8;12567:9;12563:24;12553:34;;12625:7;12618:4;12614:2;12610:13;12606:27;12596:55;;12647:1;12644;12637:12;12596:55;12683:2;12670:16;12705:2;12701;12698:10;12695:36;;;12711:18;;:::i;:::-;12753:112;12861:2;12792:66;12785:4;12781:2;12777:13;12773:86;12769:95;12753:112;:::i;:::-;12740:125;;12888:2;12881:5;12874:17;12928:7;12923:2;12918;12914;12910:11;12906:20;12903:33;12900:53;;;12949:1;12946;12939:12;12900:53;13004:2;12999;12995;12991:11;12986:2;12979:5;12975:14;12962:45;13048:1;13043:2;13038;13031:5;13027:14;13023:23;13016:34;;13069:5;13059:15;;;;;11899:1181;;;;;;;:::o;13267:235::-;13351:6;13404:2;13392:9;13383:7;13379:23;13375:32;13372:52;;;13420:1;13417;13410:12;13372:52;13443:53;13488:7;13477:9;13443:53;:::i;14043:184::-;14095:77;14092:1;14085:88;14192:4;14189:1;14182:15;14216:4;14213:1;14206:15;14232:184;14284:77;14281:1;14274:88;14381:4;14378:1;14371:15;14405:4;14402:1;14395:15;14421:195;14460:3;14491:66;14484:5;14481:77;14478:103;;14561:18;;:::i;:::-;-1:-1:-1;14608:1:6;14597:13;;14421:195::o;14621:484::-;14674:3;14712:5;14706:12;14739:6;14734:3;14727:19;14765:4;14794:2;14789:3;14785:12;14778:19;;14831:2;14824:5;14820:14;14852:1;14862:218;14876:6;14873:1;14870:13;14862:218;;;14941:13;;14956:42;14937:62;14925:75;;15020:12;;;;15055:15;;;;14898:1;14891:9;14862:218;;;-1:-1:-1;15096:3:6;;14621:484;-1:-1:-1;;;;;14621:484:6:o;15110:915::-;15293:2;15282:9;15275:21;15351:18;15342:6;15336:13;15332:38;15327:2;15316:9;15312:18;15305:66;15435:4;15429:2;15421:6;15417:15;15411:22;15407:33;15402:2;15391:9;15387:18;15380:61;15505:4;15499:2;15491:6;15487:15;15481:22;15477:33;15472:2;15461:9;15457:18;15450:61;15576:4;15570:2;15562:6;15558:15;15552:22;15548:33;15542:3;15531:9;15527:19;15520:62;15256:4;15629:3;15621:6;15617:16;15611:23;15671:4;15665:3;15654:9;15650:19;15643:33;15699:63;15757:3;15746:9;15742:19;15728:12;15699:63;:::i;:::-;15685:77;;15811:3;15803:6;15799:16;15793:23;15882:66;15870:9;15862:6;15858:22;15854:95;15847:4;15836:9;15832:20;15825:125;15967:52;16012:6;15996:14;15967:52;:::i;:::-;15959:60;15110:915;-1:-1:-1;;;;;15110:915:6:o;16030:1448::-;16290:4;16319:2;16359;16348:9;16344:18;16381:42;16462:2;16454:6;16450:15;16439:9;16432:34;16485:2;16535;16527:6;16523:15;16518:2;16507:9;16503:18;16496:43;16558:2;16548:12;;16596:2;16591;16580:9;16576:18;16569:30;16619:6;16654;16648:13;16685:6;16677;16670:22;16723:3;16712:9;16708:19;16701:26;;16786:3;16776:6;16773:1;16769:14;16758:9;16754:30;16750:40;16736:54;;16825:2;16817:6;16813:15;16846:1;16856:593;16870:6;16867:1;16864:13;16856:593;;;16935:22;;;16959:66;16931:95;16919:108;;17050:13;;17128:9;;17086:10;17124:18;;;17109:34;;17190:11;;;17184:18;17180:27;17163:15;;;17156:52;17247:11;;17241:18;17279:15;;;17272:27;;;17322:47;17353:15;;;17241:18;17322:47;:::i;:::-;17312:57;-1:-1:-1;;17427:12:6;;;;17392:15;;;;16892:1;16885:9;16856:593;;;-1:-1:-1;17466:6:6;;16030:1448;-1:-1:-1;;;;;;;;;;;16030:1448:6:o;17818:894::-;18067:3;18105:6;18099:13;18121:66;18180:6;18175:3;18168:4;18160:6;18156:17;18121:66;:::i;:::-;18218:6;18213:3;18209:16;18196:29;;18244:66;18355:2;18346:6;18341:3;18337:16;18333:25;18326:5;18319:40;18412:66;18403:6;18398:3;18394:16;18390:89;18386:1;18379:5;18375:13;18368:112;18533:2;18524:6;18519:3;18515:16;18511:25;18507:1;18500:5;18496:13;18489:48;;18568:6;18562:13;18584:78;18653:8;18649:1;18642:5;18638:13;18631:4;18623:6;18619:17;18584:78;:::i;:::-;18682:20;18704:1;18678:28;;17818:894;-1:-1:-1;;;;;;;17818:894:6:o;18717:125::-;18782:9;;;18803:10;;;18800:36;;;18816:18;;:::i;19187:860::-;19488:3;19477:9;19470:22;19529:6;19523:3;19512:9;19508:19;19501:35;19451:4;19559:66;19551:6;19548:78;19545:98;;;19639:1;19636;19629:12;19545:98;19673:6;19670:1;19666:14;19731:6;19723;19717:3;19706:9;19702:19;19689:49;19806:42;19886:15;;;19879:4;19864:20;;19857:45;19933:2;19918:18;;19911:34;;;;-1:-1:-1;19976:2:6;19961:18;;19954:34;;;;20025:15;;;20019:3;20004:19;;19997:44;19759:22;19783:3;19755:32;;19187:860;-1:-1:-1;;19187:860:6:o;20052:580::-;20129:4;20135:6;20195:11;20182:25;20285:66;20274:8;20258:14;20254:29;20250:102;20230:18;20226:127;20216:155;;20367:1;20364;20357:12;20216:155;20394:33;;20446:20;;;-1:-1:-1;20489:18:6;20478:30;;20475:50;;;20521:1;20518;20511:12;20475:50;20554:4;20542:17;;-1:-1:-1;20585:14:6;20581:27;;;20571:38;;20568:58;;;20622:1;20619;20612:12;20637:325;20725:6;20720:3;20713:19;20777:6;20770:5;20763:4;20758:3;20754:14;20741:43;;20829:1;20822:4;20813:6;20808:3;20804:16;20800:27;20793:38;20695:3;20951:4;20881:66;20876:2;20868:6;20864:15;20860:88;20855:3;20851:98;20847:109;20840:116;;20637:325;;;;:::o;20967:2092::-;21357:3;21370:22;;;21342:19;;21427:22;;;21309:4;21507:6;21480:3;21465:19;;21309:4;21541:225;21555:6;21552:1;21549:13;21541:225;;;21647:10;21620:25;21638:6;21620:25;:::i;:::-;21616:42;21604:55;;21682:4;21741:15;;;;21706:12;;;;21577:1;21570:9;21541:225;;;21545:3;21785:4;21775:14;;21834:9;21829:3;21825:19;21820:2;21809:9;21805:18;21798:47;21867:3;21891:6;21886:3;21879:19;21925:2;21920:3;21916:12;21907:21;;21981:2;21971:6;21968:1;21964:14;21959:3;21955:24;21951:33;22009:6;22035:1;22045:843;22061:6;22056:3;22053:15;22045:843;;;22150:66;22144:3;22136:6;22132:16;22128:89;22121:5;22114:104;22270:8;22257:22;22359:66;22350:6;22334:14;22330:27;22326:100;22306:18;22302:125;22292:153;;22441:1;22438;22431:12;22292:153;22471:31;;22576:14;;;;22529:19;22617:18;22606:30;;22603:50;;;22649:1;22646;22639:12;22603:50;22702:6;22686:14;22682:27;22673:7;22669:41;22666:61;;;22723:1;22720;22713:12;22666:61;22750:50;22793:6;22785;22776:7;22750:50;:::i;:::-;22864:14;;;;22740:60;-1:-1:-1;;;22825:17:6;;;;22087:1;22078:11;22045:843;;;22049:3;;22905:6;22897:14;;;;;;22947:6;22942:2;22931:9;22927:18;22920:34;22990:6;22985:2;22974:9;22970:18;22963:34;23006:47;23048:3;23037:9;23033:19;23025:6;7919:42;7908:54;7896:67;;7842:127;23006:47;20967:2092;;;;;;;;;;:::o;24113:287::-;24242:3;24280:6;24274:13;24296:66;24355:6;24350:3;24343:4;24335:6;24331:17;24296:66;:::i;:::-;24378:16;;;;;24113:287;-1:-1:-1;;24113:287:6:o;24749:969::-;24970:2;24959:9;24952:21;25028:10;25019:6;25013:13;25009:30;25004:2;24993:9;24989:18;24982:58;25094:4;25086:6;25082:17;25076:24;25071:2;25060:9;25056:18;25049:52;24933:4;25148:2;25140:6;25136:15;25130:22;25189:4;25183:3;25172:9;25168:19;25161:33;25217:51;25263:3;25252:9;25248:19;25234:12;25217:51;:::i;:::-;25203:65;;25317:2;25309:6;25305:15;25299:22;25387:66;25375:9;25367:6;25363:22;25359:95;25352:4;25341:9;25337:20;25330:125;25478:40;25511:6;25495:14;25478:40;:::i;:::-;25587:3;25575:16;;;;25569:23;25562:31;25555:39;25549:3;25534:19;;25527:68;-1:-1:-1;;;25668:42:6;25656:55;;;;25649:4;25634:20;;;25627:85;25464:54;24749:969::o;25723:478::-;25793:5;25841:4;25829:9;25824:3;25820:19;25816:30;25813:50;;;25859:1;25856;25849:12;25813:50;25892:4;25886:11;25936:4;25928:6;25924:17;26007:6;25995:10;25992:22;25971:18;25959:10;25956:34;25953:62;25950:88;;;26018:18;;:::i;:::-;26054:4;26047:24;26119:16;;26104:32;;26190:2;26175:18;;;26169:25;26152:15;;;26145:50;;;;-1:-1:-1;26089:6:6;25723:478;-1:-1:-1;25723:478:6:o;26206:258::-;26305:6;26358:2;26346:9;26337:7;26333:23;26329:32;26326:52;;;26374:1;26371;26364:12;26326:52;26397:61;26450:7;26439:9;26397:61;:::i;26469:682::-;26572:6;26625:3;26613:9;26604:7;26600:23;26596:33;26593:53;;;26642:1;26639;26632:12;26593:53;26675:2;26669:9;26717:4;26709:6;26705:17;26788:6;26776:10;26773:22;26752:18;26740:10;26737:34;26734:62;26731:88;;;26799:18;;:::i;:::-;26835:2;26828:22;26874:16;;26859:32;;26934:2;26919:18;;26913:25;26947:30;26913:25;26947:30;:::i;:::-;27005:2;26993:15;;26986:30;27049:70;27111:7;27106:2;27091:18;;27049:70;:::i;:::-;27044:2;27032:15;;27025:95;27036:6;26469:682;-1:-1:-1;;;26469:682:6:o
Swarm Source
ipfs://03802418fd76c668814738a0ada7739fe057268c6807317835b9193206c27973
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BASE | 26.95% | $3,901.05 | 0.0442 | $172.41 | |
ARB | 23.85% | $3,902.57 | 0.0391 | $152.55 | |
GNO | 15.87% | $0.999868 | 101.5028 | $101.49 | |
OP | 12.12% | $3,902.1 | 0.0199 | $77.54 | |
SCROLL | Ether (ETH) | 5.99% | $3,901.9 | 0.00982348 | $38.33 |
LINEA | 3.44% | $3,899.98 | 0.0056503 | $22.04 | |
ZKSYNC | 3.09% | $3,901.9 | 0.00507219 | $19.79 | |
BSC | 2.00% | $727.3 | 0.0176 | $12.8 | |
POL | 1.77% | $0.695277 | 16.323 | $11.35 | |
AVAX | 1.35% | $51.5 | 0.1676 | $8.63 | |
FTM | 0.97% | $1.3 | 4.7498 | $6.19 | |
CELO | 0.59% | $1.06 | 3.5743 | $3.77 | |
OPBNB | 0.48% | $727.54 | 0.00420418 | $3.06 | |
ETH | 0.37% | $3,901.9 | 0.00061373 | $2.39 | |
BLAST | 0.37% | $3,903 | 0.00060992 | $2.38 | |
ARBNOVA | 0.33% | $3,900.81 | 0.00054886 | $2.14 | |
FRAXTAL | 0.17% | $3,873.8 | 0.00028876 | $1.12 | |
GLMR | 0.11% | $0.373084 | 1.9568 | $0.730052 | |
XAI | 0.10% | $0.422542 | 1.5015 | $0.634426 | |
MOVR | 0.05% | $19.99 | 0.017 | $0.340073 |
[ 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.