ETH Price: $2,141.37 (+7.92%)
Gas: 0.35 Gwei
 

Overview

ETH Balance

0.014226134580919791 ETH

Eth Value

$30.46 (@ $2,141.37/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

Transaction Hash
Method
Block
From
To
Send Deposits245425222026-02-26 17:15:355 days ago1772126135IN
0x26DA5828...CD93E6a4f
0.00039912 ETH0.000281651.23697388
Send Deposits245405002026-02-26 10:29:356 days ago1772101775IN
0x26DA5828...CD93E6a4f
0.00674705 ETH0.000011250.0515927
Send Deposits245284072026-02-24 17:58:597 days ago1771955939IN
0x26DA5828...CD93E6a4f
0.0004038 ETH0.000471962.07276368
Send Deposits245167742026-02-23 3:03:599 days ago1771815839IN
0x26DA5828...CD93E6a4f
0.0004013 ETH0.000177230.77839656
Send Deposits245107962026-02-22 7:04:1110 days ago1771743851IN
0x26DA5828...CD93E6a4f
0.00040125 ETH0.00000990.04352113
Send Deposits245078972026-02-21 21:21:5910 days ago1771708919IN
0x26DA5828...CD93E6a4f
0.00016121 ETH0.000022860.03922861
Send Deposits245069302026-02-21 18:07:2310 days ago1771697243IN
0x26DA5828...CD93E6a4f
0.00187968 ETH0.000073090.04339941
Send Deposits245050792026-02-21 11:56:1111 days ago1771674971IN
0x26DA5828...CD93E6a4f
0.00002914 ETH0.000015160.06881194
Send Deposits245050752026-02-21 11:55:2311 days ago1771674923IN
0x26DA5828...CD93E6a4f
0.00006921 ETH0.000016150.07330738
Send Deposits245050272026-02-21 11:45:3511 days ago1771674335IN
0x26DA5828...CD93E6a4f
0.00002922 ETH0.00001430.06488866
Send Deposits245045062026-02-21 10:01:1111 days ago1771668071IN
0x26DA5828...CD93E6a4f
0.0004013 ETH0.000022380.09829646
Send Deposits244972832026-02-20 9:51:3512 days ago1771581095IN
0x26DA5828...CD93E6a4f
0.00040127 ETH0.000015350.06744645
Send Deposits244904772026-02-19 11:04:5913 days ago1771499099IN
0x26DA5828...CD93E6a4f
0.00040124 ETH0.000011130.04889822
Send Deposits244904712026-02-19 11:03:4713 days ago1771499027IN
0x26DA5828...CD93E6a4f
0.00040124 ETH0.000011350.04988813
Send Deposits244852942026-02-18 17:44:1113 days ago1771436651IN
0x26DA5828...CD93E6a4f
0.00122734 ETH0.000037130.17019409
Send Deposits244831422026-02-18 10:32:2314 days ago1771410743IN
0x26DA5828...CD93E6a4f
0.00040125 ETH0.000013640.05992535
Send Deposits244763842026-02-17 11:54:3515 days ago1771329275IN
0x26DA5828...CD93E6a4f
0.00217606 ETH0.000030080.13244518
Send Deposits244754232026-02-17 8:41:4715 days ago1771317707IN
0x26DA5828...CD93E6a4f
0.00844124 ETH0.000465272.04438603
Send Deposits244738582026-02-17 3:26:5915 days ago1771298819IN
0x26DA5828...CD93E6a4f
0.00040124 ETH0.000009440.0414686
Send Deposits244663892026-02-16 2:27:4716 days ago1771208867IN
0x26DA5828...CD93E6a4f
0.00040125 ETH0.000011420.05018605
Send Deposits244598002026-02-15 4:26:1117 days ago1771129571IN
0x26DA5828...CD93E6a4f
0.00039877 ETH0.000009120.04007824
Send Deposits244525052026-02-14 4:01:5918 days ago1771041719IN
0x26DA5828...CD93E6a4f
0.000401 ETH0.000012110.05321853
Send Deposits244449572026-02-13 2:44:2319 days ago1770950663IN
0x26DA5828...CD93E6a4f
0.00040103 ETH0.000011920.0523796
Send Deposits244384112026-02-12 4:48:5920 days ago1770871739IN
0x26DA5828...CD93E6a4f
0.00040098 ETH0.00001340.05885809
Send Deposits244337552026-02-11 13:13:4721 days ago1770815627IN
0x26DA5828...CD93E6a4f
0.00026777 ETH0.000044080.20196106
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer245425222026-02-26 17:15:355 days ago1772126135
0x26DA5828...CD93E6a4f
0.01422613 ETH
Send245425222026-02-26 17:15:355 days ago1772126135
0x26DA5828...CD93E6a4f
0.01462505 ETH
Transfer245405002026-02-26 10:29:356 days ago1772101775
0x26DA5828...CD93E6a4f
0.01422593 ETH
Send245405002026-02-26 10:29:356 days ago1772101775
0x26DA5828...CD93E6a4f
0.02097298 ETH
Transfer245284072026-02-24 17:58:597 days ago1771955939
0x26DA5828...CD93E6a4f
0.01422593 ETH
Send245284072026-02-24 17:58:597 days ago1771955939
0x26DA5828...CD93E6a4f
0.01462953 ETH
Transfer245167742026-02-23 3:03:599 days ago1771815839
0x26DA5828...CD93E6a4f
0.01422573 ETH
Send245167742026-02-23 3:03:599 days ago1771815839
0x26DA5828...CD93E6a4f
0.01462683 ETH
Transfer245107962026-02-22 7:04:1110 days ago1771743851
0x26DA5828...CD93E6a4f
0.01422553 ETH
Send245107962026-02-22 7:04:1110 days ago1771743851
0x26DA5828...CD93E6a4f
0.01462658 ETH
Transfer245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01422533 ETH
Send245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01426675 ETH
Transfer245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01426675 ETH
Send245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01429443 ETH
Transfer245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01429443 ETH
Send245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01432773 ETH
Transfer245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01432773 ETH
Send245078972026-02-21 21:21:5910 days ago1771708919
0x26DA5828...CD93E6a4f
0.01438628 ETH
Transfer245069302026-02-21 18:07:2310 days ago1771697243
0x26DA5828...CD93E6a4f
0.01422506 ETH
Send245069302026-02-21 18:07:2310 days ago1771697243
0x26DA5828...CD93E6a4f
0.01437107 ETH
Transfer245069302026-02-21 18:07:2310 days ago1771697243
0x26DA5828...CD93E6a4f
0.01437107 ETH
Send245069302026-02-21 18:07:2310 days ago1771697243
0x26DA5828...CD93E6a4f
0.01451409 ETH
Transfer245069302026-02-21 18:07:2310 days ago1771697243
0x26DA5828...CD93E6a4f
0.01451409 ETH
Send245069302026-02-21 18:07:2310 days ago1771697243
0x26DA5828...CD93E6a4f
0.01467515 ETH
Transfer245069302026-02-21 18:07:2310 days ago1771697243
0x26DA5828...CD93E6a4f
0.01467515 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./OptimizedOApp.sol";

contract GasLZV2 is OptimizedOApp {

    constructor(address _owner, address _endpoint) OptimizedOApp(_owner, _endpoint) {}

    event SentMessages(uint32[] eids, bytes[] messages, uint value, uint fee, address from);
    event SentDeposits(uint256[] params, address to, uint value, uint fee, address from);

    function sendMessages(
        uint32[] calldata _dstEids,
        bytes[] calldata _messages
    ) external payable {
        uint256 fee;
        for (uint i; i < _messages.length; i++) {
            fee += _sendMessage(_dstEids[i], _messages[i]);
        }
        require(msg.value >= fee, "Fee Not Met");
        emit SentMessages(_dstEids, _messages, msg.value, fee, msg.sender);
    }

    function sendDeposits(
        uint256[] calldata _depositParams,
        address _to
    ) external payable {
        uint256 fee;
        for (uint i; i < _depositParams.length; i++) {
            fee += _sendDeposit(uint32(_depositParams[i] >> 224), uint128(_depositParams[i]), _to);
        }
        require(msg.value >= fee, "Fee Not Met");
        emit SentDeposits(_depositParams, _to, msg.value, fee, msg.sender);
    }

    function _sendMessage(uint32 _dstEid, bytes calldata _message) internal returns (uint256 fee) {
        MessagingReceipt memory receipt = _lzSend(_dstEid, _message, createReceiveOption(_dstEid), address(this).balance, address(this));
        return receipt.fee.nativeFee;
    }

    function _sendDeposit(uint32 _dstEid, uint128 _amount, address _to) internal returns (uint256 fee) {
        MessagingReceipt memory receipt = _lzSend(_dstEid, "", createNativeDropOption(_dstEid, _amount, _to), address(this).balance, address(this));
        return receipt.fee.nativeFee;
    }

    function createReceiveOption(uint32 _dstEid) public view returns (bytes memory) {
        return abi.encodePacked(
            abi.encodePacked(uint16(3)),
            uint8(1),
            uint16(16+1),
            uint8(1),
            abi.encodePacked(getGasLimit(_dstEid))
        );
    }

    function createNativeDropOption(uint32 _dstEid, uint128 _nativeAmount, address _to) public view returns (bytes memory) {
        return abi.encodePacked(
            createReceiveOption(_dstEid),
            uint8(1),
            uint16(32+16+1),
            uint8(2),
            abi.encodePacked(_nativeAmount, bytes32(uint256(uint160(_to))))
        );
    }

    function estimateFees(
        uint32[] calldata _dstEids,
        bytes[] calldata _messages,
        bytes[] calldata _options
    ) external view returns (uint256[] memory nativeFees) {
        nativeFees = new uint256[](_dstEids.length);
        for (uint i; i < _dstEids.length; i++) {
            nativeFees[i] = quote(_dstEids[i], _messages[i], _options[i]);
        }
    }

    function quote(uint32 _dstEid, bytes calldata _message, bytes memory _options) public view returns (uint256 nativeFee) {
        MessagingFee memory fee = endpoint.quote(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), address(this));
        return fee.nativeFee;
    }

    function withdraw(address token, uint256 amount) external onlyOwner {
        bool s;
        if (token == address(0)) {
            (s,) = msg.sender.call{value: address(this).balance}("");
        } else {
            (s,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, amount));
        }
        require(s, "Withdraw Failed");
    }

    receive() external payable {}
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../Ownable.sol";
import "./ILayerZeroEndpointV2.sol";
import "./IMessageLibManager.sol";
import "./IUlnBase.sol";

