ETH Price: $1,581.95 (-2.30%)
 
Transaction Hash
Method
Block
From
To
Unlock Transfers...223128112025-04-20 21:10:471 hr ago1745183447IN
0x0De2669e...89e243208
0 ETH0.000028280.37657416
Submit Transfer ...223125082025-04-20 20:10:112 hrs ago1745179811IN
0x0De2669e...89e243208
0 ETH0.000055560.3645086
Withdraw223014452025-04-19 7:05:3539 hrs ago1745046335IN
0x0De2669e...89e243208
0.00031297 ETH0.000142010.88144426
Trigger Transfer...222822042025-04-16 14:38:354 days ago1744814315IN
0x0De2669e...89e243208
0 ETH0.000075991.66285167
Withdraw222821252025-04-16 14:22:354 days ago1744813355IN
0x0De2669e...89e243208
0.00031719 ETH0.000357031.86708911
Withdraw222820652025-04-16 14:10:354 days ago1744812635IN
0x0De2669e...89e243208
0.00031868 ETH0.000261621.62384601
Withdraw222729712025-04-15 7:43:235 days ago1744703003IN
0x0De2669e...89e243208
0.00030395 ETH0.000157570.9780769
Unlock Transfers...222594532025-04-13 10:28:117 days ago1744540091IN
0x0De2669e...89e243208
0 ETH0.000036880.4495466
Submit Transfer ...222591502025-04-13 9:27:237 days ago1744536443IN
0x0De2669e...89e243208
0 ETH0.000058340.3826952
Withdraw222386442025-04-10 12:51:2310 days ago1744289483IN
0x0De2669e...89e243208
0.00031287 ETH0.000772784.79642426
Withdraw222383952025-04-10 12:01:3510 days ago1744286495IN
0x0De2669e...89e243208
0.00031511 ETH0.000183311.13797567
Withdraw222322182025-04-09 15:23:3511 days ago1744212215IN
0x0De2669e...89e243208
0.00033779 ETH0.000161891.15499179
Unlock Transfers...222172552025-04-07 13:14:5913 days ago1744031699IN
0x0De2669e...89e243208
0 ETH0.000372834.54459764
Submit Transfer ...222169542025-04-07 12:14:3513 days ago1744028075IN
0x0De2669e...89e243208
0 ETH0.000294571.9315715
Unlock Transfers...222129402025-04-06 22:46:4713 days ago1743979607IN
0x0De2669e...89e243208
0 ETH0.000153032.03738496
Submit Transfer ...222126392025-04-06 21:46:1114 days ago1743975971IN
0x0De2669e...89e243208
0 ETH0.000446352.92824467
Withdraw222016032025-04-05 8:44:4715 days ago1743842687IN
0x0De2669e...89e243208
0.00027692 ETH0.000149950.93075422
Withdraw221460352025-03-28 14:33:3523 days ago1743172415IN
0x0De2669e...89e243208
0.00026573 ETH0.000304071.88722669
Trigger Transfer...221187562025-03-24 19:08:3527 days ago1742843315IN
0x0De2669e...89e243208
0 ETH0.000027720.60667268
Withdraw221186192025-03-24 18:41:1127 days ago1742841671IN
0x0De2669e...89e243208
0.00024014 ETH0.000535462.8
Withdraw221185872025-03-24 18:34:4727 days ago1742841287IN
0x0De2669e...89e243208
0.00024014 ETH0.000354392.2
Unlock Transfers...221170542025-03-24 13:26:2327 days ago1742822783IN
0x0De2669e...89e243208
0 ETH0.000055170.73452673
Submit Transfer ...221167522025-03-24 12:25:4727 days ago1742819147IN
0x0De2669e...89e243208
0 ETH0.000129880.85214995
Withdraw221034032025-03-22 15:46:2329 days ago1742658383IN
0x0De2669e...89e243208
0.00025284 ETH0.000158470.98360215
Withdraw220762272025-03-18 20:44:3533 days ago1742330675IN
0x0De2669e...89e243208
0.00026329 ETH0.000148360.9208607
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer223014452025-04-19 7:05:3539 hrs ago1745046335
0x0De2669e...89e243208
0.00031297 ETH
Transfer222821252025-04-16 14:22:354 days ago1744813355
0x0De2669e...89e243208
0.00031719 ETH
Transfer222820652025-04-16 14:10:354 days ago1744812635
0x0De2669e...89e243208
0.00031868 ETH
Transfer222729712025-04-15 7:43:235 days ago1744703003
0x0De2669e...89e243208
0.00030395 ETH
Transfer222386442025-04-10 12:51:2310 days ago1744289483
0x0De2669e...89e243208
0.00031287 ETH
Transfer222383952025-04-10 12:01:3510 days ago1744286495
0x0De2669e...89e243208
0.00031511 ETH
Transfer222322182025-04-09 15:23:3511 days ago1744212215
0x0De2669e...89e243208
0.00033779 ETH
Transfer222016032025-04-05 8:44:4715 days ago1743842687
0x0De2669e...89e243208
0.00027692 ETH
Transfer221460352025-03-28 14:33:3523 days ago1743172415
0x0De2669e...89e243208
0.00026573 ETH
Transfer221186192025-03-24 18:41:1127 days ago1742841671
0x0De2669e...89e243208
0.00024014 ETH
Transfer221185872025-03-24 18:34:4727 days ago1742841287
0x0De2669e...89e243208
0.00024014 ETH
Transfer221034032025-03-22 15:46:2329 days ago1742658383
0x0De2669e...89e243208
0.00025284 ETH
Transfer220762272025-03-18 20:44:3533 days ago1742330675
0x0De2669e...89e243208
0.00026329 ETH
Transfer220650342025-03-17 7:11:4734 days ago1742195507
0x0De2669e...89e243208
0.00026356 ETH
Transfer219743192025-03-04 15:08:1147 days ago1741100891
0x0De2669e...89e243208
0.00024126 ETH
Transfer219743182025-03-04 15:07:5947 days ago1741100879
0x0De2669e...89e243208
0.00024126 ETH
Transfer218677572025-02-17 18:02:2362 days ago1739815343
0x0De2669e...89e243208
0.00018316 ETH
Transfer218676812025-02-17 17:47:1162 days ago1739814431
0x0De2669e...89e243208
0.00018307 ETH
Transfer217234482025-01-28 13:53:4782 days ago1738072427
0x0De2669e...89e243208
0.00015761 ETH
Transfer216355792025-01-16 7:32:5994 days ago1737012779
0x0De2669e...89e243208
0.00014834 ETH
Transfer215885772025-01-09 18:02:11101 days ago1736445731
0x0De2669e...89e243208
0.00015444 ETH
Transfer215639852025-01-06 7:38:47104 days ago1736149127
0x0De2669e...89e243208
0.00013713 ETH
Transfer215462452025-01-03 20:08:35107 days ago1735934915
0x0De2669e...89e243208
0.00013849 ETH
Transfer213657272024-12-09 15:04:47132 days ago1733756687
0x0De2669e...89e243208
0.0001272 ETH
Transfer213448132024-12-06 17:01:11135 days ago1733504471
0x0De2669e...89e243208
0.00012514 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ProxyMultiSig

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion, MIT license
File 1 of 6 : Proxy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import "@openzeppelin/contracts/proxy/Proxy.sol";
import "@openzeppelin/contracts/utils/StorageSlot.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "./MultiSigWallet.sol";
import "hardhat/console.sol";


