ETH Price: $3,330.44 (+1.21%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...216041932025-01-11 22:21:5914 days ago1736634119IN
0x824F9D87...7f1cEF39d
0 ETH0.000103874.27497304
Safe Transfer Fr...215480172025-01-04 2:04:5922 days ago1735956299IN
0x824F9D87...7f1cEF39d
0 ETH0.00052447.70395291
Set Approval For...215198862024-12-31 3:51:4726 days ago1735617107IN
0x824F9D87...7f1cEF39d
0 ETH0.000180543.89991066
Set Approval For...214712692024-12-24 8:54:3533 days ago1735030475IN
0x824F9D87...7f1cEF39d
0 ETH0.000326087.04371312
Set Approval For...208988882024-10-05 10:58:47112 days ago1728125927IN
0x824F9D87...7f1cEF39d
0 ETH0.0002474510.18376985
Set Approval For...208104132024-09-23 2:50:59125 days ago1727059859IN
0x824F9D87...7f1cEF39d
0 ETH0.000225799.2922248
Set Approval For...201953352024-06-29 5:44:11211 days ago1719639851IN
0x824F9D87...7f1cEF39d
0 ETH0.000103482.23585267
Set Approval For...196902462024-04-19 15:02:23281 days ago1713538943IN
0x824F9D87...7f1cEF39d
0 ETH0.0006695314.46245239
Set Approval For...196117322024-04-08 15:06:11292 days ago1712588771IN
0x824F9D87...7f1cEF39d
0 ETH0.001228626.53869563
Set Approval For...196036062024-04-07 11:45:35293 days ago1712490335IN
0x824F9D87...7f1cEF39d
0 ETH0.0005916512.8032626
Set Approval For...196002562024-04-07 0:28:35294 days ago1712449715IN
0x824F9D87...7f1cEF39d
0 ETH0.000561312.12756839
Set Approval For...195162992024-03-26 4:40:23306 days ago1711428023IN
0x824F9D87...7f1cEF39d
0 ETH0.0008380618.10738583
Set Approval For...195141412024-03-25 21:25:47306 days ago1711401947IN
0x824F9D87...7f1cEF39d
0 ETH0.001704836.82476425
Set Approval For...194298102024-03-14 0:51:23318 days ago1710377483IN
0x824F9D87...7f1cEF39d
0 ETH0.0023245750.22514017
Set Approval For...187589582023-12-10 23:02:23412 days ago1702249343IN
0x824F9D87...7f1cEF39d
0 ETH0.001176425.41110942
Set Approval For...179673372023-08-22 2:41:35523 days ago1692672095IN
0x824F9D87...7f1cEF39d
0 ETH0.0010124621.86995602
Set Approval For...178399002023-08-04 6:41:23541 days ago1691131283IN
0x824F9D87...7f1cEF39d
0 ETH0.0006908514.95009028
Set Approval For...176059192023-07-02 11:06:35573 days ago1688295995IN
0x824F9D87...7f1cEF39d
0 ETH0.0006512814.09366203
Set Approval For...172760432023-05-17 1:15:47620 days ago1684286147IN
0x824F9D87...7f1cEF39d
0 ETH0.001255447.69232373
Set Approval For...172760292023-05-17 1:12:59620 days ago1684285979IN
0x824F9D87...7f1cEF39d
0 ETH0.0009906140.72762537
Safe Transfer Fr...171508172023-04-29 9:18:23637 days ago1682759903IN
0x824F9D87...7f1cEF39d
0 ETH0.002175534.18558727
Safe Transfer Fr...171354782023-04-27 5:35:47640 days ago1682573747IN
0x824F9D87...7f1cEF39d
0 ETH0.0021827447.34298919
Safe Transfer Fr...170693782023-04-17 22:13:59649 days ago1681769639IN
0x824F9D87...7f1cEF39d
0 ETH0.0014768831.7350085
Set Approval For...170494222023-04-15 2:14:59652 days ago1681524899IN
0x824F9D87...7f1cEF39d
0 ETH0.0009732221.06053675
Set Approval For...170435392023-04-14 6:03:11653 days ago1681452191IN
0x824F9D87...7f1cEF39d
0 ETH0.0015299933.10885402
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
166544622023-02-18 8:54:11708 days ago1676710451
0x824F9D87...7f1cEF39d
3.564 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SatoshiAvas

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-16
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9 <0.9.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
	
    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");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    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);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    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);
    }

    function verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

library MerkleProof {
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function multiProofVerify(bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    function multiProofVerifyCalldata(bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    function processMultiProof(bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);
    IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
    
	constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        if (address(operatorFilterRegistry).code.length > 0) {
            if (from == msg.sender) {
                _;
                return;
            }
            if (
                !(
                    operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)
                        && operatorFilterRegistry.isOperatorAllowed(address(this), from)
                )
            ) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);
    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all");
        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

	function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
		return _operatorApprovals[owner][operator];
	}

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _safeTransfer(from, to, tokenId, data);
    }

    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
        _beforeTokenTransfer(address(0), to, tokenId);
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(address(0), to, tokenId);
        _afterTokenTransfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        _approve(address(0), tokenId);
        _balances[owner] -= 1;
        delete _owners[tokenId];
        emit Transfer(owner, address(0), tokenId);
        _afterTokenTransfer(owner, address(0), tokenId);
    }

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(from, to, tokenId);
        _afterTokenTransfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
}

contract ERC721F is Ownable, ERC721, DefaultOperatorFilterer {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenSupply;

    string private _baseTokenURI;

    constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) {
    }

    function walletOfOwner(address _owner) external view returns (uint256[] memory){
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = _startTokenId();
        uint256 ownedTokenIndex = 0;

        while (ownedTokenIndex < ownerTokenCount && currentTokenId < _tokenSupply.current()) {
            if (ownerOf(currentTokenId) == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;
                unchecked{ ownedTokenIndex++;}
            }
            unchecked{ currentTokenId++;}
        }
        return ownedTokenIds;
    }
    
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

    function setBaseTokenURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function _mint(address to, uint256 tokenId) internal virtual override {
        super._mint(to, tokenId);
        _tokenSupply.increment();
    }
	
    function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId, data);
    }
	
    function totalSupply() public view returns (uint256) {
        return _tokenSupply.current();
    }
}

abstract contract ERC721Payable {
    function _withdraw(address _address, uint256 _amount) internal {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to withdraw Ether");
    }
    receive() external payable { }
}

contract ERC721FCOMMON is ERC721F, ERC721Payable {
    constructor(string memory name_, string memory symbol_) ERC721F(name_, symbol_) {
    }
}