abstract contract OptimizedOApp is Ownable {
    ILayerZeroEndpointV2 public immutable endpoint;

    mapping(uint32 => bytes32) public peers;
    mapping(uint32 => uint128) public gasLimitLookup;

    uint128 public defaultGasLimit = 20_000;

    constructor(address _owner, address _endpoint) {
        endpoint = ILayerZeroEndpointV2(_endpoint);
        _initializeOwner(_owner);
        endpoint.setDelegate(_owner);
    }

    // Receive

    function nextNonce(uint32, bytes32) public pure virtual returns (uint64 nonce) {
        return 0;
    }

    function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {
        return getPeer(origin.srcEid) == origin.sender;
    }

    function lzReceive(
        Origin calldata,
        bytes32,
        bytes calldata,
        address,
        bytes calldata
    ) external pure {
        return;
    }

    // Send

    function _lzSend(
        uint32 _dstEid,
        bytes memory _message,
        bytes memory _options,
        uint _nativeFee,
        address _refundAddress
    ) internal virtual returns (MessagingReceipt memory receipt) {
        return endpoint.send{value: _nativeFee}(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), _refundAddress);
    }

    function getPeer(uint32 _dstEid) internal view returns (bytes32) {
        bytes32 trustedRemote = peers[_dstEid];
        if (trustedRemote == 0) {
            return bytes32(uint256(uint160(address(this))));
        } else {
            return trustedRemote;
        }
    }

    function getGasLimit(uint32 _dstEid) internal view returns (uint128) {
        uint128 gasLimit = gasLimitLookup[_dstEid];
        if (gasLimit == 0) {
            return defaultGasLimit;
        } else {
            return gasLimit;
        }
    }

    function setPeers(
        uint32[] calldata _remoteEids, 
        bytes32[] calldata _remoteAddresses
    ) external onlyOwner {
        require(_remoteEids.length == _remoteAddresses.length, "Length Mismatch");

        for (uint i; i < _remoteEids.length; i++) {
            peers[_remoteEids[i]] = _remoteAddresses[i];
        }
    }

    function setGasLimit(
        uint32[] calldata _remoteEids, 
        uint128[] calldata _gasLimits
    ) external onlyOwner {
        require(_remoteEids.length == _gasLimits.length, "Length Mismatch");

        for (uint i; i < _remoteEids.length; i++) {
            gasLimitLookup[_remoteEids[i]] = _gasLimits[i];
        }
    }

    function setDefaultGasLimit(uint128 _defaultGasLimit) external onlyOwner {
        defaultGasLimit = _defaultGasLimit;
    }

    function setDelegate(address _delegate) external onlyOwner {
        endpoint.setDelegate(_delegate);
    }

    function setUlnConfigs(address _lib, uint64 confirmations, uint32[] calldata eids, address dvn) external onlyOwner {
        SetConfigParam[] memory configs = new SetConfigParam[](eids.length);

        for(uint i; i < eids.length; i++) {
            address[] memory opt = new address[](0);
            address[] memory req = new address[](1);
            req[0] = dvn;

            bytes memory config = abi.encode(UlnConfig(confirmations, uint8(1), 0, 0, req, opt));
            configs[i] = SetConfigParam({eid: eids[i], configType: 2, config: config});
        }

        IMessageLibManager(address(endpoint)).setConfig(address(this), _lib, configs);
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();

    /// @dev The `pendingOwner` does not have a valid handover request.
    error NoHandoverRequest();

    /// @dev Cannot double-initialize.
    error AlreadyInitialized();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.
    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be
    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
    /// despite it not being as lightweight as a single argument event.
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    /// @dev An ownership handover to `pendingOwner` has been requested.
    event OwnershipHandoverRequested(address indexed pendingOwner);

    /// @dev The ownership handover to `pendingOwner` has been canceled.
    event OwnershipHandoverCanceled(address indexed pendingOwner);

    /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;

    /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;

    /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The owner slot is given by:
    /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
    /// It is intentionally chosen to be a high value
    /// to avoid collision with lower slots.
    /// The choice of manual storage layout is to enable compatibility
    /// with both regular and upgradeable contracts.
    bytes32 internal constant _OWNER_SLOT =
        0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;

    /// The ownership handover slot of `newOwner` is given by:
    /// ```
    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
    ///     let handoverSlot := keccak256(0x00, 0x20)
    /// ```
    /// It stores the expiry timestamp of the two-step ownership handover.
    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
    function _guardInitializeOwner() internal pure virtual returns (bool guard) {}

    /// @dev Initializes the owner directly without authorization guard.
    /// This function must be called upon initialization,
    /// regardless of whether the contract is upgradeable or not.
    /// This is to enable generalization to both regular and upgradeable contracts,
    /// and to save gas in case the initial owner is not the caller.
    /// For performance reasons, this function will not check if there
    /// is an existing owner.
    function _initializeOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                if sload(ownerSlot) {
                    mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
                    revert(0x1c, 0x04)
                }
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(_OWNER_SLOT, newOwner)
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        }
    }

    /// @dev Sets the owner directly without authorization guard.
    function _setOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, newOwner)
            }
        }
    }

    /// @dev Throws if the sender is not the owner.
    function _checkOwner() internal view virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // If the caller is not the stored owner, revert.
            if iszero(eq(caller(), sload(_OWNER_SLOT))) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Returns how long a two-step ownership handover is valid for in seconds.
    /// Override to return a different value if needed.
    /// Made internal to conserve bytecode. Wrap it in a public function if needed.
    function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
        return 48 * 3600;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  PUBLIC UPDATE FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Allows the owner to transfer the ownership to `newOwner`.
    function transferOwnership(address newOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(shl(96, newOwner)) {
                mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
                revert(0x1c, 0x04)
            }
        }
        _setOwner(newOwner);
    }

    /// @dev Allows the owner to renounce their ownership.
    function renounceOwnership() public payable virtual onlyOwner {
        _setOwner(address(0));
    }

    /// @dev Request a two-step ownership handover to the caller.
    /// The request will automatically expire in 48 hours (172800 seconds) by default.
    function requestOwnershipHandover() public payable virtual {
        unchecked {
            uint256 expires = block.timestamp + _ownershipHandoverValidFor();
            /// @solidity memory-safe-assembly
            assembly {
                // Compute and set the handover slot to `expires`.
                mstore(0x0c, _HANDOVER_SLOT_SEED)
                mstore(0x00, caller())
                sstore(keccak256(0x0c, 0x20), expires)
                // Emit the {OwnershipHandoverRequested} event.
                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
            }
        }
    }

    /// @dev Cancels the two-step ownership handover to the caller, if any.
    function cancelOwnershipHandover() public payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x20), 0)
            // Emit the {OwnershipHandoverCanceled} event.
            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
        }
    }

    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.
    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            let handoverSlot := keccak256(0x0c, 0x20)
            // If the handover does not exist, or has expired.
            if gt(timestamp(), sload(handoverSlot)) {
                mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
                revert(0x1c, 0x04)
            }
            // Set the handover slot to 0.
            sstore(handoverSlot, 0)
        }
        _setOwner(pendingOwner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   PUBLIC READ FUNCTIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the owner of the contract.
    function owner() public view virtual returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_OWNER_SLOT)
        }
    }

    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
    function ownershipHandoverExpiresAt(address pendingOwner)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the handover slot.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            // Load the handover slot.
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         MODIFIERS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Marks a function as only callable by the owner.
    modifier onlyOwner() virtual {
        _checkOwner();
        _;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct MessagingParams {
    uint32 dstEid;
    bytes32 receiver;
    bytes message;
    bytes options;
    bool payInLzToken;
}

struct MessagingReceipt {
    bytes32 guid;
    uint64 nonce;
    MessagingFee fee;
}

struct MessagingFee {
    uint256 nativeFee;
    uint256 lzTokenFee;
}

struct Origin {
    uint32 srcEid;
    bytes32 sender;
    uint64 nonce;
}

interface ILayerZeroEndpointV2 {
    event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);

    event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);

    event PacketDelivered(Origin origin, address receiver);

    event LzReceiveAlert(
        address indexed receiver,
        address indexed executor,
        Origin origin,
        bytes32 guid,
        uint256 gas,
        uint256 value,
        bytes message,
        bytes extraData,
        bytes reason
    );

    event LzTokenSet(address token);

    event DelegateSet(address sender, address delegate);

    function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);

    function send(
        MessagingParams calldata _params,
        address _refundAddress
    ) external payable returns (MessagingReceipt memory);

    function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;

    function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);

    function initializable(Origin calldata _origin, address _receiver) external view returns (bool);

    function lzReceive(
        Origin calldata _origin,
        address _receiver,
        bytes32 _guid,
        bytes calldata _message,
        bytes calldata _extraData
    ) external payable;

    // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order
    function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;

    function setLzToken(address _lzToken) external;

    function lzToken() external view returns (address);

    function nativeToken() external view returns (address);

    function setDelegate(address _delegate) external;
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct SetConfigParam {
    uint32 eid;
    uint32 configType;
    bytes config;
}