contract ProxyMultiSig is Proxy, MultiSigWallet {
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
    bytes32 private constant ADMIN_STORAGE_LOCATION = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    bytes4 private constant _UPGRADE_TO_AND_CALL_SIGNATURE = bytes4(keccak256("_upgradeToAndCall(address,bytes)"));

    event Upgraded(address indexed implementation);


    constructor(
        address _logic,
        bytes memory _data,
        address[] memory owners,
        uint _required

    ) MultiSigWallet(owners, _required) {
        // Cannot use _upgradeToAndCall because of onlyWallet modifier
        _upgradeTo(_logic);
        if (_data.length > 0) {
            Address.functionDelegateCall(_logic, _data);
        }

        StorageSlot.getAddressSlot(ADMIN_STORAGE_LOCATION).value = msg.sender;  // trick the hardhat-deploy
    }


    function implementation() external view returns (address) {
        return _implementation();
    }

    function upgradeTo(address newImplementation) external payable ownerExists(msg.sender) {
        submitTransaction(
            address(this),
            msg.value,
            abi.encodeWithSelector(_UPGRADE_TO_AND_CALL_SIGNATURE, newImplementation, bytes(""))
        );
    }

    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ownerExists(msg.sender) {
        submitTransaction(
            address(this),
            msg.value,
            abi.encodeWithSelector(_UPGRADE_TO_AND_CALL_SIGNATURE, newImplementation, data)
        );
    }

    function _upgradeToAndCall(address newImplementation, bytes memory data) external onlyWallet payable {
        _upgradeTo(newImplementation);
        if (data.length > 0) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    function _upgradeTo(address newImplementation) internal {
        require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
        emit Upgraded(newImplementation);
    }

    function _implementation() internal view override returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }
}

File 2 of 6 : Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

File 3 of 6 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 4 of 6 : StorageSlot.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly {
            r.slot := slot
        }
    }
}

File 5 of 6 : MultiSigWallet.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;


contract MultiSigWallet {

    /*
     *  Events
     */
    event Confirmation(address indexed sender, uint indexed transactionId);
    event Revocation(address indexed sender, uint indexed transactionId);
    event Submission(uint indexed transactionId);
    event Execution(uint indexed transactionId);
    event ExecutionFailure(uint indexed transactionId);
    event OwnerAddition(address indexed owner);
    event OwnerRemoval(address indexed owner);
    event RequirementChange(uint required);

    /*
     *  Constants
     */
    uint constant public MAX_OWNER_COUNT = 50;

    /*
     *  Storage
     */
    mapping(uint => Transaction) public transactions;
    mapping(uint => mapping(address => bool)) public confirmations;
    mapping(address => bool) public isOwner;
    address[] public owners;
    uint public required;
    uint public transactionCount;

    struct Transaction {
        address destination;
        uint value;
        bytes data;
        bool executed;
    }

    /*
     *  Modifiers
     */
    modifier onlyWallet() {
        require(msg.sender == address(this));
        _;
    }

    modifier ownerDoesNotExist(address owner) {
        require(!isOwner[owner]);
        _;
    }

    modifier ownerExists(address owner) {
        require(isOwner[owner]);
        _;
    }

    modifier transactionExists(uint transactionId) {
        require(transactions[transactionId].destination != address(0));
        _;
    }

    modifier confirmed(uint transactionId, address owner) {
        require(confirmations[transactionId][owner]);
        _;
    }

    modifier notConfirmed(uint transactionId, address owner) {
        require(!confirmations[transactionId][owner]);
        _;
    }

    modifier notExecuted(uint transactionId) {
        require(!transactions[transactionId].executed);
        _;
    }

    modifier notNull(address _address) {
        require(_address != address(0));
        _;
    }

    modifier validRequirement(uint ownerCount, uint _required) {
        require(ownerCount <= MAX_OWNER_COUNT
        && _required <= ownerCount
        && _required != 0
            && ownerCount != 0);
        _;
    }

    /*
     * Public functions
     */
    /// @dev Contract constructor sets initial owners and required number of confirmations.
    /// @param _owners List of initial owners.
    /// @param _required Number of required confirmations.
    constructor(address[] memory _owners, uint _required)
    validRequirement(_owners.length, _required)
    {
        for (uint i = 0; i < _owners.length; i++) {
            require(!isOwner[_owners[i]] && _owners[i] != address(0));
            isOwner[_owners[i]] = true;
        }
        owners = _owners;
        required = _required;
    }

    /// @dev Allows to add a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of new owner.
    function addOwner(address owner)
    public
    onlyWallet
    ownerDoesNotExist(owner)
    notNull(owner)
    validRequirement(owners.length + 1, required)
    {
        isOwner[owner] = true;
        owners.push(owner);
        emit OwnerAddition(owner);
    }

    /// @dev Allows to remove an owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner.
    function removeOwner(address owner)
    public
    onlyWallet
    ownerExists(owner)
    {
        isOwner[owner] = false;
        for (uint i = 0; i < owners.length - 1; i++)
            if (owners[i] == owner) {
                owners[i] = owners[owners.length - 1];
                break;
            }
        owners.pop();
        if (required > owners.length)
            changeRequirement(owners.length);
        emit OwnerRemoval(owner);
    }

    /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner to be replaced.
    /// @param newOwner Address of new owner.
    function replaceOwner(address owner, address newOwner)
    public
    onlyWallet
    ownerExists(owner)
    ownerDoesNotExist(newOwner)
    {
        for (uint i = 0; i < owners.length; i++)
            if (owners[i] == owner) {
                owners[i] = newOwner;
                break;
            }
        isOwner[owner] = false;
        isOwner[newOwner] = true;
        emit OwnerRemoval(owner);
        emit OwnerAddition(newOwner);
    }

    /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.
    /// @param _required Number of required confirmations.
    function changeRequirement(uint _required)
    public
    onlyWallet
    validRequirement(owners.length, _required)
    {
        required = _required;
        emit RequirementChange(_required);
    }

    /// @dev Allows an owner to submit and confirm a transaction.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return transactionId Returns transaction ID.
    function submitTransaction(
        address destination,
        uint value,
        bytes memory data
    ) public returns (uint transactionId)
    {
        transactionId = addTransaction(destination, value, data);
        confirmTransaction(transactionId);
    }

    /// @dev Allows an owner to confirm a transaction.
    /// @param transactionId Transaction ID.
    function confirmTransaction(uint transactionId)
    public
    ownerExists(msg.sender)
    transactionExists(transactionId)
    notConfirmed(transactionId, msg.sender)
    {
        confirmations[transactionId][msg.sender] = true;
        emit Confirmation(msg.sender, transactionId);
        executeTransaction(transactionId);
    }

    /// @dev Allows an owner to revoke a confirmation for a transaction.
    /// @param transactionId Transaction ID.
    function revokeConfirmation(uint transactionId)
    public
    ownerExists(msg.sender)
    confirmed(transactionId, msg.sender)
    notExecuted(transactionId)
    {
        confirmations[transactionId][msg.sender] = false;
        emit Revocation(msg.sender, transactionId);
    }

    /// @dev Allows anyone to execute a confirmed transaction.
    /// @param transactionId Transaction ID.
    function executeTransaction(uint transactionId)
    public
    ownerExists(msg.sender)
    confirmed(transactionId, msg.sender)
    notExecuted(transactionId)
    {
        if (isConfirmed(transactionId)) {
            Transaction storage txn = transactions[transactionId];
            txn.executed = true;
            if (external_call(txn.destination, txn.value, txn.data.length, txn.data))
                emit Execution(transactionId);
            else {
                emit ExecutionFailure(transactionId);
                txn.executed = false;
            }
        }
    }

    // call has been separated into its own function in order to take advantage
    // of the Solidity's code generator to produce a loop that copies tx.data into memory.
    function external_call(address destination, uint value, uint dataLength, bytes memory data) private returns (bool) {
        bool result;
        assembly {
            let x := mload(0x40)   // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention)
            let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that
            result := call(
            sub(gas(), 36810), // 34710 is the value that solidity is currently emitting  // todo
            // It includes callGas (700) + callVeryLow (3, to pay for SUB) + callValueTransferGas (9000) +
            // callNewAccountGas (25000, in case the destination address does not exist and needs creating) +
            // gasSLoadEIP2929 (2100)

            destination,
            value,
            d,
            dataLength, // Size of the input (in bytes) - this is what fixes the padding problem
            x,
            0                  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }

    /// @dev Returns the confirmation status of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Confirmation status.
    function isConfirmed(uint transactionId) public view returns (bool)
    {
        uint count = 0;
        for (uint i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]])
                count += 1;
            if (count == required)
                return true;
        }
        return false;
    }

    /*
     * Internal functions
     */
    /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return transactionId Returns transaction ID.
    function addTransaction(
        address destination,
        uint value,
        bytes memory data
    ) internal
    notNull(destination) returns (uint transactionId)
    {
        transactionId = transactionCount;
        transactions[transactionId] = Transaction({
        destination : destination,
        value : value,
        data : data,
        executed : false
        });
        transactionCount += 1;
        emit Submission(transactionId);
    }

    /*
     * Web3 call functions
     */
    /// @dev Returns number of confirmations of a transaction.
    /// @param transactionId Transaction ID.
    /// @return count Number of confirmations.
    function getConfirmationCount(uint transactionId)
    public
    view
    returns (uint count)
    {
        for (uint i = 0; i < owners.length; i++)
            if (confirmations[transactionId][owners[i]])
                count += 1;
    }

    /// @dev Returns total number of transactions after filers are applied.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return count Total number of transactions after filters are applied.
    function getTransactionCount(bool pending, bool executed)
    public
    view
    returns (uint count)
    {
        for (uint i = 0; i < transactionCount; i++)
            if (pending && !transactions[i].executed
            || executed && transactions[i].executed)
                count += 1;
    }

    /// @dev Returns list of owners.
    /// @return List of owner addresses.
    function getOwners() public view returns (address[] memory)
    {
        return owners;
    }

    /// @dev Returns array with owner addresses, which confirmed transaction.
    /// @param transactionId Transaction ID.
    /// @return _confirmations Returns array of owner addresses.
    function getConfirmations(uint transactionId) public view
    returns (address[] memory _confirmations)
    {
        address[] memory confirmationsTemp = new address[](owners.length);
        uint count = 0;
        uint i;
        for (i = 0; i < owners.length; i++)
            if (confirmations[transactionId][owners[i]]) {
                confirmationsTemp[count] = owners[i];
                count += 1;
            }
        _confirmations = new address[](count);
        for (i = 0; i < count; i++)
            _confirmations[i] = confirmationsTemp[i];
    }

    /// @dev Returns list of transaction IDs in defined range.
    /// @param from Index start position of transaction array.
    /// @param to Index end position of transaction array.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return _transactionIds Returns array of transaction IDs.
    function getTransactionIds(uint from, uint to, bool pending, bool executed)
    public
    view
    returns (uint[] memory _transactionIds)
    {
        uint[] memory transactionIdsTemp = new uint[](transactionCount);
        uint count = 0;
        uint i;
        for (i = 0; i < transactionCount; i++)
            if (pending && !transactions[i].executed
            || executed && transactions[i].executed)
            {
                transactionIdsTemp[count] = i;
                count += 1;
            }
        _transactionIds = new uint[](to - from);
        for (i = from; i < to; i++)
            _transactionIds[i - from] = transactionIdsTemp[i];
    }
}

