ETH Price: $1,806.46 (+10.75%)

Contract

0x26DA582889f59EaaE9dA1f063bE0140CD93E6a4f
Transaction Hash
Method
Block
From
To
Send Deposits3293573132025-04-23 11:13:167 mins ago1745406796IN
0x26DA5828...CD93E6a4f
0.00032267 ETH0.000003990.01
Send Deposits3293561022025-04-23 11:08:1313 mins ago1745406493IN
0x26DA5828...CD93E6a4f
0.00204648 ETH0.000003970.01
Send Deposits3293552572025-04-23 11:04:4316 mins ago1745406283IN
0x26DA5828...CD93E6a4f
0.00500231 ETH0.00000720.01
Send Deposits3293513482025-04-23 10:48:2932 mins ago1745405309IN
0x26DA5828...CD93E6a4f
0.00053794 ETH0.000005550.01
Send Deposits3293481492025-04-23 10:35:1845 mins ago1745404518IN
0x26DA5828...CD93E6a4f
0.00015584 ETH0.000013260.01
Send Deposits3293456232025-04-23 10:24:4856 mins ago1745403888IN
0x26DA5828...CD93E6a4f
0.00140065 ETH0.000007830.012449
Send Deposits3293455472025-04-23 10:24:2956 mins ago1745403869IN
0x26DA5828...CD93E6a4f
0.00351256 ETH0.00000770.011946
Send Deposits3293452072025-04-23 10:23:0458 mins ago1745403784IN
0x26DA5828...CD93E6a4f
0.00141256 ETH0.000007270.01
Send Deposits3293438432025-04-23 10:17:271 hr ago1745403447IN
0x26DA5828...CD93E6a4f
0.00120765 ETH0.000005630.01
Send Deposits3293427112025-04-23 10:12:451 hr ago1745403165IN
0x26DA5828...CD93E6a4f
0.0001632 ETH0.000005130.010755
Send Deposits3293419832025-04-23 10:09:441 hr ago1745402984IN
0x26DA5828...CD93E6a4f
0.0001632 ETH0.000004450.012111
Send Deposits3293409692025-04-23 10:05:301 hr ago1745402730IN
0x26DA5828...CD93E6a4f
0.00127412 ETH0.000005450.016584
Send Deposits3293391582025-04-23 9:57:581 hr ago1745402278IN
0x26DA5828...CD93E6a4f
0.00442014 ETH0.000005530.01
Send Deposits3293385872025-04-23 9:55:391 hr ago1745402139IN
0x26DA5828...CD93E6a4f
0.00155421 ETH0.000005110.01
Send Deposits3293385622025-04-23 9:55:331 hr ago1745402133IN
0x26DA5828...CD93E6a4f
0.00097539 ETH0.000005170.01
Send Deposits3293385182025-04-23 9:55:221 hr ago1745402122IN
0x26DA5828...CD93E6a4f
0.00013608 ETH0.000005120.01
Send Deposits3293383322025-04-23 9:54:351 hr ago1745402075IN
0x26DA5828...CD93E6a4f
0.00022559 ETH0.000005090.01
Send Deposits3293378642025-04-23 9:52:381 hr ago1745401958IN
0x26DA5828...CD93E6a4f
0.000029 ETH0.000005030.01
Send Deposits3293334982025-04-23 9:34:261 hr ago1745400866IN
0x26DA5828...CD93E6a4f
0.00026126 ETH0.000005720.01
Send Deposits3293334172025-04-23 9:34:051 hr ago1745400845IN
0x26DA5828...CD93E6a4f
0.00002887 ETH0.000005680.01
Send Deposits3293333472025-04-23 9:33:471 hr ago1745400827IN
0x26DA5828...CD93E6a4f
0.00026126 ETH0.000005720.01
Send Deposits3293332862025-04-23 9:33:321 hr ago1745400812IN
0x26DA5828...CD93E6a4f
0.00026126 ETH0.000005720.01
Send Deposits3293330702025-04-23 9:32:381 hr ago1745400758IN
0x26DA5828...CD93E6a4f
0.00122898 ETH0.000005680.01
Send Deposits3293330682025-04-23 9:32:371 hr ago1745400757IN
0x26DA5828...CD93E6a4f
0.00113891 ETH0.000005720.01
Send Deposits3293326372025-04-23 9:30:521 hr ago1745400652IN
0x26DA5828...CD93E6a4f
0.00124243 ETH0.000006620.01
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
3293573132025-04-23 11:13:167 mins ago1745406796
0x26DA5828...CD93E6a4f
0.19250923 ETH
3293573132025-04-23 11:13:167 mins ago1745406796
0x26DA5828...CD93E6a4f
0.19283187 ETH
3293561022025-04-23 11:08:1313 mins ago1745406493
0x26DA5828...CD93E6a4f
0.19250919 ETH
3293561022025-04-23 11:08:1313 mins ago1745406493
0x26DA5828...CD93E6a4f
0.19453548 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.192489 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.19378081 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.19378081 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.19500998 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.19500998 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.19611356 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.19611356 ETH
3293552572025-04-23 11:04:4316 mins ago1745406283
0x26DA5828...CD93E6a4f
0.19747682 ETH
3293513482025-04-23 10:48:2932 mins ago1745405309
0x26DA5828...CD93E6a4f
0.1924745 ETH
3293513482025-04-23 10:48:2932 mins ago1745405309
0x26DA5828...CD93E6a4f
0.19300885 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19247091 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19249966 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19249966 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19251312 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19251312 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19254211 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19254211 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19256885 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.19256885 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.192598 ETH
3293481492025-04-23 10:35:1845 mins ago1745404518
0x26DA5828...CD93E6a4f
0.192598 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GasLZV2

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200000 runs

Other Settings:
paris EvmVersion, MIT license
File 1 of 6 : GasLZV2.sol
// 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 {}
}

File 2 of 6 : OptimizedOApp.sol
// 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);
    }
}

File 3 of 6 : Ownable.sol
// 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();
        _;
    }
}

File 4 of 6 : ILayerZeroEndpointV2.sol
// 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;
}

File 5 of 6 : IMessageLibManager.sol
// 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);
}

File 6 of 6 : IUlnBase.sol
// 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);
}

Settings
{
  "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

Contract ABI

API
[{"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"}]

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

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
ARB
Ether (ETH)
35.84%$1,806.180.1925$347.71
BASE33.42%$1,805.70.1796$324.28
GNO10.48%$1101.6978$101.71
OP7.23%$1,805.830.0389$70.17
BSC2.68%$612.160.0425$26.03
LINEA2.48%$1,805.930.0133$24.04
SCROLL2.23%$1,805.930.012$21.65
POL1.62%$0.22266270.4528$15.69
ZKSYNC1.15%$1,805.930.00617533$11.15
AVAX1.09%$22.870.4615$10.56
OPBNB0.51%$612.20.00805811$4.93
ETH0.38%$1,805.930.00202984$3.67
ARBNOVA0.22%$1,805.760.00118799$2.15
BLAST0.21%$1,806.180.00113889$2.06
CELO0.18%$0.3317285.2065$1.73
MANTLE0.11%$0.7098671.4956$1.06
FRAXTAL0.08%$1,788.90.00042924$0.767862
GLMR0.03%$0.0784013.5356$0.277194
MOVR0.03%$6.320.0414$0.261747
TAIKO0.02%$1,805.930.00013413$0.24223
XAI0.01%$0.0617361.5997$0.098762
Loading...
Loading
Loading...
Loading
[ 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.