interface IMessageLibManager {
    struct Timeout {
        address lib;
        uint256 expiry;
    }

    event LibraryRegistered(address newLib);
    event DefaultSendLibrarySet(uint32 eid, address newLib);
    event DefaultReceiveLibrarySet(uint32 eid, address newLib);
    event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);
    event SendLibrarySet(address sender, uint32 eid, address newLib);
    event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);
    event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);

    function registerLibrary(address _lib) external;

    function isRegisteredLibrary(address _lib) external view returns (bool);

    function getRegisteredLibraries() external view returns (address[] memory);

    function setDefaultSendLibrary(uint32 _eid, address _newLib) external;

    function defaultSendLibrary(uint32 _eid) external view returns (address);

    function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _timeout) external;

    function defaultReceiveLibrary(uint32 _eid) external view returns (address);

    function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;

    function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);

    function isSupportedEid(uint32 _eid) external view returns (bool);

    function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);

    /// ------------------- OApp interfaces -------------------
    function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;

    function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);

    function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);

    function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;

    function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);

    function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _gracePeriod) external;

    function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);

    function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;

    function getConfig(
        address _oapp,
        address _lib,
        uint32 _eid,
        uint32 _configType
    ) external view returns (bytes memory config);
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct UlnConfig {
    uint64 confirmations;
    // we store the length of required DVNs and optional DVNs instead of using DVN.length directly to save gas
    uint8 requiredDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
    uint8 optionalDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
    uint8 optionalDVNThreshold; // (0, optionalDVNCount]
    address[] requiredDVNs; // no duplicates. sorted an an ascending order. allowed overlap with optionalDVNs
    address[] optionalDVNs; // no duplicates. sorted an an ascending order. allowed overlap with requiredDVNs
}