File 6 of 6 : console.sol
// SPDX-License-Identifier: MIT
pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

Settings
{
  "evmVersion": "byzantium",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256","name":"_required","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Execution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"ExecutionFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerRemoval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"required","type":"uint256"}],"name":"RequirementChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Revocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Submission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"MAX_OWNER_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"_upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_required","type":"uint256"}],"name":"changeRequirement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"confirmTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"confirmations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"getConfirmationCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"getConfirmations","outputs":[{"internalType":"address[]","name":"_confirmations","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"pending","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"name":"getTransactionCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"bool","name":"pending","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"name":"getTransactionIds","outputs":[{"internalType":"uint256[]","name":"_transactionIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"isConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"replaceOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"required","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"revokeConfirmation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"submitTransaction","outputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200285f3803806200285f833981016040819052620000349162000645565b8181815181603282111580156200004b5750818111155b80156200005757508015155b80156200006357508115155b6200006d57600080fd5b60005b845181101562000163576002600086838151811062000093576200009362000821565b602090810291909101810151600160a060020a031682528101919091526040016000205460ff16158015620000f757506000600160a060020a0316858281518110620000e357620000e362000821565b6020026020010151600160a060020a031614155b6200010157600080fd5b6001600260008784815181106200011c576200011c62000821565b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055806200015a81620007de565b91505062000070565b5083516200017990600390602087019062000511565b5050506004555062000194846401000000006200021b810204565b825115620001b857620001b68484640100000000620015686200034a82021704565b505b33620001f27fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036401000000006200158d6200038282021704565b8054600160a060020a031916600160a060020a0392909216919091179055506200087f92505050565b6200023481640100000000620015906200038582021704565b620002c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084015b60405180910390fd5b80620003007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6401000000006200158d6200038282021704565b8054600160a060020a031916600160a060020a03928316179055604051908216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200037b838360405180606001604052806027815260200162002838602791396401000000006200038b810204565b9392505050565b90565b3b151590565b6060620003a18464010000000062000385810204565b6200042f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401620002bd565b60008085600160a060020a0316856040516200044c919062000725565b600060405180830381855af49150503d806000811462000489576040519150601f19603f3d011682016040523d82523d6000602084013e6200048e565b606091505b5091509150620004af828286620004b9640100000000026401000000009004565b9695505050505050565b60608315620004ca5750816200037b565b825115620004db5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002bd919062000743565b82805482825590600052602060002090810192821562000569579160200282015b82811115620005695782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000532565b50620005779291506200057b565b5090565b5b808211156200057757600081556001016200057c565b8051600160a060020a0381168114620005aa57600080fd5b919050565b600082601f830112620005c157600080fd5b815160206001604060020a03821115620005df57620005df62000850565b808202620005ef82820162000778565b8381528281019086840183880185018910156200060b57600080fd5b600093505b858410156200063957620006248162000592565b83526001939093019291840191840162000610565b50979650505050505050565b600080600080608085870312156200065c57600080fd5b620006678562000592565b935060208501516001604060020a03808211156200068457600080fd5b818701915087601f8301126200069957600080fd5b815181811115620006ae57620006ae62000850565b620006c3601f8201601f191660200162000778565b818152896020838601011115620006d957600080fd5b620006ec826020830160208701620007ab565b6040890151909650925050808211156200070557600080fd5b506200071487828801620005af565b606096909601519497939650505050565b6000825162000739818460208701620007ab565b9190910192915050565b602081526000825180602084015262000764816040850160208701620007ab565b601f01601f19169190910160400192915050565b604051601f8201601f191681016001604060020a0381118282101715620007a357620007a362000850565b604052919050565b60005b83811015620007c8578181015183820152602001620007ae565b83811115620007d8576000848401525b50505050565b60006000198214156200081a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fa9806200088f6000396000f3fe608060405260043610610187576000357c0100000000000000000000000000000000000000000000000000000000900480639ace38c2116100ee578063ba885381116100a7578063d74f8edd11610081578063d74f8edd14610487578063dc8452cd1461049c578063e20056e6146104b2578063ee22610b146104d257610196565b8063ba88538114610434578063c01a8c8414610447578063c64274741461046757610196565b80639ace38c21461035f578063a0e67e2b1461038f578063a8abe69a146103b1578063b5dc40c3146103de578063b77bf600146103fe578063ba51a6df1461041457610196565b80634f1ef286116101405780634f1ef286146102a957806354741525146102bc5780635c60da1b146102ea5780637065cb48146102ff578063784547a71461031f5780638b51d13f1461033f57610196565b8063025e7c271461019e578063173825d9146101db57806320ea8d86146101fb5780632f54bf6e1461021b5780633411c81c1461025b5780633659cfe61461029657610196565b36610196576101946104f2565b005b6101946104f2565b3480156101aa57600080fd5b506101be6101b9366004611c30565b61052d565b604051600160a060020a0390911681526020015b60405180910390f35b3480156101e757600080fd5b506101946101f6366004611a90565b610557565b34801561020757600080fd5b50610194610216366004611c30565b61071b565b34801561022757600080fd5b5061024b610236366004611a90565b60026020526000908152604090205460ff1681565b60405190151581526020016101d2565b34801561026757600080fd5b5061024b610276366004611c49565b600160209081526000928352604080842090915290825290205460ff1681565b6101946102a4366004611a90565b6107d1565b6101946102b7366004611ade565b61089e565b3480156102c857600080fd5b506102dc6102d7366004611c06565b6108fc565b6040519081526020016101d2565b3480156102f657600080fd5b506101be610979565b34801561030b57600080fd5b5061019461031a366004611a90565b6109b1565b34801561032b57600080fd5b5061024b61033a366004611c30565b610ad7565b34801561034b57600080fd5b506102dc61035a366004611c30565b610b76565b34801561036b57600080fd5b5061037f61037a366004611c30565b610bfc565b6040516101d29493929190611d63565b34801561039b57600080fd5b506103a4610cba565b6040516101d29190611d9e565b3480156103bd57600080fd5b506103d16103cc366004611c6c565b610d1c565b6040516101d29190611deb565b3480156103ea57600080fd5b506103a46103f9366004611c30565b610eb4565b34801561040a57600080fd5b506102dc60055481565b34801561042057600080fd5b5061019461042f366004611c30565b61108c565b610194610442366004611b61565b611109565b34801561045357600080fd5b50610194610462366004611c30565b611133565b34801561047357600080fd5b506102dc610482366004611baf565b6111f3565b34801561049357600080fd5b506102dc603281565b3480156104a857600080fd5b506102dc60045481565b3480156104be57600080fd5b506101946104cd366004611aab565b611212565b3480156104de57600080fd5b506101946104ed366004611c30565b6113a5565b61052b6105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b611596565b565b6003818154811061053d57600080fd5b600091825260209091200154600160a060020a0316905081565b33301461056357600080fd5b600160a060020a038116600090815260026020526040902054819060ff1661058a57600080fd5b600160a060020a0382166000908152600260205260408120805460ff191690555b6003546105ba90600190611e4e565b81101561068a5782600160a060020a0316600382815481106105de576105de611f1a565b600091825260209091200154600160a060020a03161415610678576003805461060990600190611e4e565b8154811061061957610619611f1a565b60009182526020909120015460038054600160a060020a03909216918390811061064557610645611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061068a565b8061068281611ecd565b9150506105ab565b50600380548061069c5761069c611f01565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905560035460045411156106e3576003546106e39061108c565b604051600160a060020a038316907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25050565b3360008181526002602052604090205460ff1661073757600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1661076157600080fd5b600084815260208190526040902060030154849060ff161561078257600080fd5b6000858152600160209081526040808320338085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b3360008181526002602052604090205460ff166107ed57600080fd5b61089930347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc908560405180602001604052806000815250604051602401610835929190611d39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111f3565b505050565b3360008181526002602052604090205460ff166108ba57600080fd5b6108f530347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc9087878760405160240161083593929190611cfa565b5050505050565b6000805b60055481101561097257838015610929575060008181526020819052604090206003015460ff16155b8061094d575082801561094d575060008181526020819052604090206003015460ff165b156109605761095d600183611e36565b91505b8061096a81611ecd565b915050610900565b5092915050565b60006109ac7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b905090565b3330146109bd57600080fd5b600160a060020a038116600090815260026020526040902054819060ff16156109e557600080fd5b81600160a060020a0381166109f957600080fd5b600354610a07906001611e36565b60045460328211158015610a1b5750818111155b8015610a2657508015155b8015610a3157508115155b610a3a57600080fd5b600160a060020a038516600081815260026020526040808220805460ff1916600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b6c5760008481526001602052604081206003805491929184908110610b0b57610b0b611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610b4657610b43600183611e36565b91505b600454821415610b5a575060019392505050565b80610b6481611ecd565b915050610adc565b5060009392505050565b6000805b600354811015610bf65760008381526001602052604081206003805491929184908110610ba957610ba9611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610be457610be1600183611e36565b91505b80610bee81611ecd565b915050610b7a565b50919050565b600060208190529081526040902080546001820154600283018054600160a060020a03909316939192610c2e90611e95565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90611e95565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610cf4575b5050505050905090565b6060600060055467ffffffffffffffff811115610d3b57610d3b611f33565b604051908082528060200260200182016040528015610d64578160200160208202803683370190505b5090506000805b600554811015610dfb57858015610d94575060008181526020819052604090206003015460ff16155b80610db85750848015610db8575060008181526020819052604090206003015460ff165b15610de95780838381518110610dd057610dd0611f1a565b6020908102919091010152610de6600183611e36565b91505b80610df381611ecd565b915050610d6b565b610e058888611e4e565b67ffffffffffffffff811115610e1d57610e1d611f33565b604051908082528060200260200182016040528015610e46578160200160208202803683370190505b5093508790505b86811015610ea957828181518110610e6757610e67611f1a565b6020026020010151848983610e7c9190611e4e565b81518110610e8c57610e8c611f1a565b602090810291909101015280610ea181611ecd565b915050610e4d565b505050949350505050565b60035460609060009067ffffffffffffffff811115610ed557610ed5611f33565b604051908082528060200260200182016040528015610efe578160200160208202803683370190505b5090506000805b600354811015610fdc5760008581526001602052604081206003805491929184908110610f3457610f34611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610fca5760038181548110610f7457610f74611f1a565b9060005260206000200160009054906101000a9004600160a060020a0316838381518110610fa457610fa4611f1a565b600160a060020a0390921660209283029190910190910152610fc7600183611e36565b91505b80610fd481611ecd565b915050610f05565b8167ffffffffffffffff811115610ff557610ff5611f33565b60405190808252806020026020018201604052801561101e578160200160208202803683370190505b509350600090505b818110156110845782818151811061104057611040611f1a565b602002602001015184828151811061105a5761105a611f1a565b600160a060020a03909216602092830291909101909101528061107c81611ecd565b915050611026565b505050919050565b33301461109857600080fd5b60035481603282118015906110ad5750818111155b80156110b857508015155b80156110c357508115155b6110cc57600080fd5b60048390556040518381527fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9060200160405180910390a1505050565b33301461111557600080fd5b61111e826115ba565b80511561112f576108998282611568565b5050565b3360008181526002602052604090205460ff1661114f57600080fd5b6000828152602081905260409020548290600160a060020a031661117257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561119d57600080fd5b6000858152600160208181526040808420338086529252808420805460ff1916909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36108f5856113a5565b60006112008484846116c3565b905061120b81611133565b9392505050565b33301461121e57600080fd5b600160a060020a038216600090815260026020526040902054829060ff1661124557600080fd5b600160a060020a038216600090815260026020526040902054829060ff161561126d57600080fd5b60005b60035481101561130b5784600160a060020a03166003828154811061129757611297611f1a565b600091825260209091200154600160a060020a031614156112f95783600382815481106112c6576112c6611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061130b565b8061130381611ecd565b915050611270565b50600160a060020a03808516600081815260026020526040808220805460ff1990811690915593871682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038416907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a250505050565b3360008181526002602052604090205460ff166113c157600080fd5b60008281526001602090815260408083203380855292529091205483919060ff166113eb57600080fd5b600084815260208190526040902060030154849060ff161561140c57600080fd5b61141585610ad7565b156108f557600085815260208190526040902060038101805460ff191660019081179091558154908201546002830180546114f393600160a060020a031692919061145f90611e95565b905084600201805461147090611e95565b80601f016020809104026020016040519081016040528092919081815260200182805461149c90611e95565b80156114e95780601f106114be576101008083540402835291602001916114e9565b820191906000526020600020905b8154815290600101906020018083116114cc57829003601f168201915b50505050506117c3565b156115285760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611560565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038101805460ff191690555b505050505050565b606061120b8383604051806060016040528060278152602001611f4d602791396117e6565b90565b3b151590565b3660008037600080366000845af43d6000803e8080156115b5573d6000f35b3d6000fd5b803b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600083600160a060020a0381166116d957600080fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff19169416939093178355516001830155925180519496509193909261175992600285019291019061193e565b50606091909101516003909101805460ff1916911515919091179055600580546001919060009061178b908490611e36565b909155505060405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b6000806040516020840160008287838a8c618fca5a03f198975050505050505050565b6060833b611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401611644565b60008085600160a060020a0316856040516118919190611cde565b600060405180830381855af49150503d80600081146118cc576040519150601f19603f3d011682016040523d82523d6000602084013e6118d1565b606091505b50915091506118e18282866118eb565b9695505050505050565b606083156118fa57508161120b565b82511561190a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116449190611e23565b82805461194a90611e95565b90600052602060002090601f01602090048101928261196c57600085556119b2565b82601f1061198557805160ff19168380011785556119b2565b828001600101855582156119b2579182015b828111156119b2578251825591602001919060010190611997565b506119be9291506119c2565b5090565b5b808211156119be57600081556001016119c3565b8035600160a060020a03811681146119ee57600080fd5b919050565b803580151581146119ee57600080fd5b600082601f830112611a1457600080fd5b813567ffffffffffffffff80821115611a2f57611a2f611f33565b604051601f8301601f19908116603f01168101908282118183101715611a5757611a57611f33565b81604052838152866020858801011115611a7057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611aa257600080fd5b61120b826119d7565b60008060408385031215611abe57600080fd5b611ac7836119d7565b9150611ad5602084016119d7565b90509250929050565b600080600060408486031215611af357600080fd5b611afc846119d7565b9250602084013567ffffffffffffffff80821115611b1957600080fd5b818601915086601f830112611b2d57600080fd5b813581811115611b3c57600080fd5b876020828501011115611b4e57600080fd5b6020830194508093505050509250925092565b60008060408385031215611b7457600080fd5b611b7d836119d7565b9150602083013567ffffffffffffffff811115611b9957600080fd5b611ba585828601611a03565b9150509250929050565b600080600060608486031215611bc457600080fd5b611bcd846119d7565b925060208401359150604084013567ffffffffffffffff811115611bf057600080fd5b611bfc86828701611a03565b9150509250925092565b60008060408385031215611c1957600080fd5b611c22836119f3565b9150611ad5602084016119f3565b600060208284031215611c4257600080fd5b5035919050565b60008060408385031215611c5c57600080fd5b82359150611ad5602084016119d7565b60008060008060808587031215611c8257600080fd5b8435935060208501359250611c99604086016119f3565b9150611ca7606086016119f3565b905092959194509250565b60008151808452611cca816020860160208601611e65565b601f01601f19169290920160200192915050565b60008251611cf0818460208701611e65565b9190910192915050565b600160a060020a038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600160a060020a0383168152604060208201526000611d5b6040830184611cb2565b949350505050565b600160a060020a0385168152836020820152608060408201526000611d8b6080830185611cb2565b9050821515606083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf578351600160a060020a031683529284019291840191600101611dba565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf57835183529284019291840191600101611e07565b60208152600061120b6020830184611cb2565b60008219821115611e4957611e49611ee8565b500190565b600082821015611e6057611e60611ee8565b500390565b60005b83811015611e80578181015183820152602001611e68565b83811115611e8f576000848401525b50505050565b600281046001821680611ea957607f821691505b60208210811415610bf65760e060020a634e487b7102600052602260045260246000fd5b6000600019821415611ee157611ee1611ee8565b5060010190565b60e060020a634e487b7102600052601160045260246000fd5b60e060020a634e487b7102600052603160045260246000fd5b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052604160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220558728c0a320f4caa2d0ad93c90eb723e3aaa33a04102dd7eef27686a8aa796864736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000008f499bc97b99ef413bac02545040b701b86d2628000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000001604169e7a9900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf388fcb8d0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca959ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce36451880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea983538eea1820000000000000000000000000000000000000000000000000000000000000097000000000000000000000000162ba761fc75f5873197a340f9e7fb926ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e647456220000000000000000000000009b1822da3f6450832dd92713f49c075b2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacbecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c0262003d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421de582d072000000000000000000000000ce0131435386f95e527438a021424eb1224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e1581c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24ad110006000000000000000000000000f1e149223a0614f2da591db097fe95101c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e880910722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca9739699d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf24f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db85463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb45c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc424f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54ac996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc716dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996bddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93ca48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e3773683254d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e6641838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a4529e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a07148870b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e029c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0ed21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd7174b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab39526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e569159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f626e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd58776937f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f18104f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f231341cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb67621269938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc657d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d22760495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff0781ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b16212d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669ae09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f844c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf2435f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f3da97d55000000000000000000000000122555bdb0152564070453c447320aaa0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1f4bfcea300000000000000000000000090719a0fa1ed2902ddefc3936993147712ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a408c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3aeb6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf4990cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb9164919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea2269354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c47f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c831539ed3e320000000000000000000000003612882d4149d18a3604a6392b4596826c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9ccb91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1eed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b929fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1938546ba000000000000000000000000df43648a9748901a784c017821b05ba26274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec4267965fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8ccc3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc08699674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee55cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fef8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b808199d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf142200af599e7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000f3cb1e06e72233e0350f7588d11a2585b268c7ad000000000000000000000000b017dccc473499c83f1b553be564f3ceaf002254000000000000000000000000e620e1f969bc3a24ac96d527220ad6b6e2d12843000000000000000000000000e8d204d3b12e643888debd525e2f8034fc7eb855000000000000000000000000fe231e979dae1d87cd961aa353221c0c754941d800000000000000000000000059c66c7e3d3f239961c87a4627f86a5a9049407c000000000000000000000000a5e32d3fb342d9ed3135fd5cb59a102ac8ed7b85

Deployed Bytecode

0x608060405260043610610187576000357c0100000000000000000000000000000000000000000000000000000000900480639ace38c2116100ee578063ba885381116100a7578063d74f8edd11610081578063d74f8edd14610487578063dc8452cd1461049c578063e20056e6146104b2578063ee22610b146104d257610196565b8063ba88538114610434578063c01a8c8414610447578063c64274741461046757610196565b80639ace38c21461035f578063a0e67e2b1461038f578063a8abe69a146103b1578063b5dc40c3146103de578063b77bf600146103fe578063ba51a6df1461041457610196565b80634f1ef286116101405780634f1ef286146102a957806354741525146102bc5780635c60da1b146102ea5780637065cb48146102ff578063784547a71461031f5780638b51d13f1461033f57610196565b8063025e7c271461019e578063173825d9146101db57806320ea8d86146101fb5780632f54bf6e1461021b5780633411c81c1461025b5780633659cfe61461029657610196565b36610196576101946104f2565b005b6101946104f2565b3480156101aa57600080fd5b506101be6101b9366004611c30565b61052d565b604051600160a060020a0390911681526020015b60405180910390f35b3480156101e757600080fd5b506101946101f6366004611a90565b610557565b34801561020757600080fd5b50610194610216366004611c30565b61071b565b34801561022757600080fd5b5061024b610236366004611a90565b60026020526000908152604090205460ff1681565b60405190151581526020016101d2565b34801561026757600080fd5b5061024b610276366004611c49565b600160209081526000928352604080842090915290825290205460ff1681565b6101946102a4366004611a90565b6107d1565b6101946102b7366004611ade565b61089e565b3480156102c857600080fd5b506102dc6102d7366004611c06565b6108fc565b6040519081526020016101d2565b3480156102f657600080fd5b506101be610979565b34801561030b57600080fd5b5061019461031a366004611a90565b6109b1565b34801561032b57600080fd5b5061024b61033a366004611c30565b610ad7565b34801561034b57600080fd5b506102dc61035a366004611c30565b610b76565b34801561036b57600080fd5b5061037f61037a366004611c30565b610bfc565b6040516101d29493929190611d63565b34801561039b57600080fd5b506103a4610cba565b6040516101d29190611d9e565b3480156103bd57600080fd5b506103d16103cc366004611c6c565b610d1c565b6040516101d29190611deb565b3480156103ea57600080fd5b506103a46103f9366004611c30565b610eb4565b34801561040a57600080fd5b506102dc60055481565b34801561042057600080fd5b5061019461042f366004611c30565b61108c565b610194610442366004611b61565b611109565b34801561045357600080fd5b50610194610462366004611c30565b611133565b34801561047357600080fd5b506102dc610482366004611baf565b6111f3565b34801561049357600080fd5b506102dc603281565b3480156104a857600080fd5b506102dc60045481565b3480156104be57600080fd5b506101946104cd366004611aab565b611212565b3480156104de57600080fd5b506101946104ed366004611c30565b6113a5565b61052b6105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b611596565b565b6003818154811061053d57600080fd5b600091825260209091200154600160a060020a0316905081565b33301461056357600080fd5b600160a060020a038116600090815260026020526040902054819060ff1661058a57600080fd5b600160a060020a0382166000908152600260205260408120805460ff191690555b6003546105ba90600190611e4e565b81101561068a5782600160a060020a0316600382815481106105de576105de611f1a565b600091825260209091200154600160a060020a03161415610678576003805461060990600190611e4e565b8154811061061957610619611f1a565b60009182526020909120015460038054600160a060020a03909216918390811061064557610645611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061068a565b8061068281611ecd565b9150506105ab565b50600380548061069c5761069c611f01565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905560035460045411156106e3576003546106e39061108c565b604051600160a060020a038316907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25050565b3360008181526002602052604090205460ff1661073757600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1661076157600080fd5b600084815260208190526040902060030154849060ff161561078257600080fd5b6000858152600160209081526040808320338085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b3360008181526002602052604090205460ff166107ed57600080fd5b61089930347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc908560405180602001604052806000815250604051602401610835929190611d39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111f3565b505050565b3360008181526002602052604090205460ff166108ba57600080fd5b6108f530347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc9087878760405160240161083593929190611cfa565b5050505050565b6000805b60055481101561097257838015610929575060008181526020819052604090206003015460ff16155b8061094d575082801561094d575060008181526020819052604090206003015460ff165b156109605761095d600183611e36565b91505b8061096a81611ecd565b915050610900565b5092915050565b60006109ac7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b905090565b3330146109bd57600080fd5b600160a060020a038116600090815260026020526040902054819060ff16156109e557600080fd5b81600160a060020a0381166109f957600080fd5b600354610a07906001611e36565b60045460328211158015610a1b5750818111155b8015610a2657508015155b8015610a3157508115155b610a3a57600080fd5b600160a060020a038516600081815260026020526040808220805460ff1916600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b6c5760008481526001602052604081206003805491929184908110610b0b57610b0b611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610b4657610b43600183611e36565b91505b600454821415610b5a575060019392505050565b80610b6481611ecd565b915050610adc565b5060009392505050565b6000805b600354811015610bf65760008381526001602052604081206003805491929184908110610ba957610ba9611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610be457610be1600183611e36565b91505b80610bee81611ecd565b915050610b7a565b50919050565b600060208190529081526040902080546001820154600283018054600160a060020a03909316939192610c2e90611e95565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90611e95565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610cf4575b5050505050905090565b6060600060055467ffffffffffffffff811115610d3b57610d3b611f33565b604051908082528060200260200182016040528015610d64578160200160208202803683370190505b5090506000805b600554811015610dfb57858015610d94575060008181526020819052604090206003015460ff16155b80610db85750848015610db8575060008181526020819052604090206003015460ff165b15610de95780838381518110610dd057610dd0611f1a565b6020908102919091010152610de6600183611e36565b91505b80610df381611ecd565b915050610d6b565b610e058888611e4e565b67ffffffffffffffff811115610e1d57610e1d611f33565b604051908082528060200260200182016040528015610e46578160200160208202803683370190505b5093508790505b86811015610ea957828181518110610e6757610e67611f1a565b6020026020010151848983610e7c9190611e4e565b81518110610e8c57610e8c611f1a565b602090810291909101015280610ea181611ecd565b915050610e4d565b505050949350505050565b60035460609060009067ffffffffffffffff811115610ed557610ed5611f33565b604051908082528060200260200182016040528015610efe578160200160208202803683370190505b5090506000805b600354811015610fdc5760008581526001602052604081206003805491929184908110610f3457610f34611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610fca5760038181548110610f7457610f74611f1a565b9060005260206000200160009054906101000a9004600160a060020a0316838381518110610fa457610fa4611f1a565b600160a060020a0390921660209283029190910190910152610fc7600183611e36565b91505b80610fd481611ecd565b915050610f05565b8167ffffffffffffffff811115610ff557610ff5611f33565b60405190808252806020026020018201604052801561101e578160200160208202803683370190505b509350600090505b818110156110845782818151811061104057611040611f1a565b602002602001015184828151811061105a5761105a611f1a565b600160a060020a03909216602092830291909101909101528061107c81611ecd565b915050611026565b505050919050565b33301461109857600080fd5b60035481603282118015906110ad5750818111155b80156110b857508015155b80156110c357508115155b6110cc57600080fd5b60048390556040518381527fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9060200160405180910390a1505050565b33301461111557600080fd5b61111e826115ba565b80511561112f576108998282611568565b5050565b3360008181526002602052604090205460ff1661114f57600080fd5b6000828152602081905260409020548290600160a060020a031661117257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561119d57600080fd5b6000858152600160208181526040808420338086529252808420805460ff1916909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36108f5856113a5565b60006112008484846116c3565b905061120b81611133565b9392505050565b33301461121e57600080fd5b600160a060020a038216600090815260026020526040902054829060ff1661124557600080fd5b600160a060020a038216600090815260026020526040902054829060ff161561126d57600080fd5b60005b60035481101561130b5784600160a060020a03166003828154811061129757611297611f1a565b600091825260209091200154600160a060020a031614156112f95783600382815481106112c6576112c6611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061130b565b8061130381611ecd565b915050611270565b50600160a060020a03808516600081815260026020526040808220805460ff1990811690915593871682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038416907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a250505050565b3360008181526002602052604090205460ff166113c157600080fd5b60008281526001602090815260408083203380855292529091205483919060ff166113eb57600080fd5b600084815260208190526040902060030154849060ff161561140c57600080fd5b61141585610ad7565b156108f557600085815260208190526040902060038101805460ff191660019081179091558154908201546002830180546114f393600160a060020a031692919061145f90611e95565b905084600201805461147090611e95565b80601f016020809104026020016040519081016040528092919081815260200182805461149c90611e95565b80156114e95780601f106114be576101008083540402835291602001916114e9565b820191906000526020600020905b8154815290600101906020018083116114cc57829003601f168201915b50505050506117c3565b156115285760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611560565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038101805460ff191690555b505050505050565b606061120b8383604051806060016040528060278152602001611f4d602791396117e6565b90565b3b151590565b3660008037600080366000845af43d6000803e8080156115b5573d6000f35b3d6000fd5b803b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600083600160a060020a0381166116d957600080fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff19169416939093178355516001830155925180519496509193909261175992600285019291019061193e565b50606091909101516003909101805460ff1916911515919091179055600580546001919060009061178b908490611e36565b909155505060405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b6000806040516020840160008287838a8c618fca5a03f198975050505050505050565b6060833b611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401611644565b60008085600160a060020a0316856040516118919190611cde565b600060405180830381855af49150503d80600081146118cc576040519150601f19603f3d011682016040523d82523d6000602084013e6118d1565b606091505b50915091506118e18282866118eb565b9695505050505050565b606083156118fa57508161120b565b82511561190a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116449190611e23565b82805461194a90611e95565b90600052602060002090601f01602090048101928261196c57600085556119b2565b82601f1061198557805160ff19168380011785556119b2565b828001600101855582156119b2579182015b828111156119b2578251825591602001919060010190611997565b506119be9291506119c2565b5090565b5b808211156119be57600081556001016119c3565b8035600160a060020a03811681146119ee57600080fd5b919050565b803580151581146119ee57600080fd5b600082601f830112611a1457600080fd5b813567ffffffffffffffff80821115611a2f57611a2f611f33565b604051601f8301601f19908116603f01168101908282118183101715611a5757611a57611f33565b81604052838152866020858801011115611a7057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611aa257600080fd5b61120b826119d7565b60008060408385031215611abe57600080fd5b611ac7836119d7565b9150611ad5602084016119d7565b90509250929050565b600080600060408486031215611af357600080fd5b611afc846119d7565b9250602084013567ffffffffffffffff80821115611b1957600080fd5b818601915086601f830112611b2d57600080fd5b813581811115611b3c57600080fd5b876020828501011115611b4e57600080fd5b6020830194508093505050509250925092565b60008060408385031215611b7457600080fd5b611b7d836119d7565b9150602083013567ffffffffffffffff811115611b9957600080fd5b611ba585828601611a03565b9150509250929050565b600080600060608486031215611bc457600080fd5b611bcd846119d7565b925060208401359150604084013567ffffffffffffffff811115611bf057600080fd5b611bfc86828701611a03565b9150509250925092565b60008060408385031215611c1957600080fd5b611c22836119f3565b9150611ad5602084016119f3565b600060208284031215611c4257600080fd5b5035919050565b60008060408385031215611c5c57600080fd5b82359150611ad5602084016119d7565b60008060008060808587031215611c8257600080fd5b8435935060208501359250611c99604086016119f3565b9150611ca7606086016119f3565b905092959194509250565b60008151808452611cca816020860160208601611e65565b601f01601f19169290920160200192915050565b60008251611cf0818460208701611e65565b9190910192915050565b600160a060020a038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600160a060020a0383168152604060208201526000611d5b6040830184611cb2565b949350505050565b600160a060020a0385168152836020820152608060408201526000611d8b6080830185611cb2565b9050821515606083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf578351600160a060020a031683529284019291840191600101611dba565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf57835183529284019291840191600101611e07565b60208152600061120b6020830184611cb2565b60008219821115611e4957611e49611ee8565b500190565b600082821015611e6057611e60611ee8565b500390565b60005b83811015611e80578181015183820152602001611e68565b83811115611e8f576000848401525b50505050565b600281046001821680611ea957607f821691505b60208210811415610bf65760e060020a634e487b7102600052602260045260246000fd5b6000600019821415611ee157611ee1611ee8565b5060010190565b60e060020a634e487b7102600052601160045260246000fd5b60e060020a634e487b7102600052603160045260246000fd5b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052604160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220558728c0a320f4caa2d0ad93c90eb723e3aaa33a04102dd7eef27686a8aa796864736f6c63430008060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008f499bc97b99ef413bac02545040b701b86d2628000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000001604169e7a9900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf388fcb8d0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca959ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce36451880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea983538eea1820000000000000000000000000000000000000000000000000000000000000097000000000000000000000000162ba761fc75f5873197a340f9e7fb926ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e647456220000000000000000000000009b1822da3f6450832dd92713f49c075b2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacbecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c0262003d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421de582d072000000000000000000000000ce0131435386f95e527438a021424eb1224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e1581c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24ad110006000000000000000000000000f1e149223a0614f2da591db097fe95101c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e880910722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca9739699d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf24f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db85463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb45c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc424f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54ac996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc716dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996bddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93ca48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e3773683254d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e6641838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a4529e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a07148870b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e029c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0ed21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd7174b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab39526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e569159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f626e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd58776937f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f18104f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f231341cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb67621269938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc657d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d22760495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff0781ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b16212d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669ae09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f844c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf2435f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f3da97d55000000000000000000000000122555bdb0152564070453c447320aaa0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1f4bfcea300000000000000000000000090719a0fa1ed2902ddefc3936993147712ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a408c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3aeb6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf4990cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb9164919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea2269354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c47f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c831539ed3e320000000000000000000000003612882d4149d18a3604a6392b4596826c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9ccb91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1eed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b929fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1938546ba000000000000000000000000df43648a9748901a784c017821b05ba26274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec4267965fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8ccc3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc08699674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee55cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fef8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b808199d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf142200af599e7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000f3cb1e06e72233e0350f7588d11a2585b268c7ad000000000000000000000000b017dccc473499c83f1b553be564f3ceaf002254000000000000000000000000e620e1f969bc3a24ac96d527220ad6b6e2d12843000000000000000000000000e8d204d3b12e643888debd525e2f8034fc7eb855000000000000000000000000fe231e979dae1d87cd961aa353221c0c754941d800000000000000000000000059c66c7e3d3f239961c87a4627f86a5a9049407c000000000000000000000000a5e32d3fb342d9ed3135fd5cb59a102ac8ed7b85

-----Decoded View---------------
Arg [0] : _logic (address): 0x8F499Bc97B99EF413bAc02545040b701b86d2628
Arg [1] : _data (bytes): 0x169e7a9900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf388fcb8d0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca959ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce36451880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea983538eea1820000000000000000000000000000000000000000000000000000000000000097000000000000000000000000162ba761fc75f5873197a340f9e7fb926ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e647456220000000000000000000000009b1822da3f6450832dd92713f49c075b2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacbecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c0262003d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421de582d072000000000000000000000000ce0131435386f95e527438a021424eb1224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e1581c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24ad110006000000000000000000000000f1e149223a0614f2da591db097fe95101c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e880910722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca9739699d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf24f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db85463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb45c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc424f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54ac996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc716dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996bddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93ca48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e3773683254d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e6641838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a4529e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a07148870b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e029c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0ed21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd7174b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab39526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e569159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f626e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd58776937f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f18104f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f231341cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb67621269938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc657d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d22760495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff0781ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b16212d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669ae09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f844c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf2435f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f3da97d55000000000000000000000000122555bdb0152564070453c447320aaa0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1f4bfcea300000000000000000000000090719a0fa1ed2902ddefc3936993147712ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a408c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3aeb6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf4990cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb9164919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea2269354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c47f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c831539ed3e320000000000000000000000003612882d4149d18a3604a6392b4596826c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9ccb91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1eed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b929fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1938546ba000000000000000000000000df43648a9748901a784c017821b05ba26274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec4267965fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8ccc3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc08699674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee55cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fef8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b808199d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf142200af599e7
Arg [2] : owners (address[]): 0xf3cb1e06e72233e0350F7588D11a2585B268C7AD,0xb017DcCC473499C83f1b553bE564f3CeAf002254,0xe620e1F969Bc3a24Ac96D527220AD6B6e2d12843,0xe8d204D3B12E643888DEBD525e2f8034fC7EB855,0xFe231E979dAe1D87Cd961Aa353221C0c754941d8,0x59C66c7E3D3F239961c87A4627F86a5a9049407C,0xa5E32D3fB342D9Ed3135fD5cb59a102AC8ED7B85
Arg [3] : _required (uint256): 4

-----Encoded View---------------
190 Constructor Arguments found :
Arg [0] : 0000000000000000000000008f499bc97b99ef413bac02545040b701b86d2628
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000016c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001604
Arg [5] : 169e7a9900000000000000000000000000000000000000000000000000000000
Arg [6] : 000000a000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000030000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf3
Arg [9] : 88fcb8d000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b
Arg [11] : 38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270
Arg [12] : 091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca95
Arg [13] : 9ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead908
Arg [14] : 3c756cc200000000000000000000000000000000000000000000000000000000
Arg [15] : 0000016000000000000000000000000000000000000000000000000000000000
Arg [16] : 000001e000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [19] : 0000384000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000025800000000000000000000000000000000000000000000000000000000
Arg [21] : 0000000a00000000000000000000000000000000000000000000000000000000
Arg [22] : 00000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447c
Arg [23] : e364518800000000000000000000000000000000000000000000000000000000
Arg [24] : 00000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead908
Arg [25] : 3c756cc200000000000000000000000000000000000000000000000000000000
Arg [26] : 000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af
Arg [27] : 202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447c
Arg [28] : e3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea9835
Arg [29] : 38eea18200000000000000000000000000000000000000000000000000000000
Arg [30] : 00000097000000000000000000000000162ba761fc75f5873197a340f9e7fb92
Arg [31] : 6ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f
Arg [32] : 7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36
Arg [33] : f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4
Arg [34] : b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e
Arg [35] : 647456220000000000000000000000009b1822da3f6450832dd92713f49c075b
Arg [36] : 2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacb
Arg [37] : ecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3
Arg [38] : e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c026200
Arg [39] : 3d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421d
Arg [40] : e582d072000000000000000000000000ce0131435386f95e527438a021424eb1
Arg [41] : 224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e15
Arg [42] : 81c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090
Arg [43] : c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24
Arg [44] : ad110006000000000000000000000000f1e149223a0614f2da591db097fe9510
Arg [45] : 1c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b
Arg [46] : 29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21
Arg [47] : c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e8809
Arg [48] : 10722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e
Arg [49] : 83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca973969
Arg [50] : 9d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf2
Arg [51] : 4f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b
Arg [52] : 763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db8
Arg [53] : 5463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d
Arg [54] : 2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4
Arg [55] : e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb4
Arg [56] : 5c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc4
Arg [57] : 24f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793
Arg [58] : c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8
Arg [59] : a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250
Arg [60] : e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54a
Arg [61] : c996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee
Arg [62] : 9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44
Arg [63] : a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9
Arg [64] : cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc7
Arg [65] : 16dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996b
Arg [66] : ddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb
Arg [67] : 16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a
Arg [68] : 9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5
Arg [69] : e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce
Arg [70] : 230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93c
Arg [71] : a48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5
Arg [72] : bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e37736832
Arg [73] : 54d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e664
Arg [74] : 1838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29
Arg [75] : dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764
Arg [76] : ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a452
Arg [77] : 9e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a071488
Arg [78] : 70b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e0
Arg [79] : 29c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0e
Arg [80] : d21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34
Arg [81] : 134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e
Arg [82] : 15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5
Arg [83] : fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127
Arg [84] : a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd71
Arg [85] : 74b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e
Arg [86] : 966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a
Arg [87] : 8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70
Arg [88] : ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d
Arg [89] : 2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948
Arg [90] : ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f
Arg [91] : 93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d
Arg [92] : 5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab3
Arg [93] : 9526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127
Arg [94] : 061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e56
Arg [95] : 9159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74
Arg [96] : 873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f6
Arg [97] : 26e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd5877693
Arg [98] : 7f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38
Arg [99] : d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f181
Arg [100] : 04f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f23134
Arg [101] : 1cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f
Arg [102] : 93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636
Arg [103] : a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92
Arg [104] : f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d
Arg [105] : 21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b
Arg [106] : 9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb6762126
Arg [107] : 9938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc
Arg [108] : 8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7
Arg [109] : a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc6
Arg [110] : 57d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2
Arg [111] : e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d2276
Arg [112] : 0495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff07
Arg [113] : 81ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b1621
Arg [114] : 2d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669a
Arg [115] : e09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09
Arg [116] : b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f
Arg [117] : 7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f
Arg [118] : 094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5
Arg [119] : f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59
Arg [120] : 232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84
Arg [121] : 199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182
Arg [122] : db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f8
Arg [123] : 44c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803
Arg [124] : ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b
Arg [125] : 6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421
Arg [126] : c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8
Arg [127] : 662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc
Arg [128] : 5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf24
Arg [129] : 35f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1
Arg [130] : 582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963
Arg [131] : fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4
Arg [132] : d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f
Arg [133] : 3da97d55000000000000000000000000122555bdb0152564070453c447320aaa
Arg [134] : 0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1
Arg [135] : f4bfcea300000000000000000000000090719a0fa1ed2902ddefc39369931477
Arg [136] : 12ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee
Arg [137] : 63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a4
Arg [138] : 08c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3ae
Arg [139] : b6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56
Arg [140] : 220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf49
Arg [141] : 90cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c
Arg [142] : 0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb91
Arg [143] : 64919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5
Arg [144] : e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43
Arg [145] : f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0
Arg [146] : f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9
Arg [147] : d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea226
Arg [148] : 9354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c4
Arg [149] : 7f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c8315
Arg [150] : 39ed3e320000000000000000000000003612882d4149d18a3604a6392b459682
Arg [151] : 6c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9cc
Arg [152] : b91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1e
Arg [153] : ed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af
Arg [154] : 9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda
Arg [155] : 412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7
Arg [156] : cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b9
Arg [157] : 29fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7
Arg [158] : e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1
Arg [159] : 938546ba000000000000000000000000df43648a9748901a784c017821b05ba2
Arg [160] : 6274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65
Arg [161] : dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec426796
Arg [162] : 5fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8cc
Arg [163] : c3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104
Arg [164] : eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc0869
Arg [165] : 9674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142
Arg [166] : c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7
Arg [167] : 741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee5
Arg [168] : 5cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec
Arg [169] : 4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fe
Arg [170] : f8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f
Arg [171] : 8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b8081
Arg [172] : 99d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e
Arg [173] : 6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd
Arg [174] : 7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979
Arg [175] : f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30
Arg [176] : dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b
Arg [177] : 986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5
Arg [178] : c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76
Arg [179] : de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd
Arg [180] : 18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf14220
Arg [181] : 0af599e700000000000000000000000000000000000000000000000000000000
Arg [182] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [183] : 000000000000000000000000f3cb1e06e72233e0350f7588d11a2585b268c7ad
Arg [184] : 000000000000000000000000b017dccc473499c83f1b553be564f3ceaf002254
Arg [185] : 000000000000000000000000e620e1f969bc3a24ac96d527220ad6b6e2d12843
Arg [186] : 000000000000000000000000e8d204d3b12e643888debd525e2f8034fc7eb855
Arg [187] : 000000000000000000000000fe231e979dae1d87cd961aa353221c0c754941d8
Arg [188] : 00000000000000000000000059c66c7e3d3f239961c87a4627f86a5a9049407c
Arg [189] : 000000000000000000000000a5e32d3fb342d9ed3135fd5cb59a102ac8ed7b85


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.