contract SatoshiAvas is ERC721FCOMMON {
    uint256 public tokenPrice = 0.006 ether; 
    uint256 public constant MAX_TOKENS = 1000;
	uint public constant MAX_RESERVE = 10;
    uint public saleState;
    bytes32 public claimlistMerkleRoot;
	mapping(address => uint256) private userBalanceSaleMint;
    mapping(address => uint256) private userBalanceClaim;
    
    constructor() ERC721FCOMMON("SatoshiMysteryAvatars", "SMA") {
        setBaseTokenURI("https://mint.ordersatoshi.com/avatars/meta/");
        _mint(msg.sender, 0);
    }

    function airdrop(address to, uint256 numberOfTokens) public onlyOwner {    
        uint supply = totalSupply();
		require(numberOfTokens != 0, "numberOfNfts cannot be 0");
        require(supply + numberOfTokens <= MAX_RESERVE, "Airdrop would exceed max reserve value");
        for (uint i = 0; i < numberOfTokens;) {
            _safeMint(to, supply + i);
            unchecked{ i++;}
        }
    }

    function setMintPrice(uint256 price) external onlyOwner {
        tokenPrice = price;
    }
		
    function setMerkleRoot(bytes32 _newRoot) external onlyOwner {
        claimlistMerkleRoot = _newRoot;
    }

    function setSaleState(uint256 _id) external onlyOwner {
        require(_id < 4, "!id");
        saleState=_id;
    }

    function mint() external payable {
        require(saleState==2, "$_sat_$Sale is not active$$_sat_$$");
        require(userBalanceSaleMint[msg.sender]<2,"$_sat_$Max mint amount is 2 tokens for 1 address$$_sat_$$");
        require(msg.sender == tx.origin, "$_sat_$No Contracts allowed$$_sat_$$");
        require(tokenPrice <= msg.value, "$_sat_$ETH value sent is not correct$$_sat_$$");
        uint256 supply = totalSupply();
        require(supply < MAX_TOKENS, "$_sat_$All collection tokens have been already minted$$_sat_$$");
        userBalanceSaleMint[msg.sender] += 1;
        _mint(msg.sender, supply);
    }

    function claim(bytes32[] calldata merkleProof) external {
        require(saleState==1, "$_sat_$Claim is not active$$_sat_$$");
        require(userBalanceClaim[msg.sender] < 1,"$_sat_$Max claim amount is 1 token for 1 address$$_sat_$$");
        require(msg.sender == tx.origin, "$_sat_$No Contracts allowed$$_sat_$$");
        uint256 supply = totalSupply();
        require(supply < MAX_TOKENS, "$_sat_$All collection tokens have been already minted$$_sat_$$");
        require(checkValidity(merkleProof), "$_sat_$Invalid Merkle Proof$$_sat_$$");
        userBalanceClaim[msg.sender] = 1;
        _mint(msg.sender, supply);
    }

    function checkValidity(bytes32[] calldata merkleProof) internal view returns (bool) {
        bytes32 leafToCheck = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(merkleProof, claimlistMerkleRoot, leafToCheck);
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficient balance");
        _withdraw(owner(), address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052661550f7dca700006009553480156200001c57600080fd5b506040518060400160405280601581526020017f5361746f7368694d79737465727941766174617273000000000000000000000081525060405180604001604052806003815260200162534d4160e81b8152508181733cc6cdda760b79bafa08df41ecfa224f810dceb660018383620000a46200009e6200024660201b60201c565b6200024a565b6001620000b2838262000540565b506002620000c1828262000540565b5050506daaeb6d7670e522a718067333cd4e3b15620002095780156200015757604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200013857600080fd5b505af11580156200014d573d6000803e3d6000fd5b5050505062000209565b6001600160a01b03821615620001a85760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af2903906044016200011d565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001ef57600080fd5b505af115801562000204573d6000803e3d6000fd5b505050505b505050505050620002336040518060600160405280602b815260200162002ca0602b91396200029a565b62000240336000620002b6565b62000634565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620002a4620002e4565b6008620002b2828262000540565b5050565b620002cd82826200034660201b620014091760201c565b620002b260076200048e60201b6200154b1760201c565b6000546001600160a01b03163314620003445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6001600160a01b0382166200039e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016200033b565b6000818152600360205260409020546001600160a01b031615620004055760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016200033b565b6001600160a01b0382166000908152600460205260408120805460019290620004309084906200060c565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004c757607f821691505b602082108103620004e857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200049757600081815260208120601f850160051c81016020861015620005175750805b601f850160051c820191505b81811015620005385782815560010162000523565b505050505050565b81516001600160401b038111156200055c576200055c6200049c565b62000574816200056d8454620004b2565b84620004ee565b602080601f831160018114620005ac5760008415620005935750858301515b600019600386901b1c1916600185901b17855562000538565b600085815260208120601f198616915b82811015620005dd57888601518255948401946001909101908401620005bc565b5085821015620005fc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200062e57634e487b7160e01b600052601160045260246000fd5b92915050565b61265c80620006446000396000f3fe6080604052600436106101dc5760003560e01c806370a0823111610102578063b391c50811610095578063eff31e9e11610064578063eff31e9e14610530578063f2fde38b14610545578063f47c84c514610565578063f4a0a5281461057b57600080fd5b8063b391c508146104b0578063b88d4fde146104d0578063c87b56dd146104f0578063e985e9c51461051057600080fd5b80638ba4cc3c116100d15780638ba4cc3c1461043d5780638da5cb5b1461045d57806395d89b411461047b578063a22cb4651461049057600080fd5b806370a08231146103d2578063715018a6146103f25780637cb64759146104075780637ff9b5961461042757600080fd5b806323b872dd1161017a57806342842e0e1161014957806342842e0e1461034f578063438b63001461036f578063603f4d521461039c5780636352211e146103b257600080fd5b806323b872dd146102e45780632560e3761461030457806330176e131461031a5780633ccfd60b1461033a57600080fd5b8063084c4088116101b6578063084c408814610277578063095ea7b3146102995780631249c58b146102b957806318160ddd146102c157600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611e86565b61059b565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b506102326105ed565b6040516102149190611ef3565b34801561024b57600080fd5b5061025f61025a366004611f06565b61067f565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b50610297610292366004611f06565b6106a6565b005b3480156102a557600080fd5b506102976102b4366004611f3b565b6106ee565b610297610803565b3480156102cd57600080fd5b506102d66109cc565b604051908152602001610214565b3480156102f057600080fd5b506102976102ff366004611f65565b6109dc565b34801561031057600080fd5b506102d6600b5481565b34801561032657600080fd5b5061029761033536600461202d565b610b38565b34801561034657600080fd5b50610297610b50565b34801561035b57600080fd5b5061029761036a366004611f65565b610bb8565b34801561037b57600080fd5b5061038f61038a366004612076565b610d09565b6040516102149190612091565b3480156103a857600080fd5b506102d6600a5481565b3480156103be57600080fd5b5061025f6103cd366004611f06565b610dd0565b3480156103de57600080fd5b506102d66103ed366004612076565b610e30565b3480156103fe57600080fd5b50610297610eb6565b34801561041357600080fd5b50610297610422366004611f06565b610eca565b34801561043357600080fd5b506102d660095481565b34801561044957600080fd5b50610297610458366004611f3b565b610ed7565b34801561046957600080fd5b506000546001600160a01b031661025f565b34801561048757600080fd5b50610232610fca565b34801561049c57600080fd5b506102976104ab3660046120e3565b610fd9565b3480156104bc57600080fd5b506102976104cb36600461211a565b610fe4565b3480156104dc57600080fd5b506102976104eb36600461218f565b611192565b3480156104fc57600080fd5b5061023261050b366004611f06565b6112f1565b34801561051c57600080fd5b5061020861052b36600461220b565b611358565b34801561053c57600080fd5b506102d6600a81565b34801561055157600080fd5b50610297610560366004612076565b611386565b34801561057157600080fd5b506102d66103e881565b34801561058757600080fd5b50610297610596366004611f06565b6113fc565b60006001600160e01b031982166380ac58cd60e01b14806105cc57506001600160e01b03198216635b5e139f60e01b145b806105e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546105fc9061223e565b80601f01602080910402602001604051908101604052809291908181526020018280546106289061223e565b80156106755780601f1061064a57610100808354040283529160200191610675565b820191906000526020600020905b81548152906001019060200180831161065857829003601f168201915b5050505050905090565b600061068a82611554565b506000908152600560205260409020546001600160a01b031690565b6106ae6115b3565b600481106106e95760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064015b60405180910390fd5b600a55565b60006106f982610dd0565b9050806001600160a01b0316836001600160a01b0316036107665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106e0565b336001600160a01b038216148061078257506107828133611358565b6107f45760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106e0565b6107fe838361160d565b505050565b600a546002146108605760405162461bcd60e51b815260206004820152602260248201527f245f7361745f2453616c65206973206e6f742061637469766524245f7361745f604482015261090960f21b60648201526084016106e0565b336000908152600c60205260409020546002116108e55760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d6178206d696e7420616d6f756e74206973203220746f6b6560448201527f6e7320666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146109045760405162461bcd60e51b81526004016106e090612278565b34600954111561096c5760405162461bcd60e51b815260206004820152602d60248201527f245f7361745f244554482076616c75652073656e74206973206e6f7420636f7260448201526c1c9958dd090917dcd85d17c909609a1b60648201526084016106e0565b60006109766109cc565b90506103e881106109995760405162461bcd60e51b81526004016106e0906122bc565b336000908152600c602052604081208054600192906109b990849061232f565b909155506109c99050338261167b565b50565b60006109d760075490565b905090565b826daaeb6d7670e522a718067333cd4e3b15610b2757336001600160a01b03821603610a1257610a0d848484611693565b610b32565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a859190612342565b8015610b085750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190612342565b610b2757604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611693565b50505050565b610b406115b3565b6008610b4c82826123ad565b5050565b610b586115b3565b4780610b9d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016106e0565b6109c9610bb26000546001600160a01b031690565b476116c4565b826daaeb6d7670e522a718067333cd4e3b15610cfe57336001600160a01b03821603610be957610a0d848484611767565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190612342565b8015610cdf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190612342565b610cfe57604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611767565b60606000610d1683610e30565b905060008167ffffffffffffffff811115610d3357610d33611fa1565b604051908082528060200260200182016040528015610d5c578160200160208202803683370190505b5090506000805b8381108015610d73575060075482105b15610dc657856001600160a01b0316610d8b83610dd0565b6001600160a01b031603610dbb5781838281518110610dac57610dac61246d565b60209081029190910101526001015b600190910190610d63565b5090949350505050565b6000818152600360205260408120546001600160a01b0316806105e75760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b60006001600160a01b038216610e9a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106e0565b506001600160a01b031660009081526004602052604090205490565b610ebe6115b3565b610ec86000611782565b565b610ed26115b3565b600b55565b610edf6115b3565b6000610ee96109cc565b905081600003610f3b5760405162461bcd60e51b815260206004820152601860248201527f6e756d6265724f664e6674732063616e6e6f742062652030000000000000000060448201526064016106e0565b600a610f47838361232f565b1115610fa45760405162461bcd60e51b815260206004820152602660248201527f41697264726f7020776f756c6420657863656564206d617820726573657276656044820152652076616c756560d01b60648201526084016106e0565b60005b82811015610b3257610fc284610fbd838561232f565b6117d2565b600101610fa7565b6060600280546105fc9061223e565b610b4c3383836117ec565b600a546001146110425760405162461bcd60e51b815260206004820152602360248201527f245f7361745f24436c61696d206973206e6f742061637469766524245f73617460448201526217c90960ea1b60648201526084016106e0565b336000908152600d60205260409020546001116110c75760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d617820636c61696d20616d6f756e74206973203120746f6b60448201527f656e20666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146110e65760405162461bcd60e51b81526004016106e090612278565b60006110f06109cc565b90506103e881106111135760405162461bcd60e51b81526004016106e0906122bc565b61111d83836118ba565b6111755760405162461bcd60e51b8152602060048201526024808201527f245f7361745f24496e76616c6964204d65726b6c652050726f6f6624245f73616044820152631d17c90960e21b60648201526084016106e0565b336000818152600d60205260409020600190556107fe908261167b565b836daaeb6d7670e522a718067333cd4e3b156112de57336001600160a01b038216036111c9576111c48585858561193e565b6112ea565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612342565b80156112bf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190612342565b6112de57604051633b79c77360e21b81523360048201526024016106e0565b6112ea8585858561193e565b5050505050565b60606112fc82611554565b6000611306611970565b905060008151116113265760405180602001604052806000815250611351565b806113308461197f565b604051602001611341929190612483565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61138e6115b3565b6001600160a01b0381166113f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e0565b6109c981611782565b6114046115b3565b600955565b6001600160a01b03821661145f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106e0565b6000818152600360205260409020546001600160a01b0316156114c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106e0565b6001600160a01b03821660009081526004602052604081208054600192906114ed90849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b6000818152600360205260409020546001600160a01b03166109c95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b6000546001600160a01b03163314610ec85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e0565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061164282610dd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116858282611409565b610b4c600780546001019055565b61169d3382611a80565b6116b95760405162461bcd60e51b81526004016106e0906124c2565b6107fe838383611ade565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611711576040519150601f19603f3d011682016040523d82523d6000602084013e611716565b606091505b50509050806107fe5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207769746864726177204574686572000000000000000060448201526064016106e0565b6107fe83838360405180602001604052806000815250611192565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b4c828260405180602001604052806000815250611c7a565b816001600160a01b0316836001600160a01b03160361184d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106e0565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040516bffffffffffffffffffffffff193360601b166020820152600090819060340160405160208183030381529060405280519060200120905061193684848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b549150849050611cad565b949350505050565b6119483383611a80565b6119645760405162461bcd60e51b81526004016106e0906124c2565b610b3284848484611cc3565b6060600880546105fc9061223e565b6060816000036119a65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119d057806119ba81612510565b91506119c99050600a8361253f565b91506119aa565b60008167ffffffffffffffff8111156119eb576119eb611fa1565b6040519080825280601f01601f191660200182016040528015611a15576020820181803683370190505b5090505b841561193657611a2a600183612553565b9150611a37600a86612566565b611a4290603061232f565b60f81b818381518110611a5757611a5761246d565b60200101906001600160f81b031916908160001a905350611a79600a8661253f565b9450611a19565b600080611a8c83610dd0565b9050806001600160a01b0316846001600160a01b03161480611ab35750611ab38185611358565b806119365750836001600160a01b0316611acc8461067f565b6001600160a01b031614949350505050565b826001600160a01b0316611af182610dd0565b6001600160a01b031614611b555760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106e0565b6001600160a01b038216611bb75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106e0565b611bc260008261160d565b6001600160a01b0383166000908152600460205260408120805460019290611beb908490612553565b90915550506001600160a01b0382166000908152600460205260408120805460019290611c1990849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611c84838361167b565b611c916000848484611cf6565b6107fe5760405162461bcd60e51b81526004016106e09061257a565b600082611cba8584611df7565b14949350505050565b611cce848484611ade565b611cda84848484611cf6565b610b325760405162461bcd60e51b81526004016106e09061257a565b60006001600160a01b0384163b15611dec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d3a9033908990889088906004016125cc565b6020604051808303816000875af1925050508015611d75575060408051601f3d908101601f19168201909252611d7291810190612609565b60015b611dd2573d808015611da3576040519150601f19603f3d011682016040523d82523d6000602084013e611da8565b606091505b508051600003611dca5760405162461bcd60e51b81526004016106e09061257a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611936565b506001949350505050565b600081815b8451811015611e3c57611e2882868381518110611e1b57611e1b61246d565b6020026020010151611e44565b915080611e3481612510565b915050611dfc565b509392505050565b6000818310611e60576000828152602084905260409020611351565b5060009182526020526040902090565b6001600160e01b0319811681146109c957600080fd5b600060208284031215611e9857600080fd5b813561135181611e70565b60005b83811015611ebe578181015183820152602001611ea6565b50506000910152565b60008151808452611edf816020860160208601611ea3565b601f01601f19169290920160200192915050565b6020815260006113516020830184611ec7565b600060208284031215611f1857600080fd5b5035919050565b80356001600160a01b0381168114611f3657600080fd5b919050565b60008060408385031215611f4e57600080fd5b611f5783611f1f565b946020939093013593505050565b600080600060608486031215611f7a57600080fd5b611f8384611f1f565b9250611f9160208501611f1f565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611fd257611fd2611fa1565b604051601f8501601f19908116603f01168101908282118183101715611ffa57611ffa611fa1565b8160405280935085815286868601111561201357600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561203f57600080fd5b813567ffffffffffffffff81111561205657600080fd5b8201601f8101841361206757600080fd5b61193684823560208401611fb7565b60006020828403121561208857600080fd5b61135182611f1f565b6020808252825182820181905260009190848201906040850190845b818110156120c9578351835292840192918401916001016120ad565b50909695505050505050565b80151581146109c957600080fd5b600080604083850312156120f657600080fd5b6120ff83611f1f565b9150602083013561210f816120d5565b809150509250929050565b6000806020838503121561212d57600080fd5b823567ffffffffffffffff8082111561214557600080fd5b818501915085601f83011261215957600080fd5b81358181111561216857600080fd5b8660208260051b850101111561217d57600080fd5b60209290920196919550909350505050565b600080600080608085870312156121a557600080fd5b6121ae85611f1f565b93506121bc60208601611f1f565b925060408501359150606085013567ffffffffffffffff8111156121df57600080fd5b8501601f810187136121f057600080fd5b6121ff87823560208401611fb7565b91505092959194509250565b6000806040838503121561221e57600080fd5b61222783611f1f565b915061223560208401611f1f565b90509250929050565b600181811c9082168061225257607f821691505b60208210810361227257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f245f7361745f244e6f20436f6e74726163747320616c6c6f77656424245f73616040820152631d17c90960e21b606082015260800190565b6020808252603e908201527f245f7361745f24416c6c20636f6c6c656374696f6e20746f6b656e732068617660408201527f65206265656e20616c7265616479206d696e74656424245f7361745f24240000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e7576105e7612319565b60006020828403121561235457600080fd5b8151611351816120d5565b601f8211156107fe57600081815260208120601f850160051c810160208610156123865750805b601f850160051c820191505b818110156123a557828155600101612392565b505050505050565b815167ffffffffffffffff8111156123c7576123c7611fa1565b6123db816123d5845461223e565b8461235f565b602080601f83116001811461241057600084156123f85750858301515b600019600386901b1c1916600185901b1785556123a5565b600085815260208120601f198616915b8281101561243f57888601518255948401946001909101908401612420565b508582101561245d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60008351612495818460208801611ea3565b8351908301906124a9818360208801611ea3565b64173539b7b760d91b9101908152600501949350505050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60006001820161252257612522612319565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261254e5761254e612529565b500490565b818103818111156105e7576105e7612319565b60008261257557612575612529565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125ff90830184611ec7565b9695505050505050565b60006020828403121561261b57600080fd5b815161135181611e7056fea2646970667358221220e78757eb743a3b4ef7c62f0d167afb0d454073ae365ac390aeb5e96fe3deb29b64736f6c6343000812003368747470733a2f2f6d696e742e6f726465727361746f7368692e636f6d2f617661746172732f6d6574612f

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c806370a0823111610102578063b391c50811610095578063eff31e9e11610064578063eff31e9e14610530578063f2fde38b14610545578063f47c84c514610565578063f4a0a5281461057b57600080fd5b8063b391c508146104b0578063b88d4fde146104d0578063c87b56dd146104f0578063e985e9c51461051057600080fd5b80638ba4cc3c116100d15780638ba4cc3c1461043d5780638da5cb5b1461045d57806395d89b411461047b578063a22cb4651461049057600080fd5b806370a08231146103d2578063715018a6146103f25780637cb64759146104075780637ff9b5961461042757600080fd5b806323b872dd1161017a57806342842e0e1161014957806342842e0e1461034f578063438b63001461036f578063603f4d521461039c5780636352211e146103b257600080fd5b806323b872dd146102e45780632560e3761461030457806330176e131461031a5780633ccfd60b1461033a57600080fd5b8063084c4088116101b6578063084c408814610277578063095ea7b3146102995780631249c58b146102b957806318160ddd146102c157600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611e86565b61059b565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b506102326105ed565b6040516102149190611ef3565b34801561024b57600080fd5b5061025f61025a366004611f06565b61067f565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b50610297610292366004611f06565b6106a6565b005b3480156102a557600080fd5b506102976102b4366004611f3b565b6106ee565b610297610803565b3480156102cd57600080fd5b506102d66109cc565b604051908152602001610214565b3480156102f057600080fd5b506102976102ff366004611f65565b6109dc565b34801561031057600080fd5b506102d6600b5481565b34801561032657600080fd5b5061029761033536600461202d565b610b38565b34801561034657600080fd5b50610297610b50565b34801561035b57600080fd5b5061029761036a366004611f65565b610bb8565b34801561037b57600080fd5b5061038f61038a366004612076565b610d09565b6040516102149190612091565b3480156103a857600080fd5b506102d6600a5481565b3480156103be57600080fd5b5061025f6103cd366004611f06565b610dd0565b3480156103de57600080fd5b506102d66103ed366004612076565b610e30565b3480156103fe57600080fd5b50610297610eb6565b34801561041357600080fd5b50610297610422366004611f06565b610eca565b34801561043357600080fd5b506102d660095481565b34801561044957600080fd5b50610297610458366004611f3b565b610ed7565b34801561046957600080fd5b506000546001600160a01b031661025f565b34801561048757600080fd5b50610232610fca565b34801561049c57600080fd5b506102976104ab3660046120e3565b610fd9565b3480156104bc57600080fd5b506102976104cb36600461211a565b610fe4565b3480156104dc57600080fd5b506102976104eb36600461218f565b611192565b3480156104fc57600080fd5b5061023261050b366004611f06565b6112f1565b34801561051c57600080fd5b5061020861052b36600461220b565b611358565b34801561053c57600080fd5b506102d6600a81565b34801561055157600080fd5b50610297610560366004612076565b611386565b34801561057157600080fd5b506102d66103e881565b34801561058757600080fd5b50610297610596366004611f06565b6113fc565b60006001600160e01b031982166380ac58cd60e01b14806105cc57506001600160e01b03198216635b5e139f60e01b145b806105e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546105fc9061223e565b80601f01602080910402602001604051908101604052809291908181526020018280546106289061223e565b80156106755780601f1061064a57610100808354040283529160200191610675565b820191906000526020600020905b81548152906001019060200180831161065857829003601f168201915b5050505050905090565b600061068a82611554565b506000908152600560205260409020546001600160a01b031690565b6106ae6115b3565b600481106106e95760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064015b60405180910390fd5b600a55565b60006106f982610dd0565b9050806001600160a01b0316836001600160a01b0316036107665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106e0565b336001600160a01b038216148061078257506107828133611358565b6107f45760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106e0565b6107fe838361160d565b505050565b600a546002146108605760405162461bcd60e51b815260206004820152602260248201527f245f7361745f2453616c65206973206e6f742061637469766524245f7361745f604482015261090960f21b60648201526084016106e0565b336000908152600c60205260409020546002116108e55760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d6178206d696e7420616d6f756e74206973203220746f6b6560448201527f6e7320666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146109045760405162461bcd60e51b81526004016106e090612278565b34600954111561096c5760405162461bcd60e51b815260206004820152602d60248201527f245f7361745f244554482076616c75652073656e74206973206e6f7420636f7260448201526c1c9958dd090917dcd85d17c909609a1b60648201526084016106e0565b60006109766109cc565b90506103e881106109995760405162461bcd60e51b81526004016106e0906122bc565b336000908152600c602052604081208054600192906109b990849061232f565b909155506109c99050338261167b565b50565b60006109d760075490565b905090565b826daaeb6d7670e522a718067333cd4e3b15610b2757336001600160a01b03821603610a1257610a0d848484611693565b610b32565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a859190612342565b8015610b085750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190612342565b610b2757604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611693565b50505050565b610b406115b3565b6008610b4c82826123ad565b5050565b610b586115b3565b4780610b9d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016106e0565b6109c9610bb26000546001600160a01b031690565b476116c4565b826daaeb6d7670e522a718067333cd4e3b15610cfe57336001600160a01b03821603610be957610a0d848484611767565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190612342565b8015610cdf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190612342565b610cfe57604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611767565b60606000610d1683610e30565b905060008167ffffffffffffffff811115610d3357610d33611fa1565b604051908082528060200260200182016040528015610d5c578160200160208202803683370190505b5090506000805b8381108015610d73575060075482105b15610dc657856001600160a01b0316610d8b83610dd0565b6001600160a01b031603610dbb5781838281518110610dac57610dac61246d565b60209081029190910101526001015b600190910190610d63565b5090949350505050565b6000818152600360205260408120546001600160a01b0316806105e75760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b60006001600160a01b038216610e9a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106e0565b506001600160a01b031660009081526004602052604090205490565b610ebe6115b3565b610ec86000611782565b565b610ed26115b3565b600b55565b610edf6115b3565b6000610ee96109cc565b905081600003610f3b5760405162461bcd60e51b815260206004820152601860248201527f6e756d6265724f664e6674732063616e6e6f742062652030000000000000000060448201526064016106e0565b600a610f47838361232f565b1115610fa45760405162461bcd60e51b815260206004820152602660248201527f41697264726f7020776f756c6420657863656564206d617820726573657276656044820152652076616c756560d01b60648201526084016106e0565b60005b82811015610b3257610fc284610fbd838561232f565b6117d2565b600101610fa7565b6060600280546105fc9061223e565b610b4c3383836117ec565b600a546001146110425760405162461bcd60e51b815260206004820152602360248201527f245f7361745f24436c61696d206973206e6f742061637469766524245f73617460448201526217c90960ea1b60648201526084016106e0565b336000908152600d60205260409020546001116110c75760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d617820636c61696d20616d6f756e74206973203120746f6b60448201527f656e20666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146110e65760405162461bcd60e51b81526004016106e090612278565b60006110f06109cc565b90506103e881106111135760405162461bcd60e51b81526004016106e0906122bc565b61111d83836118ba565b6111755760405162461bcd60e51b8152602060048201526024808201527f245f7361745f24496e76616c6964204d65726b6c652050726f6f6624245f73616044820152631d17c90960e21b60648201526084016106e0565b336000818152600d60205260409020600190556107fe908261167b565b836daaeb6d7670e522a718067333cd4e3b156112de57336001600160a01b038216036111c9576111c48585858561193e565b6112ea565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612342565b80156112bf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190612342565b6112de57604051633b79c77360e21b81523360048201526024016106e0565b6112ea8585858561193e565b5050505050565b60606112fc82611554565b6000611306611970565b905060008151116113265760405180602001604052806000815250611351565b806113308461197f565b604051602001611341929190612483565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61138e6115b3565b6001600160a01b0381166113f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e0565b6109c981611782565b6114046115b3565b600955565b6001600160a01b03821661145f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106e0565b6000818152600360205260409020546001600160a01b0316156114c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106e0565b6001600160a01b03821660009081526004602052604081208054600192906114ed90849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b6000818152600360205260409020546001600160a01b03166109c95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b6000546001600160a01b03163314610ec85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e0565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061164282610dd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116858282611409565b610b4c600780546001019055565b61169d3382611a80565b6116b95760405162461bcd60e51b81526004016106e0906124c2565b6107fe838383611ade565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611711576040519150601f19603f3d011682016040523d82523d6000602084013e611716565b606091505b50509050806107fe5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207769746864726177204574686572000000000000000060448201526064016106e0565b6107fe83838360405180602001604052806000815250611192565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b4c828260405180602001604052806000815250611c7a565b816001600160a01b0316836001600160a01b03160361184d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106e0565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040516bffffffffffffffffffffffff193360601b166020820152600090819060340160405160208183030381529060405280519060200120905061193684848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b549150849050611cad565b949350505050565b6119483383611a80565b6119645760405162461bcd60e51b81526004016106e0906124c2565b610b3284848484611cc3565b6060600880546105fc9061223e565b6060816000036119a65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119d057806119ba81612510565b91506119c99050600a8361253f565b91506119aa565b60008167ffffffffffffffff8111156119eb576119eb611fa1565b6040519080825280601f01601f191660200182016040528015611a15576020820181803683370190505b5090505b841561193657611a2a600183612553565b9150611a37600a86612566565b611a4290603061232f565b60f81b818381518110611a5757611a5761246d565b60200101906001600160f81b031916908160001a905350611a79600a8661253f565b9450611a19565b600080611a8c83610dd0565b9050806001600160a01b0316846001600160a01b03161480611ab35750611ab38185611358565b806119365750836001600160a01b0316611acc8461067f565b6001600160a01b031614949350505050565b826001600160a01b0316611af182610dd0565b6001600160a01b031614611b555760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106e0565b6001600160a01b038216611bb75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106e0565b611bc260008261160d565b6001600160a01b0383166000908152600460205260408120805460019290611beb908490612553565b90915550506001600160a01b0382166000908152600460205260408120805460019290611c1990849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611c84838361167b565b611c916000848484611cf6565b6107fe5760405162461bcd60e51b81526004016106e09061257a565b600082611cba8584611df7565b14949350505050565b611cce848484611ade565b611cda84848484611cf6565b610b325760405162461bcd60e51b81526004016106e09061257a565b60006001600160a01b0384163b15611dec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d3a9033908990889088906004016125cc565b6020604051808303816000875af1925050508015611d75575060408051601f3d908101601f19168201909252611d7291810190612609565b60015b611dd2573d808015611da3576040519150601f19603f3d011682016040523d82523d6000602084013e611da8565b606091505b508051600003611dca5760405162461bcd60e51b81526004016106e09061257a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611936565b506001949350505050565b600081815b8451811015611e3c57611e2882868381518110611e1b57611e1b61246d565b6020026020010151611e44565b915080611e3481612510565b915050611dfc565b509392505050565b6000818310611e60576000828152602084905260409020611351565b5060009182526020526040902090565b6001600160e01b0319811681146109c957600080fd5b600060208284031215611e9857600080fd5b813561135181611e70565b60005b83811015611ebe578181015183820152602001611ea6565b50506000910152565b60008151808452611edf816020860160208601611ea3565b601f01601f19169290920160200192915050565b6020815260006113516020830184611ec7565b600060208284031215611f1857600080fd5b5035919050565b80356001600160a01b0381168114611f3657600080fd5b919050565b60008060408385031215611f4e57600080fd5b611f5783611f1f565b946020939093013593505050565b600080600060608486031215611f7a57600080fd5b611f8384611f1f565b9250611f9160208501611f1f565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611fd257611fd2611fa1565b604051601f8501601f19908116603f01168101908282118183101715611ffa57611ffa611fa1565b8160405280935085815286868601111561201357600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561203f57600080fd5b813567ffffffffffffffff81111561205657600080fd5b8201601f8101841361206757600080fd5b61193684823560208401611fb7565b60006020828403121561208857600080fd5b61135182611f1f565b6020808252825182820181905260009190848201906040850190845b818110156120c9578351835292840192918401916001016120ad565b50909695505050505050565b80151581146109c957600080fd5b600080604083850312156120f657600080fd5b6120ff83611f1f565b9150602083013561210f816120d5565b809150509250929050565b6000806020838503121561212d57600080fd5b823567ffffffffffffffff8082111561214557600080fd5b818501915085601f83011261215957600080fd5b81358181111561216857600080fd5b8660208260051b850101111561217d57600080fd5b60209290920196919550909350505050565b600080600080608085870312156121a557600080fd5b6121ae85611f1f565b93506121bc60208601611f1f565b925060408501359150606085013567ffffffffffffffff8111156121df57600080fd5b8501601f810187136121f057600080fd5b6121ff87823560208401611fb7565b91505092959194509250565b6000806040838503121561221e57600080fd5b61222783611f1f565b915061223560208401611f1f565b90509250929050565b600181811c9082168061225257607f821691505b60208210810361227257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f245f7361745f244e6f20436f6e74726163747320616c6c6f77656424245f73616040820152631d17c90960e21b606082015260800190565b6020808252603e908201527f245f7361745f24416c6c20636f6c6c656374696f6e20746f6b656e732068617660408201527f65206265656e20616c7265616479206d696e74656424245f7361745f24240000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e7576105e7612319565b60006020828403121561235457600080fd5b8151611351816120d5565b601f8211156107fe57600081815260208120601f850160051c810160208610156123865750805b601f850160051c820191505b818110156123a557828155600101612392565b505050505050565b815167ffffffffffffffff8111156123c7576123c7611fa1565b6123db816123d5845461223e565b8461235f565b602080601f83116001811461241057600084156123f85750858301515b600019600386901b1c1916600185901b1785556123a5565b600085815260208120601f198616915b8281101561243f57888601518255948401946001909101908401612420565b508582101561245d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60008351612495818460208801611ea3565b8351908301906124a9818360208801611ea3565b64173539b7b760d91b9101908152600501949350505050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60006001820161252257612522612319565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261254e5761254e612529565b500490565b818103818111156105e7576105e7612319565b60008261257557612575612529565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125ff90830184611ec7565b9695505050505050565b60006020828403121561261b57600080fd5b815161135181611e7056fea2646970667358221220e78757eb743a3b4ef7c62f0d167afb0d454073ae365ac390aeb5e96fe3deb29b64736f6c63430008120033

Deployed Bytecode Sourcemap

26500:3068:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16990:305;;;;;;;;;;-1:-1:-1;16990:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;16990:305:0;;;;;;;;17748:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18750:169::-;;;;;;;;;;-1:-1:-1;18750:169:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;18750:169:0;1533:203:1;27693:120:0;;;;;;;;;;-1:-1:-1;27693:120:0;;;;;:::i;:::-;;:::i;:::-;;18366:376;;;;;;;;;;-1:-1:-1;18366:376:0;;;;;:::i;:::-;;:::i;27821:628::-;;;:::i;25968:101::-;;;;;;;;;;;;;:::i;:::-;;;2324:25:1;;;2312:2;2297:18;25968:101:0;2178:177:1;25413:163:0;;;;;;;;;;-1:-1:-1;25413:163:0;;;;;:::i;:::-;;:::i;26709:34::-;;;;;;;;;;;;;;;;25141:107;;;;;;;;;;-1:-1:-1;25141:107:0;;;;;:::i;:::-;;:::i;29361:204::-;;;;;;;;;;;;;:::i;25584:171::-;;;;;;;;;;-1:-1:-1;25584:171:0;;;;;:::i;:::-;;:::i;24237:670::-;;;;;;;;;;-1:-1:-1;24237:670:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26681:21::-;;;;;;;;;;;;;;;;17518:222;;;;;;;;;;-1:-1:-1;17518:222:0;;;;;:::i;:::-;;:::i;17303:207::-;;;;;;;;;;-1:-1:-1;17303:207:0;;;;;:::i;:::-;;:::i;14041:103::-;;;;;;;;;;;;;:::i;27576:109::-;;;;;;;;;;-1:-1:-1;27576:109:0;;;;;:::i;:::-;;:::i;26545:39::-;;;;;;;;;;;;;;;;27054:411;;;;;;;;;;-1:-1:-1;27054:411:0;;;;;:::i;:::-;;:::i;13806:87::-;;;;;;;;;;-1:-1:-1;13852:7:0;13879:6;-1:-1:-1;;;;;13879:6:0;13806:87;;17856:104;;;;;;;;;;;;;:::i;18927:155::-;;;;;;;;;;-1:-1:-1;18927:155:0;;;;;:::i;:::-;;:::i;28457:641::-;;;;;;;;;;-1:-1:-1;28457:641:0;;;;;:::i;:::-;;:::i;25763:196::-;;;;;;;;;;-1:-1:-1;25763:196:0;;;;;:::i;:::-;;:::i;17968:288::-;;;;;;;;;;-1:-1:-1;17968:288:0;;;;;:::i;:::-;;:::i;19087:155::-;;;;;;;;;;-1:-1:-1;19087:155:0;;;;;:::i;:::-;;:::i;26637:37::-;;;;;;;;;;;;26672:2;26637:37;;14152:201;;;;;;;;;;-1:-1:-1;14152:201:0;;;;;:::i;:::-;;:::i;26592:41::-;;;;;;;;;;;;26629:4;26592:41;;27473:93;;;;;;;;;;-1:-1:-1;27473:93:0;;;;;:::i;:::-;;:::i;16990:305::-;17092:4;-1:-1:-1;;;;;;17129:40:0;;-1:-1:-1;;;17129:40:0;;:105;;-1:-1:-1;;;;;;;17186:48:0;;-1:-1:-1;;;17186:48:0;17129:105;:158;;;-1:-1:-1;;;;;;;;;;16146:40:0;;;17251:36;17109:178;16990:305;-1:-1:-1;;16990:305:0:o;17748:100::-;17802:13;17835:5;17828:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17748:100;:::o;18750:169::-;18826:7;18846:23;18861:7;18846:14;:23::i;:::-;-1:-1:-1;18887:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;18887:24:0;;18750:169::o;27693:120::-;13765:13;:11;:13::i;:::-;27772:1:::1;27766:3;:7;27758:23;;;::::0;-1:-1:-1;;;27758:23:0;;7700:2:1;27758:23:0::1;::::0;::::1;7682:21:1::0;7739:1;7719:18;;;7712:29;-1:-1:-1;;;7757:18:1;;;7750:33;7800:18;;27758:23:0::1;;;;;;;;;27792:9;:13:::0;27693:120::o;18366:376::-;18447:13;18463:23;18478:7;18463:14;:23::i;:::-;18447:39;;18511:5;-1:-1:-1;;;;;18505:11:0;:2;-1:-1:-1;;;;;18505:11:0;;18497:57;;;;-1:-1:-1;;;18497:57:0;;8031:2:1;18497:57:0;;;8013:21:1;8070:2;8050:18;;;8043:30;8109:34;8089:18;;;8082:62;-1:-1:-1;;;8160:18:1;;;8153:31;8201:19;;18497:57:0;7829:397:1;18497:57:0;13359:10;-1:-1:-1;;;;;18573:21:0;;;;:62;;-1:-1:-1;18598:37:0;18615:5;13359:10;19087:155;:::i;18598:37::-;18565:137;;;;-1:-1:-1;;;18565:137:0;;8433:2:1;18565:137:0;;;8415:21:1;8472:2;8452:18;;;8445:30;8511:34;8491:18;;;8484:62;8582:32;8562:18;;;8555:60;8632:19;;18565:137:0;8231:426:1;18565:137:0;18713:21;18722:2;18726:7;18713:8;:21::i;:::-;18436:306;18366:376;;:::o;27821:628::-;27873:9;;27884:1;27873:12;27865:59;;;;-1:-1:-1;;;27865:59:0;;8864:2:1;27865:59:0;;;8846:21:1;8903:2;8883:18;;;8876:30;8942:34;8922:18;;;8915:62;-1:-1:-1;;;8993:18:1;;;8986:32;9035:19;;27865:59:0;8662:398:1;27865:59:0;27963:10;27943:31;;;;:19;:31;;;;;;27975:1;-1:-1:-1;27935:102:0;;;;-1:-1:-1;;;27935:102:0;;9267:2:1;27935:102:0;;;9249:21:1;9306:2;9286:18;;;9279:30;9345:34;9325:18;;;9318:62;9416:27;9396:18;;;9389:55;9461:19;;27935:102:0;9065:421:1;27935:102:0;28056:10;28070:9;28056:23;28048:72;;;;-1:-1:-1;;;28048:72:0;;;;;;;:::i;:::-;28153:9;28139:10;;:23;;28131:81;;;;-1:-1:-1;;;28131:81:0;;10098:2:1;28131:81:0;;;10080:21:1;10137:2;10117:18;;;10110:30;10176:34;10156:18;;;10149:62;-1:-1:-1;;;10227:18:1;;;10220:43;10280:19;;28131:81:0;9896:409:1;28131:81:0;28223:14;28240:13;:11;:13::i;:::-;28223:30;;26629:4;28272:6;:19;28264:94;;;;-1:-1:-1;;;28264:94:0;;;;;;;:::i;:::-;28389:10;28369:31;;;;:19;:31;;;;;:36;;28404:1;;28369:31;:36;;28404:1;;28369:36;:::i;:::-;;;;-1:-1:-1;28416:25:0;;-1:-1:-1;28422:10:0;28434:6;28416:5;:25::i;:::-;27854:595;27821:628::o;25968:101::-;26012:7;26039:22;:12;3483:14;;3391:114;26039:22;26032:29;;25968:101;:::o;25413:163::-;25514:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25531:37:::1;25550:4;25556:2;25560:7;25531:18;:37::i;:::-;15611:7:::0;;15548:85;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;11215:34:1;15749:10:0;11265:18:1;;;11258:43;14732:42:0;;15693:40;;11150:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;11215:34:1;-1:-1:-1;;;;;11285:15:1;;11265:18;;;11258:43;14732:42:0;;15789:40;;11150:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1679:51:1;1652:18;;15911:30:0;1533:203:1;15647:310:0;25531:37:::1;25550:4;25556:2;25560:7;25531:18;:37::i;:::-;25413:163:::0;;;;:::o;25141:107::-;13765:13;:11;:13::i;:::-;25217::::1;:23;25233:7:::0;25217:13;:23:::1;:::i;:::-;;25141:107:::0;:::o;29361:204::-;13765:13;:11;:13::i;:::-;29429:21:::1;29469:11:::0;29461:44:::1;;;::::0;-1:-1:-1;;;29461:44:0;;13968:2:1;29461:44:0::1;::::0;::::1;13950:21:1::0;14007:2;13987:18;;;13980:30;-1:-1:-1;;;14026:18:1;;;14019:50;14086:18;;29461:44:0::1;13766:344:1::0;29461:44:0::1;29516:41;29526:7;13852::::0;13879:6;-1:-1:-1;;;;;13879:6:0;;13806:87;29526:7:::1;29535:21;29516:9;:41::i;25584:171::-:0;25689:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25706:41:::1;25729:4;25735:2;25739:7;25706:22;:41::i;15548:85::-:0;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;11215:34:1;15749:10:0;11265:18:1;;;11258:43;14732:42:0;;15693:40;;11150:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;11215:34:1;-1:-1:-1;;;;;11285:15:1;;11265:18;;;11258:43;14732:42:0;;15789:40;;11150:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1679:51:1;1652:18;;15911:30:0;1533:203:1;15647:310:0;25706:41:::1;25729:4;25735:2;25739:7;25706:22;:41::i;24237:670::-:0;24299:16;24327:23;24353:17;24363:6;24353:9;:17::i;:::-;24327:43;;24381:30;24428:15;24414:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24414:30:0;-1:-1:-1;24381:63:0;-1:-1:-1;24455:22:0;24506:23;24546:323;24571:15;24553;:33;:76;;;;-1:-1:-1;24607:12:0;3483:14;24590;:39;24553:76;24546:323;;;24677:6;-1:-1:-1;;;;;24650:33:0;:23;24658:14;24650:7;:23::i;:::-;-1:-1:-1;;;;;24650:33:0;;24646:169;;24737:14;24704:13;24718:15;24704:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;24781:17;;24646:169;24840:16;;;;;24546:323;;;-1:-1:-1;24886:13:0;;24237:670;-1:-1:-1;;;;24237:670:0:o;17518:222::-;17590:7;17626:16;;;:7;:16;;;;;;-1:-1:-1;;;;;17626:16:0;;17653:56;;;;-1:-1:-1;;;17653:56:0;;14449:2:1;17653:56:0;;;14431:21:1;14488:2;14468:18;;;14461:30;-1:-1:-1;;;14507:18:1;;;14500:54;14571:18;;17653:56:0;14247:348:1;17303:207:0;17375:7;-1:-1:-1;;;;;17403:19:0;;17395:73;;;;-1:-1:-1;;;17395:73:0;;14802:2:1;17395:73:0;;;14784:21:1;14841:2;14821:18;;;14814:30;14880:34;14860:18;;;14853:62;-1:-1:-1;;;14931:18:1;;;14924:39;14980:19;;17395:73:0;14600:405:1;17395:73:0;-1:-1:-1;;;;;;17486:16:0;;;;;:9;:16;;;;;;;17303:207::o;14041:103::-;13765:13;:11;:13::i;:::-;14106:30:::1;14133:1;14106:18;:30::i;:::-;14041:103::o:0;27576:109::-;13765:13;:11;:13::i;:::-;27647:19:::1;:30:::0;27576:109::o;27054:411::-;13765:13;:11;:13::i;:::-;27139:11:::1;27153:13;:11;:13::i;:::-;27139:27;;27179:14;27197:1;27179:19:::0;27171:56:::1;;;::::0;-1:-1:-1;;;27171:56:0;;15212:2:1;27171:56:0::1;::::0;::::1;15194:21:1::0;15251:2;15231:18;;;15224:30;15290:26;15270:18;;;15263:54;15334:18;;27171:56:0::1;15010:348:1::0;27171:56:0::1;26672:2;27246:23;27255:14:::0;27246:6;:23:::1;:::i;:::-;:38;;27238:89;;;::::0;-1:-1:-1;;;27238:89:0;;15565:2:1;27238:89:0::1;::::0;::::1;15547:21:1::0;15604:2;15584:18;;;15577:30;15643:34;15623:18;;;15616:62;-1:-1:-1;;;15694:18:1;;;15687:36;15740:19;;27238:89:0::1;15363:402:1::0;27238:89:0::1;27343:6;27338:120;27359:14;27355:1;:18;27338:120;;;27391:25;27401:2:::0;27405:10:::1;27414:1:::0;27405:6;:10:::1;:::i;:::-;27391:9;:25::i;:::-;27442:3;;27338:120;;17856:104:::0;17912:13;17945:7;17938:14;;;;;:::i;18927:155::-;19022:52;13359:10;19055:8;19065;19022:18;:52::i;28457:641::-;28532:9;;28543:1;28532:12;28524:60;;;;-1:-1:-1;;;28524:60:0;;15972:2:1;28524:60:0;;;15954:21:1;16011:2;15991:18;;;15984:30;16050:34;16030:18;;;16023:62;-1:-1:-1;;;16101:18:1;;;16094:33;16144:19;;28524:60:0;15770:399:1;28524:60:0;28620:10;28603:28;;;;:16;:28;;;;;;28634:1;-1:-1:-1;28595:101:0;;;;-1:-1:-1;;;28595:101:0;;16376:2:1;28595:101:0;;;16358:21:1;16415:2;16395:18;;;16388:30;16454:34;16434:18;;;16427:62;16525:27;16505:18;;;16498:55;16570:19;;28595:101:0;16174:421:1;28595:101:0;28715:10;28729:9;28715:23;28707:72;;;;-1:-1:-1;;;28707:72:0;;;;;;;:::i;:::-;28790:14;28807:13;:11;:13::i;:::-;28790:30;;26629:4;28839:6;:19;28831:94;;;;-1:-1:-1;;;28831:94:0;;;;;;;:::i;:::-;28944:26;28958:11;;28944:13;:26::i;:::-;28936:75;;;;-1:-1:-1;;;28936:75:0;;16802:2:1;28936:75:0;;;16784:21:1;16841:2;16821:18;;;16814:30;16880:34;16860:18;;;16853:62;-1:-1:-1;;;16931:18:1;;;16924:34;16975:19;;28936:75:0;16600:400:1;28936:75:0;29039:10;29022:28;;;;:16;:28;;;;;29053:1;29022:32;;29065:25;;29083:6;29065:5;:25::i;25763:196::-;25887:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25904:47:::1;25927:4;25933:2;25937:7;25946:4;25904:22;:47::i;:::-;15611:7:::0;;15548:85;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;11215:34:1;15749:10:0;11265:18:1;;;11258:43;14732:42:0;;15693:40;;11150:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;11215:34:1;-1:-1:-1;;;;;11285:15:1;;11265:18;;;11258:43;14732:42:0;;15789:40;;11150:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1679:51:1;1652:18;;15911:30:0;1533:203:1;15647:310:0;25904:47:::1;25927:4;25933:2;25937:7;25946:4;25904:22;:47::i;:::-;25763:196:::0;;;;;:::o;17968:288::-;18041:13;18067:23;18082:7;18067:14;:23::i;:::-;18101:21;18125:10;:8;:10::i;:::-;18101:34;;18177:1;18159:7;18153:21;:25;:95;;;;;;;;;;;;;;;;;18205:7;18214:18;:7;:16;:18::i;:::-;18188:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18153:95;18146:102;17968:288;-1:-1:-1;;;17968:288:0:o;19087:155::-;-1:-1:-1;;;;;19202:25:0;;;19184:4;19202:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;19087:155::o;14152:201::-;13765:13;:11;:13::i;:::-;-1:-1:-1;;;;;14241:22:0;::::1;14233:73;;;::::0;-1:-1:-1;;;14233:73:0;;17875:2:1;14233:73:0::1;::::0;::::1;17857:21:1::0;17914:2;17894:18;;;17887:30;17953:34;17933:18;;;17926:62;-1:-1:-1;;;18004:18:1;;;17997:36;18050:19;;14233:73:0::1;17673:402:1::0;14233:73:0::1;14317:28;14336:8;14317:18;:28::i;27473:93::-:0;13765:13;:11;:13::i;:::-;27540:10:::1;:18:::0;27473:93::o;21011:431::-;-1:-1:-1;;;;;21091:16:0;;21083:61;;;;-1:-1:-1;;;21083:61:0;;18282:2:1;21083:61:0;;;18264:21:1;;;18301:18;;;18294:30;18360:34;18340:18;;;18333:62;18412:18;;21083:61:0;18080:356:1;21083:61:0;20295:4;20319:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20319:16:0;:30;21155:58;;;;-1:-1:-1;;;21155:58:0;;18643:2:1;21155:58:0;;;18625:21:1;18682:2;18662:18;;;18655:30;18721;18701:18;;;18694:58;18769:18;;21155:58:0;18441:352:1;21155:58:0;-1:-1:-1;;;;;21280:13:0;;;;;;:9;:13;;;;;:18;;21297:1;;21280:13;:18;;21297:1;;21280:18;:::i;:::-;;;;-1:-1:-1;;21309:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;21309:21:0;-1:-1:-1;;;;;21309:21:0;;;;;;;;21346:33;;21309:16;;;21346:33;;21309:16;;21346:33;25217:23:::1;25141:107:::0;:::o;3513:127::-;3602:19;;3620:1;3602:19;;;3513:127::o;22848:135::-;20295:4;20319:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20319:16:0;22922:53;;;;-1:-1:-1;;;22922:53:0;;14449:2:1;22922:53:0;;;14431:21:1;14488:2;14468:18;;;14461:30;-1:-1:-1;;;14507:18:1;;;14500:54;14571:18;;22922:53:0;14247:348:1;13901:132:0;13852:7;13879:6;-1:-1:-1;;;;;13879:6:0;13359:10;13965:23;13957:68;;;;-1:-1:-1;;;13957:68:0;;19000:2:1;13957:68:0;;;18982:21:1;;;19019:18;;;19012:30;19078:34;19058:18;;;19051:62;19130:18;;13957:68:0;18798:356:1;22377:174:0;22452:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;22452:29:0;-1:-1:-1;;;;;22452:29:0;;;;;;;;:24;;22506:23;22452:24;22506:14;:23::i;:::-;-1:-1:-1;;;;;22497:46:0;;;;;;;;;;;22377:174;;:::o;25256:148::-;25337:24;25349:2;25353:7;25337:11;:24::i;:::-;25372;:12;3602:19;;3620:1;3602:19;;;3513:127;19250:247;19358:41;13359:10;19391:7;19358:18;:41::i;:::-;19350:100;;;;-1:-1:-1;;;19350:100:0;;;;;;;:::i;:::-;19461:28;19471:4;19477:2;19481:7;19461:9;:28::i;26115:191::-;26190:12;26208:8;-1:-1:-1;;;;;26208:13:0;26230:7;26208:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26189:54;;;26262:7;26254:44;;;;-1:-1:-1;;;26254:44:0;;19986:2:1;26254:44:0;;;19968:21:1;20025:2;20005:18;;;19998:30;20064:26;20044:18;;;20037:54;20108:18;;26254:44:0;19784:348:1;19505:151:0;19609:39;19626:4;19632:2;19636:7;19609:39;;;;;;;;;;;;:16;:39::i;14361:191::-;14435:16;14454:6;;-1:-1:-1;;;;;14471:17:0;;;-1:-1:-1;;;;;;14471:17:0;;;;;;14504:40;;14454:6;;;;;;;14504:40;;14435:16;14504:40;14424:128;14361:191;:::o;20637:110::-;20713:26;20723:2;20727:7;20713:26;;;;;;;;;;;;:9;:26::i;22559:281::-;22680:8;-1:-1:-1;;;;;22671:17:0;:5;-1:-1:-1;;;;;22671:17:0;;22663:55;;;;-1:-1:-1;;;22663:55:0;;20339:2:1;22663:55:0;;;20321:21:1;20378:2;20358:18;;;20351:30;20417:27;20397:18;;;20390:55;20462:18;;22663:55:0;20137:349:1;22663:55:0;-1:-1:-1;;;;;22729:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;22729:46:0;;;;;;;;;;22791:41;;540::1;;;22791::0;;513:18:1;22791:41:0;;;;;;;22559:281;;;:::o;29106:247::-;29233:28;;-1:-1:-1;;29250:10:0;20640:2:1;20636:15;20632:53;29233:28:0;;;20620:66:1;29184:4:0;;;;20702:12:1;;29233:28:0;;;;;;;;;;;;29223:39;;;;;;29201:61;;29280:65;29299:11;;29280:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29312:19:0;;;-1:-1:-1;29333:11:0;;-1:-1:-1;29280:18:0;:65::i;:::-;29273:72;29106:247;-1:-1:-1;;;;29106:247:0:o;19664:280::-;19795:41;13359:10;19828:7;19795:18;:41::i;:::-;19787:100;;;;-1:-1:-1;;;19787:100:0;;;;;;;:::i;:::-;19898:38;19912:4;19918:2;19922:7;19931:4;19898:13;:38::i;25019:114::-;25079:13;25112;25105:20;;;;;:::i;4124:532::-;4180:13;4210:5;4219:1;4210:10;4206:53;;-1:-1:-1;;4237:10:0;;;;;;;;;;;;-1:-1:-1;;;4237:10:0;;;;;4124:532::o;4206:53::-;4284:5;4269:12;4325:78;4332:9;;4325:78;;4358:8;;;;:::i;:::-;;-1:-1:-1;4381:10:0;;-1:-1:-1;4389:2:0;4381:10;;:::i;:::-;;;4325:78;;;4413:19;4445:6;4435:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4435:17:0;;4413:39;;4463:154;4470:10;;4463:154;;4497:11;4507:1;4497:11;;:::i;:::-;;-1:-1:-1;4566:10:0;4574:2;4566:5;:10;:::i;:::-;4553:24;;:2;:24;:::i;:::-;4540:39;;4523:6;4530;4523:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4523:56:0;;;;;;;;-1:-1:-1;4594:11:0;4603:2;4594:11;;:::i;:::-;;;4463:154;;20365:264;20458:4;20475:13;20491:23;20506:7;20491:14;:23::i;:::-;20475:39;;20544:5;-1:-1:-1;;;;;20533:16:0;:7;-1:-1:-1;;;;;20533:16:0;;:52;;;;20553:32;20570:5;20577:7;20553:16;:32::i;:::-;20533:87;;;;20613:7;-1:-1:-1;;;;;20589:31:0;:20;20601:7;20589:11;:20::i;:::-;-1:-1:-1;;;;;20589:31:0;;;20365:264;-1:-1:-1;;;;20365:264:0:o;21840:529::-;21965:4;-1:-1:-1;;;;;21938:31:0;:23;21953:7;21938:14;:23::i;:::-;-1:-1:-1;;;;;21938:31:0;;21930:81;;;;-1:-1:-1;;;21930:81:0;;21574:2:1;21930:81:0;;;21556:21:1;21613:2;21593:18;;;21586:30;21652:34;21632:18;;;21625:62;-1:-1:-1;;;21703:18:1;;;21696:35;21748:19;;21930:81:0;21372:401:1;21930:81:0;-1:-1:-1;;;;;22030:16:0;;22022:65;;;;-1:-1:-1;;;22022:65:0;;21980:2:1;22022:65:0;;;21962:21:1;22019:2;21999:18;;;21992:30;22058:34;22038:18;;;22031:62;-1:-1:-1;;;22109:18:1;;;22102:34;22153:19;;22022:65:0;21778:400:1;22022:65:0;22148:29;22165:1;22169:7;22148:8;:29::i;:::-;-1:-1:-1;;;;;22188:15:0;;;;;;:9;:15;;;;;:20;;22207:1;;22188:15;:20;;22207:1;;22188:20;:::i;:::-;;;;-1:-1:-1;;;;;;;22219:13:0;;;;;;:9;:13;;;;;:18;;22236:1;;22219:13;:18;;22236:1;;22219:18;:::i;:::-;;;;-1:-1:-1;;22248:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;22248:21:0;-1:-1:-1;;;;;22248:21:0;;;;;;;;;22285:27;;22248:16;;22285:27;;;;;;;18436:306;18366:376;;:::o;20755:248::-;20850:18;20856:2;20860:7;20850:5;:18::i;:::-;20887:53;20918:1;20922:2;20926:7;20935:4;20887:22;:53::i;:::-;20879:116;;;;-1:-1:-1;;;20879:116:0;;;;;;;:::i;5656:156::-;5747:4;5800;5771:25;5784:5;5791:4;5771:12;:25::i;:::-;:33;;5656:156;-1:-1:-1;;;;5656:156:0:o;19952:270::-;20065:28;20075:4;20081:2;20085:7;20065:9;:28::i;:::-;20112:47;20135:4;20141:2;20145:7;20154:4;20112:22;:47::i;:::-;20104:110;;;;-1:-1:-1;;;20104:110:0;;;;;;;:::i;22991:754::-;23102:4;-1:-1:-1;;;;;23123:13:0;;174:19;:23;23119:619;;23159:71;;-1:-1:-1;;;23159:71:0;;-1:-1:-1;;;;;23159:36:0;;;;;:71;;13359:10;;23210:4;;23216:7;;23225:4;;23159:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23159:71:0;;;;;;;;-1:-1:-1;;23159:71:0;;;;;;;;;;;;:::i;:::-;;;23155:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23400:6;:13;23417:1;23400:18;23396:272;;23443:60;;-1:-1:-1;;;23443:60:0;;;;;;;:::i;23396:272::-;23618:6;23612:13;23603:6;23599:2;23595:15;23588:38;23155:528;-1:-1:-1;;;;;;23281:51:0;-1:-1:-1;;;23281:51:0;;-1:-1:-1;23274:58:0;;23119:619;-1:-1:-1;23722:4:0;22991:754;;;;;;:::o;6002:296::-;6085:7;6128:4;6085:7;6143:118;6167:5;:12;6163:1;:16;6143:118;;;6216:33;6226:12;6240:5;6246:1;6240:8;;;;;;;;:::i;:::-;;;;;;;6216:9;:33::i;:::-;6201:48;-1:-1:-1;6181:3:0;;;;:::i;:::-;;;;6143:118;;;-1:-1:-1;6278:12:0;6002:296;-1:-1:-1;;;6002:296:0:o;9172:149::-;9235:7;9266:1;9262;:5;:51;;9397:13;9447:15;;;9483:4;9476:15;;;9530:4;9514:21;;9262:51;;;-1:-1:-1;9397:13:0;9447:15;;;9483:4;9476:15;9530:4;9514:21;;;9172:149::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2875:127::-;2936:10;2931:3;2927:20;2924:1;2917:31;2967:4;2964:1;2957:15;2991:4;2988:1;2981:15;3007:632;3072:5;3102:18;3143:2;3135:6;3132:14;3129:40;;;3149:18;;:::i;:::-;3224:2;3218:9;3192:2;3278:15;;-1:-1:-1;;3274:24:1;;;3300:2;3270:33;3266:42;3254:55;;;3324:18;;;3344:22;;;3321:46;3318:72;;;3370:18;;:::i;:::-;3410:10;3406:2;3399:22;3439:6;3430:15;;3469:6;3461;3454:22;3509:3;3500:6;3495:3;3491:16;3488:25;3485:45;;;3526:1;3523;3516:12;3485:45;3576:6;3571:3;3564:4;3556:6;3552:17;3539:44;3631:1;3624:4;3615:6;3607;3603:19;3599:30;3592:41;;;;3007:632;;;;;:::o;3644:451::-;3713:6;3766:2;3754:9;3745:7;3741:23;3737:32;3734:52;;;3782:1;3779;3772:12;3734:52;3822:9;3809:23;3855:18;3847:6;3844:30;3841:50;;;3887:1;3884;3877:12;3841:50;3910:22;;3963:4;3955:13;;3951:27;-1:-1:-1;3941:55:1;;3992:1;3989;3982:12;3941:55;4015:74;4081:7;4076:2;4063:16;4058:2;4054;4050:11;4015:74;:::i;4100:186::-;4159:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:52;;;4228:1;4225;4218:12;4180:52;4251:29;4270:9;4251:29;:::i;4291:632::-;4462:2;4514:21;;;4584:13;;4487:18;;;4606:22;;;4433:4;;4462:2;4685:15;;;;4659:2;4644:18;;;4433:4;4728:169;4742:6;4739:1;4736:13;4728:169;;;4803:13;;4791:26;;4872:15;;;;4837:12;;;;4764:1;4757:9;4728:169;;;-1:-1:-1;4914:3:1;;4291:632;-1:-1:-1;;;;;;4291:632:1:o;5113:118::-;5199:5;5192:13;5185:21;5178:5;5175:32;5165:60;;5221:1;5218;5211:12;5236:315;5301:6;5309;5362:2;5350:9;5341:7;5337:23;5333:32;5330:52;;;5378:1;5375;5368:12;5330:52;5401:29;5420:9;5401:29;:::i;:::-;5391:39;;5480:2;5469:9;5465:18;5452:32;5493:28;5515:5;5493:28;:::i;:::-;5540:5;5530:15;;;5236:315;;;;;:::o;5556:615::-;5642:6;5650;5703:2;5691:9;5682:7;5678:23;5674:32;5671:52;;;5719:1;5716;5709:12;5671:52;5759:9;5746:23;5788:18;5829:2;5821:6;5818:14;5815:34;;;5845:1;5842;5835:12;5815:34;5883:6;5872:9;5868:22;5858:32;;5928:7;5921:4;5917:2;5913:13;5909:27;5899:55;;5950:1;5947;5940:12;5899:55;5990:2;5977:16;6016:2;6008:6;6005:14;6002:34;;;6032:1;6029;6022:12;6002:34;6085:7;6080:2;6070:6;6067:1;6063:14;6059:2;6055:23;6051:32;6048:45;6045:65;;;6106:1;6103;6096:12;6045:65;6137:2;6129:11;;;;;6159:6;;-1:-1:-1;5556:615:1;;-1:-1:-1;;;;5556:615:1:o;6176:667::-;6271:6;6279;6287;6295;6348:3;6336:9;6327:7;6323:23;6319:33;6316:53;;;6365:1;6362;6355:12;6316:53;6388:29;6407:9;6388:29;:::i;:::-;6378:39;;6436:38;6470:2;6459:9;6455:18;6436:38;:::i;:::-;6426:48;;6521:2;6510:9;6506:18;6493:32;6483:42;;6576:2;6565:9;6561:18;6548:32;6603:18;6595:6;6592:30;6589:50;;;6635:1;6632;6625:12;6589:50;6658:22;;6711:4;6703:13;;6699:27;-1:-1:-1;6689:55:1;;6740:1;6737;6730:12;6689:55;6763:74;6829:7;6824:2;6811:16;6806:2;6802;6798:11;6763:74;:::i;:::-;6753:84;;;6176:667;;;;;;;:::o;6848:260::-;6916:6;6924;6977:2;6965:9;6956:7;6952:23;6948:32;6945:52;;;6993:1;6990;6983:12;6945:52;7016:29;7035:9;7016:29;:::i;:::-;7006:39;;7064:38;7098:2;7087:9;7083:18;7064:38;:::i;:::-;7054:48;;6848:260;;;;;:::o;7113:380::-;7192:1;7188:12;;;;7235;;;7256:61;;7310:4;7302:6;7298:17;7288:27;;7256:61;7363:2;7355:6;7352:14;7332:18;7329:38;7326:161;;7409:10;7404:3;7400:20;7397:1;7390:31;7444:4;7441:1;7434:15;7472:4;7469:1;7462:15;7326:161;;7113:380;;;:::o;9491:400::-;9693:2;9675:21;;;9732:2;9712:18;;;9705:30;9771:34;9766:2;9751:18;;9744:62;-1:-1:-1;;;9837:2:1;9822:18;;9815:34;9881:3;9866:19;;9491:400::o;10310:426::-;10512:2;10494:21;;;10551:2;10531:18;;;10524:30;10590:34;10585:2;10570:18;;10563:62;10661:32;10656:2;10641:18;;10634:60;10726:3;10711:19;;10310:426::o;10741:127::-;10802:10;10797:3;10793:20;10790:1;10783:31;10833:4;10830:1;10823:15;10857:4;10854:1;10847:15;10873:125;10938:9;;;10959:10;;;10956:36;;;10972:18;;:::i;11312:245::-;11379:6;11432:2;11420:9;11411:7;11407:23;11403:32;11400:52;;;11448:1;11445;11438:12;11400:52;11480:9;11474:16;11499:28;11521:5;11499:28;:::i;11688:545::-;11790:2;11785:3;11782:11;11779:448;;;11826:1;11851:5;11847:2;11840:17;11896:4;11892:2;11882:19;11966:2;11954:10;11950:19;11947:1;11943:27;11937:4;11933:38;12002:4;11990:10;11987:20;11984:47;;;-1:-1:-1;12025:4:1;11984:47;12080:2;12075:3;12071:12;12068:1;12064:20;12058:4;12054:31;12044:41;;12135:82;12153:2;12146:5;12143:13;12135:82;;;12198:17;;;12179:1;12168:13;12135:82;;;12139:3;;;11688:545;;;:::o;12409:1352::-;12535:3;12529:10;12562:18;12554:6;12551:30;12548:56;;;12584:18;;:::i;:::-;12613:97;12703:6;12663:38;12695:4;12689:11;12663:38;:::i;:::-;12657:4;12613:97;:::i;:::-;12765:4;;12829:2;12818:14;;12846:1;12841:663;;;;13548:1;13565:6;13562:89;;;-1:-1:-1;13617:19:1;;;13611:26;13562:89;-1:-1:-1;;12366:1:1;12362:11;;;12358:24;12354:29;12344:40;12390:1;12386:11;;;12341:57;13664:81;;12811:944;;12841:663;11635:1;11628:14;;;11672:4;11659:18;;-1:-1:-1;;12877:20:1;;;12995:236;13009:7;13006:1;13003:14;12995:236;;;13098:19;;;13092:26;13077:42;;13190:27;;;;13158:1;13146:14;;;;13025:19;;12995:236;;;12999:3;13259:6;13250:7;13247:19;13244:201;;;13320:19;;;13314:26;-1:-1:-1;;13403:1:1;13399:14;;;13415:3;13395:24;13391:37;13387:42;13372:58;13357:74;;13244:201;-1:-1:-1;;;;;13491:1:1;13475:14;;;13471:22;13458:36;;-1:-1:-1;12409:1352:1:o;14115:127::-;14176:10;14171:3;14167:20;14164:1;14157:31;14207:4;14204:1;14197:15;14231:4;14228:1;14221:15;17005:663;17285:3;17323:6;17317:13;17339:66;17398:6;17393:3;17386:4;17378:6;17374:17;17339:66;:::i;:::-;17468:13;;17427:16;;;;17490:70;17468:13;17427:16;17537:4;17525:17;;17490:70;:::i;:::-;-1:-1:-1;;;17582:20:1;;17611:22;;;17660:1;17649:13;;17005:663;-1:-1:-1;;;;17005:663:1:o;19159:410::-;19361:2;19343:21;;;19400:2;19380:18;;;19373:30;19439:34;19434:2;19419:18;;19412:62;-1:-1:-1;;;19505:2:1;19490:18;;19483:44;19559:3;19544:19;;19159:410::o;20725:135::-;20764:3;20785:17;;;20782:43;;20805:18;;:::i;:::-;-1:-1:-1;20852:1:1;20841:13;;20725:135::o;20865:127::-;20926:10;20921:3;20917:20;20914:1;20907:31;20957:4;20954:1;20947:15;20981:4;20978:1;20971:15;20997:120;21037:1;21063;21053:35;;21068:18;;:::i;:::-;-1:-1:-1;21102:9:1;;20997:120::o;21122:128::-;21189:9;;;21210:11;;;21207:37;;;21224:18;;:::i;21255:112::-;21287:1;21313;21303:35;;21318:18;;:::i;:::-;-1:-1:-1;21352:9:1;;21255:112::o;22183:414::-;22385:2;22367:21;;;22424:2;22404:18;;;22397:30;22463:34;22458:2;22443:18;;22436:62;-1:-1:-1;;;22529:2:1;22514:18;;22507:48;22587:3;22572:19;;22183:414::o;22602:489::-;-1:-1:-1;;;;;22871:15:1;;;22853:34;;22923:15;;22918:2;22903:18;;22896:43;22970:2;22955:18;;22948:34;;;23018:3;23013:2;22998:18;;22991:31;;;22796:4;;23039:46;;23065:19;;23057:6;23039:46;:::i;:::-;23031:54;22602:489;-1:-1:-1;;;;;;22602:489:1:o;23096:249::-;23165:6;23218:2;23206:9;23197:7;23193:23;23189:32;23186:52;;;23234:1;23231;23224:12;23186:52;23266:9;23260:16;23285:30;23309:5;23285:30;:::i

Swarm Source

ipfs://e78757eb743a3b4ef7c62f0d167afb0d454073ae365ac390aeb5e96fe3deb29b

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.