interface IUlnBase {
    function getUlnConfig(address, uint32) external returns (UlnConfig memory);
}

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 Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
0x26DA582889f59EaaE9dA1f063bE0140CD93E6a4f
Net Worth in USD
$270.26

Net Worth in ETH
0.12621

Token Allocations
ETH 41.34%
XDAI 37.75%
BNB 14.62%
Others 6.30%
Chain Token Portfolio % Price Amount Value
GNO37.75%$0.999921102.0187$102.01
LINEA16.11%$2,141.370.0203$43.53
BSC12.36%$659.640.0506$33.4
ETH
Ether (ETH)
11.27%$2,141.370.0142$30.46
SCROLL9.88%$2,141.370.0125$26.7
POL3.63%$0.10444893.9092$9.81
OPBNB2.26%$661.050.00922643$6.1
AVAX1.96%$9.590.5523$5.29
BASE1.94%$2,141.370.00244976$5.25
BLAST1.03%$2,143.560.00129462$2.78
ARB0.78%$2,142.230.00098017$2.1
MANTLE0.39%$0.7094461.4956$1.06
OP0.24%$2,141.540.00029882$0.639927
CELO0.18%$0.0797925.9508$0.474829
TAIKO0.11%$2,141.370.00013413$0.287223
FRAXTAL0.09%$0.6116150.4179$0.255608
MOVR0.02%$1.320.0486$0.064073
GLMR0.02%$0.0125054.3312$0.054161
Loading...
Loading
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.