ETH Price: $2,002.60 (+7.28%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...155956182022-09-23 11:02:111254 days ago1663930931IN
0x6cC9D8cd...c3147Da24
0 ETH0.000366817.93376979
Mint Many148780562022-05-31 9:53:241369 days ago1653990804IN
0x6cC9D8cd...c3147Da24
0 ETH0.0063632821.25679019
Transfer From148756392022-05-31 0:26:291370 days ago1653956789IN
0x6cC9D8cd...c3147Da24
0 ETH0.0028746130.60900467
Mint Many148625802022-05-28 21:18:131372 days ago1653772693IN
0x6cC9D8cd...c3147Da24
0 ETH0.0024096614.62299627
Mint Many148621452022-05-28 19:36:421372 days ago1653766602IN
0x6cC9D8cd...c3147Da24
0 ETH0.0047898129.06689379
Mint Many148621082022-05-28 19:27:461372 days ago1653766066IN
0x6cC9D8cd...c3147Da24
0 ETH0.0042505125.79413451
Transfer From148620622022-05-28 19:18:511372 days ago1653765531IN
0x6cC9D8cd...c3147Da24
0 ETH0.0024254725.82650356
Mint Many148620552022-05-28 19:16:541372 days ago1653765414IN
0x6cC9D8cd...c3147Da24
0 ETH0.0053275232.3299775
Mint Many148620542022-05-28 19:16:071372 days ago1653765367IN
0x6cC9D8cd...c3147Da24
0 ETH0.0058803732.3299775
Mint Many148620072022-05-28 19:05:201372 days ago1653764720IN
0x6cC9D8cd...c3147Da24
0 ETH0.0088772931.44599876
Mint Many148620012022-05-28 19:02:491372 days ago1653764569IN
0x6cC9D8cd...c3147Da24
0 ETH0.0062787334.52965697
Mint Many148619962022-05-28 19:02:101372 days ago1653764530IN
0x6cC9D8cd...c3147Da24
0 ETH0.0083975828.04774962
Mint Many148619862022-05-28 18:59:321372 days ago1653764372IN
0x6cC9D8cd...c3147Da24
0 ETH0.0078713326.29008902
Mint Many148619562022-05-28 18:51:541372 days ago1653763914IN
0x6cC9D8cd...c3147Da24
0 ETH0.0083611127.92596032
Mint Many148617312022-05-28 17:56:061372 days ago1653760566IN
0x6cC9D8cd...c3147Da24
0 ETH0.0060872220.33460212
Mint Many148617002022-05-28 17:49:371372 days ago1653760177IN
0x6cC9D8cd...c3147Da24
0 ETH0.0053332829.32213084
Mint Many148048012022-05-19 11:50:091381 days ago1652961009IN
0x6cC9D8cd...c3147Da24
0 ETH0.0044173324.28629694
Mint Many148007192022-05-18 19:47:161382 days ago1652903236IN
0x6cC9D8cd...c3147Da24
0 ETH0.0114358638.1955562
Mint Many147879392022-05-16 18:46:381384 days ago1652726798IN
0x6cC9D8cd...c3147Da24
0 ETH0.0115611340.95291887
Mint Many147878662022-05-16 18:30:271384 days ago1652725827IN
0x6cC9D8cd...c3147Da24
0 ETH0.0182647361.01402923
Mint Many147785002022-05-15 6:58:351386 days ago1652597915IN
0x6cC9D8cd...c3147Da24
0 ETH0.0052545617.55012576
Mint Many147528382022-05-11 4:55:571390 days ago1652244957IN
0x6cC9D8cd...c3147Da24
0 ETH0.011981640.01830662
Mint Many147237712022-05-06 13:22:371394 days ago1651843357IN
0x6cC9D8cd...c3147Da24
0 ETH0.0278310992.95528325
Set Mint Enabled147176432022-05-05 14:03:081395 days ago1651759388IN
0x6cC9D8cd...c3147Da24
0 ETH0.0038961284.83296638
Set Token Price147047962022-05-03 13:03:081397 days ago1651582988IN
0x6cC9D8cd...c3147Da24
0 ETH0.0015021162.87909561
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UntitledToken

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-02-20
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
pragma solidity >=0.6.0;

library Base64 {
    string internal constant TABLE_ENCODE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    bytes internal constant TABLE_DECODE =
        hex"0000000000000000000000000000000000000000000000000000000000000000"
        hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000"
        hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000"
        hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";
        string memory table = TABLE_ENCODE;
        uint256 encodedLen = 4 * ((data.length + 2) / 3);
        string memory result = new string(encodedLen + 32);
        assembly {
            mstore(result, encodedLen)
            let tablePtr := add(table, 1)
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))
            let resultPtr := add(result, 32)
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)
                mstore8(
                    resultPtr,
                    mload(add(tablePtr, and(shr(18, input), 0x3F)))
                )
                resultPtr := add(resultPtr, 1)
                mstore8(
                    resultPtr,
                    mload(add(tablePtr, and(shr(12, input), 0x3F)))
                )
                resultPtr := add(resultPtr, 1)
                mstore8(
                    resultPtr,
                    mload(add(tablePtr, and(shr(6, input), 0x3F)))
                )
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1)
            }
            switch mod(mload(data), 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
        }

        return result;
    }
}

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount);
        (bool success, ) = recipient.call{value: amount}("");
        require(success);
    }
}

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

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

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

    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);
        return string(buffer);
    }
}

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

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

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

    uint256 internal counter;
    string private _name;
    string private _symbol;

    string[] public _names;
    uint32[] public _nameChanges;

    string internal __baseURI = "https://metadata.untitledtoken.io/";

    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    mapping(uint256 => address[]) internal _owners;
    mapping(uint256 => uint32) internal _ownerCount;

    mapping(uint256 => uint256) private _mintBlockNumbers;

    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));
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(_ownerCount[tokenId] != 0);
        address owner = _owners[tokenId][_ownerCount[tokenId] - 1];
        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)
    {
        require(_exists(tokenId));

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner);
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()));
        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(_exists(tokenId));

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender());

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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));
        _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));
        _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));
    }

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

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(_exists(tokenId));
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, 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));
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0));
        require(!_exists(tokenId));

        _beforeTokenTransfer(address(0), to, tokenId);

        _names.push(
            string(
                abi.encodePacked("Untitled Token #", Strings.toString(tokenId))
            )
        );
        _nameChanges.push(0);

        _balances[to] += 1;
        _ownerCount[tokenId] += 1;
        _owners[tokenId].push(to);
        _mintBlockNumbers[tokenId] = block.number;
        counter++;
        emit Transfer(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);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from);
        require(to != address(0));
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _ownerCount[tokenId] += 1;
        _owners[tokenId].push(to);
        emit Transfer(from, to, tokenId);
    }

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

    function getBlockNumber(uint256 tokenId) public view returns (uint256) {
        return _mintBlockNumbers[tokenId];
    }

    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();
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function ownerCount(uint256 tokenId) public view returns (uint32) {
        return _ownerCount[tokenId];
    }

    function ownerAtIndex(uint256 tokenId, uint32 index)
        public
        view
        returns (address)
    {
        return _owners[tokenId][index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    constructor() payable {}

    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    function release(address payable account) public virtual {
        require(_shares[account] > 0);

        uint256 totalReceived = address(this).balance + _totalReleased;
        uint256 payment = (totalReceived * _shares[account]) /
            _totalShares -
            _released[account];

        require(payment != 0);

        _released[account] = _released[account] + payment;
        _totalReleased = _totalReleased + payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    function _addPayee(address account, uint256 shares_) internal {
        require(account != address(0));
        require(shares_ > 0);
        require(_shares[account] == 0);

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

library Counters {
    struct Counter {
        uint256 _value; // default: 0
    }

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

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

    function decrement(Counter storage counter) public {
        uint256 value = counter._value;
        require(value > 0);
        unchecked {
            counter._value = value - 1;
        }
    }

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _setOwner(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender());
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0));
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract UntitledToken is ERC721, Ownable, PaymentSplitter {
    using Strings for uint256;
    uint256 TOKEN_PRICE = 0.06 * 1e18;
    uint256 constant TOKEN_COUNT = 8888;
    uint256 constant MAX_PRESALE_COUNT = 2;
    bool public mintEnabled = false;
    bool public premintEnabled = false;

    address constant DEV_ADDRESS = 0x73124518c6a1e9f63D5867a0C06161963501D2Bf;
    address constant PRIMARY_ADDRESS =
        0xc64Beb85e2A546Bffb8A2eE61C4ae0f06C8E1409;

    constructor() ERC721("Untitled Token", "UT") PaymentSplitter() {
        _addPayee(PRIMARY_ADDRESS, 80);
        _addPayee(DEV_ADDRESS, 20);
    }

    function mintMany(uint256 amount)
        public
        payable
        costs(TOKEN_PRICE * amount)
        onMint
    {
        require(totalSupply() + amount <= TOKEN_COUNT);
        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function mint() public payable costs(TOKEN_PRICE) onMint {
        require(totalSupply() < TOKEN_COUNT);
        _safeMint(msg.sender, totalSupply());
    }

    function mintOwner() public onlyOwner {
        require(totalSupply() < TOKEN_COUNT);
        _safeMint(msg.sender, totalSupply());
    }

    function mintOwnerMany(uint256 amount) public onlyOwner {
        require(totalSupply() + amount <= TOKEN_COUNT);
        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function setMintEnabled(bool enabled) public onlyOwner {
        mintEnabled = enabled;
    }

    function setPremintEnabled(bool enabled) public onlyOwner {
        premintEnabled = enabled;
    }

    function setTokenPrice(uint256 tokenPrice) public onlyOwner {
        TOKEN_PRICE = tokenPrice;
    }

    modifier owns(uint256 id) {
        require(ownerOf(id) == msg.sender);
        _;
    }
    modifier costs(uint256 price) {
        require(msg.value == price);
        _;
    }
    modifier onMint() {
        require(mintEnabled);
        _;
    }
    modifier onPremint() {
        require(premintEnabled);
        _;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function setBaseURI(string memory uri) public onlyOwner {
        __baseURI = uri;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId));
        string memory base = _baseURI();
        return
            string(
                abi.encodePacked(
                    base,
                    Strings.toString(tokenId),
                    ".json?nameChanges=",
                    Strings.toString(_nameChanges[tokenId]),
                    "&nameB64=",
                    Base64.encode(bytes(_names[tokenId]))
                )
            );
    }

    function changeName(uint256 tokenId, string memory name)
        public
        payable
        owns(tokenId)
        costs(nameChangePrice())
    {
        _nameChanges[tokenId] += 1;
        _names[tokenId] = name;
    }

    function nameChangePrice() public pure returns (uint256) {
        return 0.01 * 1e18;
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function totalSupply() public view returns (uint256) {
        return counter;
    }

    function tokenByIndex(uint256 index) public view virtual returns (uint256) {
        require(index < totalSupply());
        return index;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        returns (uint256 tokenId)
    {
        require(index < balanceOf(owner));

        uint256 count;
        for (uint256 i; i < totalSupply(); i++) {
            if (owner == _owners[i][_ownerCount[i] - 1]) {
                if (count == index) return i;
                else count++;
            }
        }

        revert();
    }

    function presaleMintMany(uint256 amount, bytes memory signature)
        public
        payable
        costs(TOKEN_PRICE * amount)
        onPremint
    {
        require(totalSupply() + amount <= TOKEN_COUNT);
        require(balanceOf(msg.sender) + amount <= MAX_PRESALE_COUNT);
        require(verify(abi.encodePacked(msg.sender), signature));
        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function presaleMint(bytes memory signature)
        public
        payable
        costs(TOKEN_PRICE)
        onPremint
    {
        require(totalSupply() < TOKEN_COUNT);
        require(balanceOf(msg.sender) < MAX_PRESALE_COUNT);
        require(verify(abi.encodePacked(msg.sender), signature));
        _safeMint(msg.sender, totalSupply());
    }

    address constant VERIFY_ADDRESS =
        0xb997ADc54278348FDD86A5543c0250774F55c729;

    function verify(bytes memory h, bytes memory signature)
        internal
        pure
        returns (bool)
    {
        return recover(signature, getSignedMessageHash(h)) == VERIFY_ADDRESS;
    }

    function recover(bytes memory signature, bytes32 h)
        internal
        pure
        returns (address)
    {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(signature);

        return ecrecover(h, v, r, s);
    }

    function getSignedMessageHash(bytes memory message)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked(
                    "\x19Ethereum Signed Message:\n",
                    uint2str(message.length),
                    message
                )
            );
    }

    function splitSignature(bytes memory sig)
        internal
        pure
        returns (
            bytes32 r,
            bytes32 s,
            uint8 v
        )
    {
        require(sig.length == 65);

        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }
    }

    function uint2str(uint256 _i)
        internal
        pure
        returns (string memory _uintAsString)
    {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint256 k = len;
        while (_i != 0) {
            k = k - 1;
            uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_nameChanges","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_names","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"name","type":"string"}],"name":"changeName","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintOwnerMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nameChangePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint32","name":"index","type":"uint32"}],"name":"ownerAtIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"presaleMintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPremintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","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":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

60e0604052602260808181529062002ae060a0398051620000299160059160209091019062000268565b5066d529ae9e8600006012556013805461ffff191690553480156200004d57600080fd5b50604080518082018252600e81526d2ab73a34ba3632b2102a37b5b2b760911b602080830191825283518085019094526002845261155560f21b9084015281519192916200009e9160019162000268565b508051620000b490600290602084019062000268565b505050620000d1620000cb6200011960201b60201c565b6200011d565b620000f273c64beb85e2a546bffb8a2ee61c4ae0f06c8e140960506200016f565b620001137373124518c6a1e9f63d5867a0c06161963501d2bf60146200016f565b62000372565b3390565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200018357600080fd5b600081116200019157600080fd5b6001600160a01b0382166000908152600f602052604090205415620001b557600080fd5b60118054600181019091557f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0384169081179091556000908152600f60205260409020819055600d546200021f9082906200030e565b600d55604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b828054620002769062000335565b90600052602060002090601f0160209004810192826200029a5760008555620002e5565b82601f10620002b557805160ff1916838001178555620002e5565b82800160010185558215620002e5579182015b82811115620002e5578251825591602001919060010190620002c8565b50620002f3929150620002f7565b5090565b5b80821115620002f35760008155600101620002f8565b600082198211156200033057634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200034a57607f821691505b602082108114156200036c57634e487b7160e01b600052602260045260246000fd5b50919050565b61275e80620003826000396000f3fe60806040526004361061026b5760003560e01c8063715018a611610144578063c87b56dd116100b6578063d34aef4e1161007a578063d34aef4e14610783578063e33b7de3146107a3578063e985e9c5146107b8578063ef6c875414610801578063f2fde38b14610821578063f46a04eb1461084157600080fd5b8063c87b56dd146106de578063ce7c2ac2146106fe578063cecb06d014610734578063cf42dd4f14610749578063d12397301461076957600080fd5b8063937dd90d11610108578063937dd90d1461062057806395d89b41146106405780639852595c14610655578063a22cb4651461068b578063b88d4fde146106ab578063c39cbef1146106cb57600080fd5b8063715018a61461057257806389708f42146105875780638b83209b146105cf5780638da5cb5b146105ef5780639333b1e31461060d57600080fd5b80632f745c59116101dd57806350c0fbe4116101a157806350c0fbe4146104a657806355f804b3146104d35780635cb4712c146104f35780636352211e146105125780636a61e5fc1461053257806370a082311461055257600080fd5b80632f745c59146104175780633a98ef391461043757806342842e0e1461044c57806345ca77381461046c5780634f6ccce71461048657600080fd5b80631249c58b1161022f5780631249c58b1461037d57806318160ddd1461038557806319165587146103a457806323b872dd146103c457806325c5aa06146103e45780632b2e6f2d1461040457600080fd5b806301ffc9a7146102b9578063059513a6146102ee57806306fdde0314610303578063081812fc14610325578063095ea7b31461035d57600080fd5b366102b4577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156102c557600080fd5b506102d96102d4366004612051565b610861565b60405190151581526020015b60405180910390f35b6103016102fc366004612075565b61088c565b005b34801561030f57600080fd5b5061031861090b565b6040516102e591906120e6565b34801561033157600080fd5b50610345610340366004612075565b61099d565b6040516001600160a01b0390911681526020016102e5565b34801561036957600080fd5b5061030161037836600461210e565b6109d7565b610301610a32565b34801561039157600080fd5b506000545b6040519081526020016102e5565b3480156103b057600080fd5b506103016103bf36600461213a565b610a76565b3480156103d057600080fd5b506103016103df366004612157565b610b9e565b3480156103f057600080fd5b506103186103ff366004612075565b610bbc565b61030161041236600461223b565b610c68565b34801561042357600080fd5b5061039661043236600461210e565b610d4a565b34801561044357600080fd5b50600d54610396565b34801561045857600080fd5b50610301610467366004612157565b610e06565b34801561047857600080fd5b50662386f26fc10000610396565b34801561049257600080fd5b506103966104a1366004612075565b610e21565b3480156104b257600080fd5b506103966104c1366004612075565b6000908152600b602052604090205490565b3480156104df57600080fd5b506103016104ee366004612282565b610e34565b3480156104ff57600080fd5b506013546102d990610100900460ff1681565b34801561051e57600080fd5b5061034561052d366004612075565b610e62565b34801561053e57600080fd5b5061030161054d366004612075565b610edd565b34801561055e57600080fd5b5061039661056d36600461213a565b610ef9565b34801561057e57600080fd5b50610301610f2a565b34801561059357600080fd5b506105ba6105a2366004612075565b6000908152600a602052604090205463ffffffff1690565b60405163ffffffff90911681526020016102e5565b3480156105db57600080fd5b506103456105ea366004612075565b610f4d565b3480156105fb57600080fd5b50600c546001600160a01b0316610345565b61030161061b366004612282565b610f7d565b34801561062c57600080fd5b5061030161063b366004612075565b611008565b34801561064c57600080fd5b5061031861106b565b34801561066157600080fd5b5061039661067036600461213a565b6001600160a01b031660009081526010602052604090205490565b34801561069757600080fd5b506103016106a63660046122cc565b61107a565b3480156106b757600080fd5b506103016106c6366004612301565b6110fc565b6103016106d936600461223b565b61111b565b3480156106ea57600080fd5b506103186106f9366004612075565b6111eb565b34801561070a57600080fd5b5061039661071936600461213a565b6001600160a01b03166000908152600f602052604090205490565b34801561074057600080fd5b50610301611339565b34801561075557600080fd5b5061030161076436600461236d565b611373565b34801561077557600080fd5b506013546102d99060ff1681565b34801561078f57600080fd5b506105ba61079e366004612075565b6113a4565b3480156107af57600080fd5b50600e54610396565b3480156107c457600080fd5b506102d96107d3366004612388565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561080d57600080fd5b5061034561081c3660046123c1565b6113de565b34801561082d57600080fd5b5061030161083c36600461213a565b611404565b34801561084d57600080fd5b5061030161085c36600461236d565b611437565b60006001600160e01b0319821663780e9d6360e01b1480610886575061088682611461565b92915050565b8060125461089a9190612405565b8034146108a657600080fd5b60135460ff166108b557600080fd5b6122b8826108c260005490565b6108cc9190612424565b11156108d757600080fd5b60005b82811015610906576108f4336108ef60005490565b6114b1565b806108fe8161243c565b9150506108da565b505050565b60606001805461091a90612457565b80601f016020809104026020016040519081016040528092919081815260200182805461094690612457565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b6000818152600a602052604081205463ffffffff166109bb57600080fd5b506000908152600760205260409020546001600160a01b031690565b60006109e282610e62565b9050806001600160a01b0316836001600160a01b03161415610a0357600080fd5b336001600160a01b0382161480610a1f5750610a1f81336107d3565b610a2857600080fd5b61090683836114cb565b601254803414610a4157600080fd5b60135460ff16610a5057600080fd5b6122b8610a5c60005490565b10610a6657600080fd5b610a73336108ef60005490565b50565b6001600160a01b0381166000908152600f6020526040902054610a9857600080fd5b6000600e5447610aa89190612424565b6001600160a01b038316600090815260106020908152604080832054600d54600f909352908320549394509192610adf9085612405565b610ae991906124a8565b610af391906124bc565b905080610aff57600080fd5b6001600160a01b038316600090815260106020526040902054610b23908290612424565b6001600160a01b038416600090815260106020526040902055600e54610b4a908290612424565b600e55610b578382611539565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b610ba833826115a6565b610bb157600080fd5b610906838383611642565b60038181548110610bcc57600080fd5b906000526020600020016000915090508054610be790612457565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390612457565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b505050505081565b81601254610c769190612405565b803414610c8257600080fd5b601354610100900460ff16610c9657600080fd5b6122b883610ca360005490565b610cad9190612424565b1115610cb857600080fd5b600283610cc433610ef9565b610cce9190612424565b1115610cd957600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610d11906034015b60405160208183030381529060405283611797565b610d1a57600080fd5b60005b83811015610d4457610d32336108ef60005490565b80610d3c8161243c565b915050610d1d565b50505050565b6000610d5583610ef9565b8210610d6057600080fd5b6000805b600054811015610e00576000818152600960209081526040808320600a90925290912054610d9a9060019063ffffffff166124d3565b63ffffffff1681548110610db057610db06124f8565b6000918252602090912001546001600160a01b0386811691161415610dee5783821415610de05791506108869050565b81610dea8161243c565b9250505b80610df88161243c565b915050610d64565b50600080fd5b610906838383604051806020016040528060008152506110fc565b600080548210610e3057600080fd5b5090565b600c546001600160a01b03163314610e4b57600080fd5b8051610e5e906005906020840190611fab565b5050565b6000818152600a602052604081205463ffffffff16610e8057600080fd5b6000828152600960209081526040808320600a909252822054610eab9060019063ffffffff166124d3565b63ffffffff1681548110610ec157610ec16124f8565b6000918252602090912001546001600160a01b03169392505050565b600c546001600160a01b03163314610ef457600080fd5b601255565b60006001600160a01b038216610f0e57600080fd5b506001600160a01b031660009081526006602052604090205490565b600c546001600160a01b03163314610f4157600080fd5b610f4b60006117d1565b565b600060118281548110610f6257610f626124f8565b6000918252602090912001546001600160a01b031692915050565b601254803414610f8c57600080fd5b601354610100900460ff16610fa057600080fd5b6122b8610fac60005490565b10610fb657600080fd5b6002610fc133610ef9565b10610fcb57600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610ff290603401610cfc565b610ffb57600080fd5b610e5e336108ef60005490565b600c546001600160a01b0316331461101f57600080fd5b6122b88161102c60005490565b6110369190612424565b111561104157600080fd5b60005b81811015610e5e57611059336108ef60005490565b806110638161243c565b915050611044565b60606002805461091a90612457565b6001600160a01b03821633141561109057600080fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61110633836115a6565b61110f57600080fd5b610d4484848484611823565b813361112682610e62565b6001600160a01b03161461113957600080fd5b662386f26fc1000080341461114d57600080fd5b600160048581548110611162576111626124f8565b90600052602060002090600891828204019190066004028282829054906101000a900463ffffffff16611195919061250e565b92506101000a81548163ffffffff021916908363ffffffff16021790555082600385815481106111c7576111c76124f8565b9060005260206000200190805190602001906111e4929190611fab565b5050505050565b6000818152600a602052604090205460609063ffffffff1661120c57600080fd5b6000611216611843565b90508061122284611852565b61126160048681548110611238576112386124f8565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16611852565b61130f60038781548110611277576112776124f8565b90600052602060002001805461128c90612457565b80601f01602080910402602001604051908101604052809291908181526020018280546112b890612457565b80156113055780601f106112da57610100808354040283529160200191611305565b820191906000526020600020905b8154815290600101906020018083116112e857829003601f168201915b5050505050611950565b6040516020016113229493929190612536565b604051602081830303815290604052915050919050565b600c546001600160a01b0316331461135057600080fd5b6122b861135c60005490565b1061136657600080fd5b610f4b336108ef60005490565b600c546001600160a01b0316331461138a57600080fd5b601380549115156101000261ff0019909216919091179055565b600481815481106113b457600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b6000828152600960205260408120805463ffffffff8416908110610ec157610ec16124f8565b600c546001600160a01b0316331461141b57600080fd5b6001600160a01b03811661142e57600080fd5b610a73816117d1565b600c546001600160a01b0316331461144e57600080fd5b6013805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b148061149257506001600160e01b03198216635b5e139f60e01b145b8061088657506301ffc9a760e01b6001600160e01b0319831614610886565b610e5e828260405180602001604052806000815250611ab6565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150082610e62565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8047101561154657600080fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b505090508061090657600080fd5b6000818152600a602052604081205463ffffffff166115c457600080fd5b60006115cf83610e62565b9050806001600160a01b0316846001600160a01b0316148061160a5750836001600160a01b03166115ff8461099d565b6001600160a01b0316145b8061163a57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661165582610e62565b6001600160a01b03161461166857600080fd5b6001600160a01b03821661167b57600080fd5b6116866000826114cb565b6001600160a01b03831660009081526006602052604081208054600192906116af9084906124bc565b90915550506001600160a01b03821660009081526006602052604081208054600192906116dd908490612424565b90915550506000818152600a6020526040812080546001929061170790849063ffffffff1661250e565b825463ffffffff9182166101009390930a9283029190920219909116179055506000818152600960209081526040808320805460018101825590845291832090910180546001600160a01b038087166001600160a01b0319909216821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600073b997adc54278348fdd86a5543c0250774f55c7296117c0836117bb86611ad6565b611b11565b6001600160a01b0316149392505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61182e848484611642565b61183a84848484611b90565b610d4457600080fd5b60606005805461091a90612457565b6060816118765750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118a0578061188a8161243c565b91506118999050600a836124a8565b915061187a565b60008167ffffffffffffffff8111156118bb576118bb612198565b6040519080825280601f01601f1916602001820160405280156118e5576020820181803683370190505b5090505b841561163a576118fa6001836124bc565b9150611907600a866125c2565b611912906030612424565b60f81b818381518110611927576119276124f8565b60200101906001600160f81b031916908160001a905350611949600a866124a8565b94506118e9565b606081516000141561197057505060408051602081019091526000815290565b60006040518060600160405280604081526020016126e9604091399050600060038451600261199f9190612424565b6119a991906124a8565b6119b4906004612405565b905060006119c3826020612424565b67ffffffffffffffff8111156119db576119db612198565b6040519080825280601f01601f191660200182016040528015611a05576020820181803683370190505b509050818152600183018586518101602084015b81831015611a71576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101611a19565b600389510660018114611a8b5760028114611a9c57611aa8565b613d3d60f01b600119830152611aa8565b603d60f81b6000198301525b509398975050505050505050565b611ac08383611c7b565b611acd6000848484611b90565b61090657600080fd5b6000611ae28251611e51565b82604051602001611af49291906125d6565b604051602081830303815290604052805190602001209050919050565b600080600080611b2086611f7a565b6040805160008152602081018083528a905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611b7b573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0384163b15611c7057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bd4903390899088908890600401612631565b6020604051808303816000875af1925050508015611c0f575060408051601f3d908101601f19168201909252611c0c9181019061266e565b60015b611c56573d808015611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b606091505b508051611c4e57600080fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061163a565b506001949350505050565b6001600160a01b038216611c8e57600080fd5b6000818152600a602052604090205463ffffffff1615611cad57600080fd5b6003611cb882611852565b604051602001611cc8919061268b565b60408051601f19818403018152919052815460018101835560009283526020928390208251611cfd9491909201920190611fab565b5060048054600180820183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6008830401805460079093169093026101000a63ffffffff02199091169091556001600160a01b03831660009081526006602052604081208054909190611d72908490612424565b90915550506000818152600a60205260408120805460019290611d9c90849063ffffffff1661250e565b82546101009290920a63ffffffff81810219909316919092169190910217905550600081815260096020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038716179055838352600b909152812043905580549080611e108361243c565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606081611e755750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e9f5780611e898161243c565b9150611e989050600a836124a8565b9150611e79565b60008167ffffffffffffffff811115611eba57611eba612198565b6040519080825280601f01601f191660200182016040528015611ee4576020820181803683370190505b509050815b8515611f7157611efa6001826124bc565b90506000611f09600a886124a8565b611f1490600a612405565b611f1e90886124bc565b611f299060306126c3565b905060008160f81b905080848481518110611f4657611f466124f8565b60200101906001600160f81b031916908160001a905350611f68600a896124a8565b97505050611ee9565b50949350505050565b60008060008351604114611f8d57600080fd5b50505060208101516040820151606090920151909260009190911a90565b828054611fb790612457565b90600052602060002090601f016020900481019282611fd9576000855561201f565b82601f10611ff257805160ff191683800117855561201f565b8280016001018555821561201f579182015b8281111561201f578251825591602001919060010190612004565b50610e309291505b80821115610e305760008155600101612027565b6001600160e01b031981168114610a7357600080fd5b60006020828403121561206357600080fd5b813561206e8161203b565b9392505050565b60006020828403121561208757600080fd5b5035919050565b60005b838110156120a9578181015183820152602001612091565b83811115610d445750506000910152565b600081518084526120d281602086016020860161208e565b601f01601f19169290920160200192915050565b60208152600061206e60208301846120ba565b6001600160a01b0381168114610a7357600080fd5b6000806040838503121561212157600080fd5b823561212c816120f9565b946020939093013593505050565b60006020828403121561214c57600080fd5b813561206e816120f9565b60008060006060848603121561216c57600080fd5b8335612177816120f9565b92506020840135612187816120f9565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126121bf57600080fd5b813567ffffffffffffffff808211156121da576121da612198565b604051601f8301601f19908116603f0116810190828211818310171561220257612202612198565b8160405283815286602085880101111561221b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561224e57600080fd5b82359150602083013567ffffffffffffffff81111561226c57600080fd5b612278858286016121ae565b9150509250929050565b60006020828403121561229457600080fd5b813567ffffffffffffffff8111156122ab57600080fd5b61163a848285016121ae565b803580151581146122c757600080fd5b919050565b600080604083850312156122df57600080fd5b82356122ea816120f9565b91506122f8602084016122b7565b90509250929050565b6000806000806080858703121561231757600080fd5b8435612322816120f9565b93506020850135612332816120f9565b925060408501359150606085013567ffffffffffffffff81111561235557600080fd5b612361878288016121ae565b91505092959194509250565b60006020828403121561237f57600080fd5b61206e826122b7565b6000806040838503121561239b57600080fd5b82356123a6816120f9565b915060208301356123b6816120f9565b809150509250929050565b600080604083850312156123d457600080fd5b82359150602083013563ffffffff811681146123b657600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561241f5761241f6123ef565b500290565b60008219821115612437576124376123ef565b500190565b6000600019821415612450576124506123ef565b5060010190565b600181811c9082168061246b57607f821691505b6020821081141561248c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b6000826124b7576124b7612492565b500490565b6000828210156124ce576124ce6123ef565b500390565b600063ffffffff838116908316818110156124f0576124f06123ef565b039392505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681851680830382111561252d5761252d6123ef565b01949350505050565b60008551612548818460208a0161208e565b85519083019061255c818360208a0161208e565b712e6a736f6e3f6e616d654368616e6765733d60701b9101908152845161258a81601284016020890161208e565b68266e616d654236343d60b81b6012929091019182015283516125b481601b84016020880161208e565b01601b019695505050505050565b6000826125d1576125d1612492565b500690565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526000835161260e81601a85016020880161208e565b83519083019061262581601a84016020880161208e565b01601a01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612664908301846120ba565b9695505050505050565b60006020828403121561268057600080fd5b815161206e8161203b565b6f556e7469746c656420546f6b656e202360801b8152600082516126b681601085016020870161208e565b9190910160100192915050565b600060ff821660ff84168060ff038211156126e0576126e06123ef565b01939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bfe2091eab73271d8570f1e94e517c2045e3e186d12bbc54b30a1a7e19175fa564736f6c634300080a003368747470733a2f2f6d657461646174612e756e7469746c6564746f6b656e2e696f2f

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063715018a611610144578063c87b56dd116100b6578063d34aef4e1161007a578063d34aef4e14610783578063e33b7de3146107a3578063e985e9c5146107b8578063ef6c875414610801578063f2fde38b14610821578063f46a04eb1461084157600080fd5b8063c87b56dd146106de578063ce7c2ac2146106fe578063cecb06d014610734578063cf42dd4f14610749578063d12397301461076957600080fd5b8063937dd90d11610108578063937dd90d1461062057806395d89b41146106405780639852595c14610655578063a22cb4651461068b578063b88d4fde146106ab578063c39cbef1146106cb57600080fd5b8063715018a61461057257806389708f42146105875780638b83209b146105cf5780638da5cb5b146105ef5780639333b1e31461060d57600080fd5b80632f745c59116101dd57806350c0fbe4116101a157806350c0fbe4146104a657806355f804b3146104d35780635cb4712c146104f35780636352211e146105125780636a61e5fc1461053257806370a082311461055257600080fd5b80632f745c59146104175780633a98ef391461043757806342842e0e1461044c57806345ca77381461046c5780634f6ccce71461048657600080fd5b80631249c58b1161022f5780631249c58b1461037d57806318160ddd1461038557806319165587146103a457806323b872dd146103c457806325c5aa06146103e45780632b2e6f2d1461040457600080fd5b806301ffc9a7146102b9578063059513a6146102ee57806306fdde0314610303578063081812fc14610325578063095ea7b31461035d57600080fd5b366102b4577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156102c557600080fd5b506102d96102d4366004612051565b610861565b60405190151581526020015b60405180910390f35b6103016102fc366004612075565b61088c565b005b34801561030f57600080fd5b5061031861090b565b6040516102e591906120e6565b34801561033157600080fd5b50610345610340366004612075565b61099d565b6040516001600160a01b0390911681526020016102e5565b34801561036957600080fd5b5061030161037836600461210e565b6109d7565b610301610a32565b34801561039157600080fd5b506000545b6040519081526020016102e5565b3480156103b057600080fd5b506103016103bf36600461213a565b610a76565b3480156103d057600080fd5b506103016103df366004612157565b610b9e565b3480156103f057600080fd5b506103186103ff366004612075565b610bbc565b61030161041236600461223b565b610c68565b34801561042357600080fd5b5061039661043236600461210e565b610d4a565b34801561044357600080fd5b50600d54610396565b34801561045857600080fd5b50610301610467366004612157565b610e06565b34801561047857600080fd5b50662386f26fc10000610396565b34801561049257600080fd5b506103966104a1366004612075565b610e21565b3480156104b257600080fd5b506103966104c1366004612075565b6000908152600b602052604090205490565b3480156104df57600080fd5b506103016104ee366004612282565b610e34565b3480156104ff57600080fd5b506013546102d990610100900460ff1681565b34801561051e57600080fd5b5061034561052d366004612075565b610e62565b34801561053e57600080fd5b5061030161054d366004612075565b610edd565b34801561055e57600080fd5b5061039661056d36600461213a565b610ef9565b34801561057e57600080fd5b50610301610f2a565b34801561059357600080fd5b506105ba6105a2366004612075565b6000908152600a602052604090205463ffffffff1690565b60405163ffffffff90911681526020016102e5565b3480156105db57600080fd5b506103456105ea366004612075565b610f4d565b3480156105fb57600080fd5b50600c546001600160a01b0316610345565b61030161061b366004612282565b610f7d565b34801561062c57600080fd5b5061030161063b366004612075565b611008565b34801561064c57600080fd5b5061031861106b565b34801561066157600080fd5b5061039661067036600461213a565b6001600160a01b031660009081526010602052604090205490565b34801561069757600080fd5b506103016106a63660046122cc565b61107a565b3480156106b757600080fd5b506103016106c6366004612301565b6110fc565b6103016106d936600461223b565b61111b565b3480156106ea57600080fd5b506103186106f9366004612075565b6111eb565b34801561070a57600080fd5b5061039661071936600461213a565b6001600160a01b03166000908152600f602052604090205490565b34801561074057600080fd5b50610301611339565b34801561075557600080fd5b5061030161076436600461236d565b611373565b34801561077557600080fd5b506013546102d99060ff1681565b34801561078f57600080fd5b506105ba61079e366004612075565b6113a4565b3480156107af57600080fd5b50600e54610396565b3480156107c457600080fd5b506102d96107d3366004612388565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561080d57600080fd5b5061034561081c3660046123c1565b6113de565b34801561082d57600080fd5b5061030161083c36600461213a565b611404565b34801561084d57600080fd5b5061030161085c36600461236d565b611437565b60006001600160e01b0319821663780e9d6360e01b1480610886575061088682611461565b92915050565b8060125461089a9190612405565b8034146108a657600080fd5b60135460ff166108b557600080fd5b6122b8826108c260005490565b6108cc9190612424565b11156108d757600080fd5b60005b82811015610906576108f4336108ef60005490565b6114b1565b806108fe8161243c565b9150506108da565b505050565b60606001805461091a90612457565b80601f016020809104026020016040519081016040528092919081815260200182805461094690612457565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b6000818152600a602052604081205463ffffffff166109bb57600080fd5b506000908152600760205260409020546001600160a01b031690565b60006109e282610e62565b9050806001600160a01b0316836001600160a01b03161415610a0357600080fd5b336001600160a01b0382161480610a1f5750610a1f81336107d3565b610a2857600080fd5b61090683836114cb565b601254803414610a4157600080fd5b60135460ff16610a5057600080fd5b6122b8610a5c60005490565b10610a6657600080fd5b610a73336108ef60005490565b50565b6001600160a01b0381166000908152600f6020526040902054610a9857600080fd5b6000600e5447610aa89190612424565b6001600160a01b038316600090815260106020908152604080832054600d54600f909352908320549394509192610adf9085612405565b610ae991906124a8565b610af391906124bc565b905080610aff57600080fd5b6001600160a01b038316600090815260106020526040902054610b23908290612424565b6001600160a01b038416600090815260106020526040902055600e54610b4a908290612424565b600e55610b578382611539565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b610ba833826115a6565b610bb157600080fd5b610906838383611642565b60038181548110610bcc57600080fd5b906000526020600020016000915090508054610be790612457565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390612457565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b505050505081565b81601254610c769190612405565b803414610c8257600080fd5b601354610100900460ff16610c9657600080fd5b6122b883610ca360005490565b610cad9190612424565b1115610cb857600080fd5b600283610cc433610ef9565b610cce9190612424565b1115610cd957600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610d11906034015b60405160208183030381529060405283611797565b610d1a57600080fd5b60005b83811015610d4457610d32336108ef60005490565b80610d3c8161243c565b915050610d1d565b50505050565b6000610d5583610ef9565b8210610d6057600080fd5b6000805b600054811015610e00576000818152600960209081526040808320600a90925290912054610d9a9060019063ffffffff166124d3565b63ffffffff1681548110610db057610db06124f8565b6000918252602090912001546001600160a01b0386811691161415610dee5783821415610de05791506108869050565b81610dea8161243c565b9250505b80610df88161243c565b915050610d64565b50600080fd5b610906838383604051806020016040528060008152506110fc565b600080548210610e3057600080fd5b5090565b600c546001600160a01b03163314610e4b57600080fd5b8051610e5e906005906020840190611fab565b5050565b6000818152600a602052604081205463ffffffff16610e8057600080fd5b6000828152600960209081526040808320600a909252822054610eab9060019063ffffffff166124d3565b63ffffffff1681548110610ec157610ec16124f8565b6000918252602090912001546001600160a01b03169392505050565b600c546001600160a01b03163314610ef457600080fd5b601255565b60006001600160a01b038216610f0e57600080fd5b506001600160a01b031660009081526006602052604090205490565b600c546001600160a01b03163314610f4157600080fd5b610f4b60006117d1565b565b600060118281548110610f6257610f626124f8565b6000918252602090912001546001600160a01b031692915050565b601254803414610f8c57600080fd5b601354610100900460ff16610fa057600080fd5b6122b8610fac60005490565b10610fb657600080fd5b6002610fc133610ef9565b10610fcb57600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152610ff290603401610cfc565b610ffb57600080fd5b610e5e336108ef60005490565b600c546001600160a01b0316331461101f57600080fd5b6122b88161102c60005490565b6110369190612424565b111561104157600080fd5b60005b81811015610e5e57611059336108ef60005490565b806110638161243c565b915050611044565b60606002805461091a90612457565b6001600160a01b03821633141561109057600080fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61110633836115a6565b61110f57600080fd5b610d4484848484611823565b813361112682610e62565b6001600160a01b03161461113957600080fd5b662386f26fc1000080341461114d57600080fd5b600160048581548110611162576111626124f8565b90600052602060002090600891828204019190066004028282829054906101000a900463ffffffff16611195919061250e565b92506101000a81548163ffffffff021916908363ffffffff16021790555082600385815481106111c7576111c76124f8565b9060005260206000200190805190602001906111e4929190611fab565b5050505050565b6000818152600a602052604090205460609063ffffffff1661120c57600080fd5b6000611216611843565b90508061122284611852565b61126160048681548110611238576112386124f8565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16611852565b61130f60038781548110611277576112776124f8565b90600052602060002001805461128c90612457565b80601f01602080910402602001604051908101604052809291908181526020018280546112b890612457565b80156113055780601f106112da57610100808354040283529160200191611305565b820191906000526020600020905b8154815290600101906020018083116112e857829003601f168201915b5050505050611950565b6040516020016113229493929190612536565b604051602081830303815290604052915050919050565b600c546001600160a01b0316331461135057600080fd5b6122b861135c60005490565b1061136657600080fd5b610f4b336108ef60005490565b600c546001600160a01b0316331461138a57600080fd5b601380549115156101000261ff0019909216919091179055565b600481815481106113b457600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b6000828152600960205260408120805463ffffffff8416908110610ec157610ec16124f8565b600c546001600160a01b0316331461141b57600080fd5b6001600160a01b03811661142e57600080fd5b610a73816117d1565b600c546001600160a01b0316331461144e57600080fd5b6013805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b148061149257506001600160e01b03198216635b5e139f60e01b145b8061088657506301ffc9a760e01b6001600160e01b0319831614610886565b610e5e828260405180602001604052806000815250611ab6565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150082610e62565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8047101561154657600080fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b505090508061090657600080fd5b6000818152600a602052604081205463ffffffff166115c457600080fd5b60006115cf83610e62565b9050806001600160a01b0316846001600160a01b0316148061160a5750836001600160a01b03166115ff8461099d565b6001600160a01b0316145b8061163a57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661165582610e62565b6001600160a01b03161461166857600080fd5b6001600160a01b03821661167b57600080fd5b6116866000826114cb565b6001600160a01b03831660009081526006602052604081208054600192906116af9084906124bc565b90915550506001600160a01b03821660009081526006602052604081208054600192906116dd908490612424565b90915550506000818152600a6020526040812080546001929061170790849063ffffffff1661250e565b825463ffffffff9182166101009390930a9283029190920219909116179055506000818152600960209081526040808320805460018101825590845291832090910180546001600160a01b038087166001600160a01b0319909216821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600073b997adc54278348fdd86a5543c0250774f55c7296117c0836117bb86611ad6565b611b11565b6001600160a01b0316149392505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61182e848484611642565b61183a84848484611b90565b610d4457600080fd5b60606005805461091a90612457565b6060816118765750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118a0578061188a8161243c565b91506118999050600a836124a8565b915061187a565b60008167ffffffffffffffff8111156118bb576118bb612198565b6040519080825280601f01601f1916602001820160405280156118e5576020820181803683370190505b5090505b841561163a576118fa6001836124bc565b9150611907600a866125c2565b611912906030612424565b60f81b818381518110611927576119276124f8565b60200101906001600160f81b031916908160001a905350611949600a866124a8565b94506118e9565b606081516000141561197057505060408051602081019091526000815290565b60006040518060600160405280604081526020016126e9604091399050600060038451600261199f9190612424565b6119a991906124a8565b6119b4906004612405565b905060006119c3826020612424565b67ffffffffffffffff8111156119db576119db612198565b6040519080825280601f01601f191660200182016040528015611a05576020820181803683370190505b509050818152600183018586518101602084015b81831015611a71576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101611a19565b600389510660018114611a8b5760028114611a9c57611aa8565b613d3d60f01b600119830152611aa8565b603d60f81b6000198301525b509398975050505050505050565b611ac08383611c7b565b611acd6000848484611b90565b61090657600080fd5b6000611ae28251611e51565b82604051602001611af49291906125d6565b604051602081830303815290604052805190602001209050919050565b600080600080611b2086611f7a565b6040805160008152602081018083528a905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611b7b573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0384163b15611c7057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bd4903390899088908890600401612631565b6020604051808303816000875af1925050508015611c0f575060408051601f3d908101601f19168201909252611c0c9181019061266e565b60015b611c56573d808015611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b606091505b508051611c4e57600080fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061163a565b506001949350505050565b6001600160a01b038216611c8e57600080fd5b6000818152600a602052604090205463ffffffff1615611cad57600080fd5b6003611cb882611852565b604051602001611cc8919061268b565b60408051601f19818403018152919052815460018101835560009283526020928390208251611cfd9491909201920190611fab565b5060048054600180820183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6008830401805460079093169093026101000a63ffffffff02199091169091556001600160a01b03831660009081526006602052604081208054909190611d72908490612424565b90915550506000818152600a60205260408120805460019290611d9c90849063ffffffff1661250e565b82546101009290920a63ffffffff81810219909316919092169190910217905550600081815260096020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038716179055838352600b909152812043905580549080611e108361243c565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606081611e755750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e9f5780611e898161243c565b9150611e989050600a836124a8565b9150611e79565b60008167ffffffffffffffff811115611eba57611eba612198565b6040519080825280601f01601f191660200182016040528015611ee4576020820181803683370190505b509050815b8515611f7157611efa6001826124bc565b90506000611f09600a886124a8565b611f1490600a612405565b611f1e90886124bc565b611f299060306126c3565b905060008160f81b905080848481518110611f4657611f466124f8565b60200101906001600160f81b031916908160001a905350611f68600a896124a8565b97505050611ee9565b50949350505050565b60008060008351604114611f8d57600080fd5b50505060208101516040820151606090920151909260009190911a90565b828054611fb790612457565b90600052602060002090601f016020900481019282611fd9576000855561201f565b82601f10611ff257805160ff191683800117855561201f565b8280016001018555821561201f579182015b8281111561201f578251825591602001919060010190612004565b50610e309291505b80821115610e305760008155600101612027565b6001600160e01b031981168114610a7357600080fd5b60006020828403121561206357600080fd5b813561206e8161203b565b9392505050565b60006020828403121561208757600080fd5b5035919050565b60005b838110156120a9578181015183820152602001612091565b83811115610d445750506000910152565b600081518084526120d281602086016020860161208e565b601f01601f19169290920160200192915050565b60208152600061206e60208301846120ba565b6001600160a01b0381168114610a7357600080fd5b6000806040838503121561212157600080fd5b823561212c816120f9565b946020939093013593505050565b60006020828403121561214c57600080fd5b813561206e816120f9565b60008060006060848603121561216c57600080fd5b8335612177816120f9565b92506020840135612187816120f9565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126121bf57600080fd5b813567ffffffffffffffff808211156121da576121da612198565b604051601f8301601f19908116603f0116810190828211818310171561220257612202612198565b8160405283815286602085880101111561221b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561224e57600080fd5b82359150602083013567ffffffffffffffff81111561226c57600080fd5b612278858286016121ae565b9150509250929050565b60006020828403121561229457600080fd5b813567ffffffffffffffff8111156122ab57600080fd5b61163a848285016121ae565b803580151581146122c757600080fd5b919050565b600080604083850312156122df57600080fd5b82356122ea816120f9565b91506122f8602084016122b7565b90509250929050565b6000806000806080858703121561231757600080fd5b8435612322816120f9565b93506020850135612332816120f9565b925060408501359150606085013567ffffffffffffffff81111561235557600080fd5b612361878288016121ae565b91505092959194509250565b60006020828403121561237f57600080fd5b61206e826122b7565b6000806040838503121561239b57600080fd5b82356123a6816120f9565b915060208301356123b6816120f9565b809150509250929050565b600080604083850312156123d457600080fd5b82359150602083013563ffffffff811681146123b657600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561241f5761241f6123ef565b500290565b60008219821115612437576124376123ef565b500190565b6000600019821415612450576124506123ef565b5060010190565b600181811c9082168061246b57607f821691505b6020821081141561248c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b6000826124b7576124b7612492565b500490565b6000828210156124ce576124ce6123ef565b500390565b600063ffffffff838116908316818110156124f0576124f06123ef565b039392505050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681851680830382111561252d5761252d6123ef565b01949350505050565b60008551612548818460208a0161208e565b85519083019061255c818360208a0161208e565b712e6a736f6e3f6e616d654368616e6765733d60701b9101908152845161258a81601284016020890161208e565b68266e616d654236343d60b81b6012929091019182015283516125b481601b84016020880161208e565b01601b019695505050505050565b6000826125d1576125d1612492565b500690565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526000835161260e81601a85016020880161208e565b83519083019061262581601a84016020880161208e565b01601a01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612664908301846120ba565b9695505050505050565b60006020828403121561268057600080fd5b815161206e8161203b565b6f556e7469746c656420546f6b656e202360801b8152600082516126b681601085016020870161208e565b9190910160100192915050565b600060ff821660ff84168060ff038211156126e0576126e06123ef565b01939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220bfe2091eab73271d8570f1e94e517c2045e3e186d12bbc54b30a1a7e19175fa564736f6c634300080a0033

Deployed Bytecode Sourcemap

18862:7215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15812:40;4749:10;15812:40;;;-1:-1:-1;;;;;206:32:1;;;188:51;;15842:9:0;270:2:1;255:18;;248:34;161:18;15812:40:0;;;;;;;18862:7215;;;;;22289:283;;;;;;;;;;-1:-1:-1;22289:283:0;;;;;:::i;:::-;;:::i;:::-;;;844:14:1;;837:22;819:41;;807:2;792:18;22289:283:0;;;;;;;;19500:300;;;;;;:::i;:::-;;:::i;:::-;;8647:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9645:223::-;;;;;;;;;;-1:-1:-1;9645:223:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1971:32:1;;;1953:51;;1941:2;1926:18;9645:223:0;1807:203:1;9364:273:0;;;;;;;;;;-1:-1:-1;9364:273:0;;;;;:::i;:::-;;:::i;19808:159::-;;;:::i;22580:86::-;;;;;;;;;;-1:-1:-1;22624:7:0;22651;22580:86;;;2617:25:1;;;2605:2;2590:18;22580:86:0;2471:177:1;16408:550:0;;;;;;;;;;-1:-1:-1;16408:550:0;;;;;:::i;:::-;;:::i;10404:231::-;;;;;;;;;;-1:-1:-1;10404:231:0;;;;;:::i;:::-;;:::i;7156:22::-;;;;;;;;;;-1:-1:-1;7156:22:0;;;;;:::i;:::-;;:::i;23297:472::-;;;;;;:::i;:::-;;:::i;22829:460::-;;;;;;;;;;-1:-1:-1;22829:460:0;;;;;:::i;:::-;;:::i;15868:91::-;;;;;;;;;;-1:-1:-1;15939:12:0;;15868:91;;10643:185;;;;;;;;;;-1:-1:-1;10643:185:0;;;;;:::i;:::-;;:::i;22187:94::-;;;;;;;;;;-1:-1:-1;22262:11:0;22187:94;;22674:147;;;;;;;;;;-1:-1:-1;22674:147:0;;;;;:::i;:::-;;:::i;13860:123::-;;;;;;;;;;-1:-1:-1;13860:123:0;;;;;:::i;:::-;13922:7;13949:26;;;:17;:26;;;;;;;13860:123;21239:90;;;;;;;;;;-1:-1:-1;21239:90:0;;;;;:::i;:::-;;:::i;19125:34::-;;;;;;;;;;-1:-1:-1;19125:34:0;;;;;;;;;;;8363:276;;;;;;;;;;-1:-1:-1;8363:276:0;;;;;:::i;:::-;;:::i;20574:103::-;;;;;;;;;;-1:-1:-1;20574:103:0;;;;;:::i;:::-;;:::i;8143:212::-;;;;;;;;;;-1:-1:-1;8143:212:0;;;;;:::i;:::-;;:::i;18408:94::-;;;;;;;;;;;;;:::i;14879:112::-;;;;;;;;;;-1:-1:-1;14879:112:0;;;;;:::i;:::-;14937:6;14963:20;;;:11;:20;;;;;;;;;14879:112;;;;5374:10:1;5362:23;;;5344:42;;5332:2;5317:18;14879:112:0;5200:192:1;16300:100:0;;;;;;;;;;-1:-1:-1;16300:100:0;;;;;:::i;:::-;;:::i;18221:87::-;;;;;;;;;;-1:-1:-1;18294:6:0;;-1:-1:-1;;;;;18294:6:0;18221:87;;23777:360;;;;;;:::i;:::-;;:::i;20123:231::-;;;;;;;;;;-1:-1:-1;20123:231:0;;;;;:::i;:::-;;:::i;8755:104::-;;;;;;;;;;;;;:::i;16183:109::-;;;;;;;;;;-1:-1:-1;16183:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;16266:18:0;16239:7;16266:18;;;:9;:18;;;;;;;16183:109;9876:298;;;;;;;;;;-1:-1:-1;9876:298:0;;;;;:::i;:::-;;:::i;10836:275::-;;;;;;;;;;-1:-1:-1;10836:275:0;;;;;:::i;:::-;;:::i;21949:230::-;;;;;;:::i;:::-;;:::i;21337:604::-;;;;;;;;;;-1:-1:-1;21337:604:0;;;;;:::i;:::-;;:::i;16070:105::-;;;;;;;;;;-1:-1:-1;16070:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;16151:16:0;16124:7;16151:16;;;:7;:16;;;;;;;16070:105;19975:140;;;;;;;;;;;;;:::i;20465:101::-;;;;;;;;;;-1:-1:-1;20465:101:0;;;;;:::i;:::-;;:::i;19087:31::-;;;;;;;;;;-1:-1:-1;19087:31:0;;;;;;;;7185:28;;;;;;;;;;-1:-1:-1;7185:28:0;;;;;:::i;:::-;;:::i;15967:95::-;;;;;;;;;;-1:-1:-1;16040:14:0;;15967:95;;10182:214;;;;;;;;;;-1:-1:-1;10182:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;10353:25:0;;;10324:4;10353:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10182:214;14999:164;;;;;;;;;;-1:-1:-1;14999:164:0;;;;;:::i;:::-;;:::i;18510:::-;;;;;;;;;;-1:-1:-1;18510:164:0;;;;;:::i;:::-;;:::i;20362:95::-;;;;;;;;;;-1:-1:-1;20362:95:0;;;;;:::i;:::-;;:::i;22289:283::-;22419:4;-1:-1:-1;;;;;;22461:50:0;;-1:-1:-1;;;22461:50:0;;:103;;;22528:36;22552:11;22528:23;:36::i;:::-;22441:123;22289:283;-1:-1:-1;;22289:283:0:o;19500:300::-;19596:6;19582:11;;:20;;;;:::i;:::-;20844:5;20831:9;:18;20823:27;;;;;;20913:11:::1;::::0;::::1;;20905:20;;;::::0;::::1;;19031:4:::2;19660:6;19644:13;22624:7:::0;22651;;22580:86;19644:13:::2;:22;;;;:::i;:::-;:37;;19636:46;;;::::0;::::2;;19698:9;19693:100;19717:6;19713:1;:10;19693:100;;;19745:36;19755:10;19767:13;22624:7:::0;22651;;22580:86;19767:13:::2;19745:9;:36::i;:::-;19725:3:::0;::::2;::::0;::::2;:::i;:::-;;;;19693:100;;;;19500:300:::0;;:::o;8647:100::-;8701:13;8734:5;8727:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8647:100;:::o;9645:223::-;9766:7;11477:20;;;:11;:20;;;;;;;;9791:25;;;;;;-1:-1:-1;9836:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;9836:24:0;;9645:223::o;9364:273::-;9445:13;9461:23;9476:7;9461:14;:23::i;:::-;9445:39;;9509:5;-1:-1:-1;;;;;9503:11:0;:2;-1:-1:-1;;;;;9503:11:0;;;9495:20;;;;;;4749:10;-1:-1:-1;;;;;9534:21:0;;;;:62;;-1:-1:-1;9559:37:0;9576:5;4749:10;10182:214;:::i;9559:37::-;9526:71;;;;;;9608:21;9617:2;9621:7;9608:8;:21::i;19808:159::-;19845:11;;20844:5;20831:9;:18;20823:27;;;;;;20913:11:::1;::::0;::::1;;20905:20;;;::::0;::::1;;19031:4:::2;19884:13;22624:7:::0;22651;;22580:86;19884:13:::2;:27;19876:36;;;::::0;::::2;;19923;19933:10;19945:13;22624:7:::0;22651;;22580:86;19923:36:::2;19808:159:::0;:::o;16408:550::-;-1:-1:-1;;;;;16484:16:0;;16503:1;16484:16;;;:7;:16;;;;;;16476:29;;;;;;16518:21;16566:14;;16542:21;:38;;;;:::i;:::-;-1:-1:-1;;;;;16687:18:0;;16591:15;16687:18;;;:9;:18;;;;;;;;;16659:12;;16626:7;:16;;;;;;;16518:62;;-1:-1:-1;16591:15:0;;16610:32;;16518:62;16610:32;:::i;:::-;16609:62;;;;:::i;:::-;:96;;;;:::i;:::-;16591:114;-1:-1:-1;16726:12:0;16718:21;;;;;;-1:-1:-1;;;;;16773:18:0;;;;;;:9;:18;;;;;;:28;;16794:7;;16773:28;:::i;:::-;-1:-1:-1;;;;;16752:18:0;;;;;;:9;:18;;;;;:49;16829:14;;:24;;16846:7;;16829:24;:::i;:::-;16812:14;:41;16866:35;16884:7;16893;16866:17;:35::i;:::-;16917:33;;;-1:-1:-1;;;;;206:32:1;;188:51;;270:2;255:18;;248:34;;;16917:33:0;;161:18:1;16917:33:0;;;;;;;16465:493;;16408:550;:::o;10404:231::-;10546:41;4749:10;10579:7;10546:18;:41::i;:::-;10538:50;;;;;;10599:28;10609:4;10615:2;10619:7;10599:9;:28::i;7156:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23297:472::-;23424:6;23410:11;;:20;;;;:::i;:::-;20844:5;20831:9;:18;20823:27;;;;;;20991:14:::1;::::0;::::1;::::0;::::1;;;20983:23;;;::::0;::::1;;19031:4:::2;23491:6;23475:13;22624:7:::0;22651;;22580:86;23475:13:::2;:22;;;;:::i;:::-;:37;;23467:46;;;::::0;::::2;;19079:1;23556:6;23532:21;23542:10;23532:9;:21::i;:::-;:30;;;;:::i;:::-;:51;;23524:60;;;::::0;::::2;;23610:28;::::0;-1:-1:-1;;23627:10:0::2;9984:2:1::0;9980:15;9976:53;23610:28:0::2;::::0;::::2;9964:66:1::0;23603:47:0::2;::::0;10046:12:1;;23610:28:0::2;;;;;;;;;;;;;23640:9;23603:6;:47::i;:::-;23595:56;;;::::0;::::2;;23667:9;23662:100;23686:6;23682:1;:10;23662:100;;;23714:36;23724:10;23736:13;22624:7:::0;22651;;22580:86;23714:36:::2;23694:3:::0;::::2;::::0;::::2;:::i;:::-;;;;23662:100;;;;23297:472:::0;;;:::o;22829:460::-;22953:15;23002:16;23012:5;23002:9;:16::i;:::-;22994:5;:24;22986:33;;;;;;23032:13;23061:9;23056:205;22624:7;22651;23072:1;:17;23056:205;;;23124:10;;;;:7;:10;;;;;;;;23135:11;:14;;;;;;;:18;;23152:1;;23135:14;;:18;:::i;:::-;23124:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23115:39:0;;;23124:30;;23115:39;23111:139;;;23188:5;23179;:14;23175:59;;;23202:1;-1:-1:-1;23195:8:0;;-1:-1:-1;23195:8:0;23175:59;23227:7;;;;:::i;:::-;;;;23175:59;23091:3;;;;:::i;:::-;;;;23056:205;;;;23273:8;;;10643:185;10781:39;10798:4;10804:2;10808:7;10781:39;;;;;;;;;;;;:16;:39::i;22674:147::-;22740:7;22651;;22768:5;:21;22760:30;;;;;;-1:-1:-1;22808:5:0;22674:147::o;21239:90::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;21306:15;;::::1;::::0;:9:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;:::-;;21239:90:::0;:::o;8363:276::-;8480:7;8513:20;;;:11;:20;;;;;;;;8505:34;;;;;;8550:13;8566:16;;;:7;:16;;;;;;;;8583:11;:20;;;;;;:24;;8606:1;;8583:20;;:24;:::i;:::-;8566:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;8566:42:0;;8363:276;-1:-1:-1;;;8363:276:0:o;20574:103::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;20645:11:::1;:24:::0;20574:103::o;8143:212::-;8260:7;-1:-1:-1;;;;;8293:19:0;;8285:28;;;;;;-1:-1:-1;;;;;;8331:16:0;;;;;:9;:16;;;;;;;8143:212::o;18408:94::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;18473:21:::1;18491:1;18473:9;:21::i;:::-;18408:94::o:0;16300:100::-;16351:7;16378;16386:5;16378:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16378:14:0;;16300:100;-1:-1:-1;;16300:100:0:o;23777:360::-;23870:11;;20844:5;20831:9;:18;20823:27;;;;;;20991:14:::1;::::0;::::1;::::0;::::1;;;20983:23;;;::::0;::::1;;19031:4:::2;23926:13;22624:7:::0;22651;;22580:86;23926:13:::2;:27;23918:36;;;::::0;::::2;;19079:1;23973:21;23983:10;23973:9;:21::i;:::-;:41;23965:50;;;::::0;::::2;;24041:28;::::0;-1:-1:-1;;24058:10:0::2;9984:2:1::0;9980:15;9976:53;24041:28:0::2;::::0;::::2;9964:66:1::0;24034:47:0::2;::::0;10046:12:1;;24041:28:0::2;9835:229:1::0;24034:47:0::2;24026:56;;;::::0;::::2;;24093:36;24103:10;24115:13;22624:7:::0;22651;;22580:86;20123:231;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;19031:4:::1;20214:6;20198:13;22624:7:::0;22651;;22580:86;20198:13:::1;:22;;;;:::i;:::-;:37;;20190:46;;;::::0;::::1;;20252:9;20247:100;20271:6;20267:1;:10;20247:100;;;20299:36;20309:10;20321:13;22624:7:::0;22651;;22580:86;20299:36:::1;20279:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20247:100;;8755:104:::0;8811:13;8844:7;8837:14;;;;;:::i;9876:298::-;-1:-1:-1;;;;;10011:24:0;;4749:10;10011:24;;10003:33;;;;;;4749:10;10049:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10049:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;10049:53:0;;;;;;;;;;10118:48;;819:41:1;;;10049:42:0;;4749:10;10118:48;;792:18:1;10118:48:0;;;;;;;9876:298;;:::o;10836:275::-;11011:41;4749:10;11044:7;11011:18;:41::i;:::-;11003:50;;;;;;11064:39;11078:4;11084:2;11088:7;11097:5;11064:13;:39::i;21949:230::-;22053:7;20745:10;20730:11;22053:7;20730;:11::i;:::-;-1:-1:-1;;;;;20730:25:0;;20722:34;;;;;;22262:11;20844:5:::1;20831:9;:18;20823:27;;;::::0;::::1;;22137:1:::2;22112:12;22125:7;22112:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22167:4;22149:6;22156:7;22149:15;;;;;;;;:::i;:::-;;;;;;;;:22;;;;;;;;;;;;:::i;:::-;;20767:1:::1;21949:230:::0;;;:::o;21337:604::-;11453:4;11477:20;;;:11;:20;;;;;;21455:13;;11477:20;;21486:25;;;;;;21522:18;21543:10;:8;:10::i;:::-;21522:31;;21648:4;21675:25;21692:7;21675:16;:25::i;:::-;21766:39;21783:12;21796:7;21783:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;21766:16;:39::i;:::-;21862:37;21882:6;21889:7;21882:15;;;;;;;;:::i;:::-;;;;;;;;21862:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:37::i;:::-;21609:309;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21564:369;;;21337:604;;;:::o;19975:140::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;19031:4:::1;20032:13;22624:7:::0;22651;;22580:86;20032:13:::1;:27;20024:36;;;::::0;::::1;;20071;20081:10;20093:13;22624:7:::0;22651;;22580:86;20465:101;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;20534:14:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;20534:24:0;;::::1;::::0;;;::::1;::::0;;20465:101::o;7185:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14999:164::-;15100:7;15132:16;;;:7;:16;;;;;:23;;;;;;;;;;;;:::i;18510:164::-;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;-1:-1:-1;;;;;18613:22:0;::::1;18591:45;;;::::0;::::1;;18647:19;18657:8;18647:9;:19::i;20362:95::-:0;18294:6;;-1:-1:-1;;;;;18294:6:0;4749:10;18356:23;18348:32;;;;;;20428:11:::1;:21:::0;;-1:-1:-1;;20428:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20362:95::o;7780:355::-;7927:4;-1:-1:-1;;;;;;7969:40:0;;-1:-1:-1;;;7969:40:0;;:105;;-1:-1:-1;;;;;;;8026:48:0;;-1:-1:-1;;;8026:48:0;7969:105;:158;;;-1:-1:-1;;;;;;;;;;6836:40:0;;;8091:36;6677:207;11893:110;11969:26;11979:2;11983:7;11969:26;;;;;;;;;;;;:9;:26::i;13678:174::-;13753:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;13753:29:0;-1:-1:-1;;;;;13753:29:0;;;;;;;;:24;;13807:23;13753:24;13807:14;:23::i;:::-;-1:-1:-1;;;;;13798:46:0;;;;;;;;;;;13678:174;;:::o;4409:220::-;4524:6;4499:21;:31;;4491:40;;;;;;4543:12;4561:9;-1:-1:-1;;;;;4561:14:0;4583:6;4561:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:52;;;4613:7;4605:16;;;;;11518:367;11647:4;11477:20;;;:11;:20;;;;;;;;11669:25;;;;;;11705:13;11721:23;11736:7;11721:14;:23::i;:::-;11705:39;;11774:5;-1:-1:-1;;;;;11763:16:0;:7;-1:-1:-1;;;;;11763:16:0;;:64;;;;11820:7;-1:-1:-1;;;;;11796:31:0;:20;11808:7;11796:11;:20::i;:::-;-1:-1:-1;;;;;11796:31:0;;11763:64;:113;;;-1:-1:-1;;;;;;10353:25:0;;;10324:4;10353:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;11844:32;11755:122;11518:367;-1:-1:-1;;;;11518:367:0:o;13197:473::-;13356:4;-1:-1:-1;;;;;13329:31:0;:23;13344:7;13329:14;:23::i;:::-;-1:-1:-1;;;;;13329:31:0;;13321:40;;;;;;-1:-1:-1;;;;;13380:16:0;;13372:25;;;;;;13458:29;13475:1;13479:7;13458:8;:29::i;:::-;-1:-1:-1;;;;;13498:15:0;;;;;;:9;:15;;;;;:20;;13517:1;;13498:15;:20;;13517:1;;13498:20;:::i;:::-;;;;-1:-1:-1;;;;;;;13529:13:0;;;;;;:9;:13;;;;;:18;;13546:1;;13529:13;:18;;13546:1;;13529:18;:::i;:::-;;;;-1:-1:-1;;13558:20:0;;;;:11;:20;;;;;:25;;13582:1;;13558:20;:25;;13582:1;;13558:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13594:16:0;;;:7;:16;;;;;;;;:25;;-1:-1:-1;13594:25:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13594:25:0;;;-1:-1:-1;;;;;;13594:25:0;;;;;;;;13635:27;;13602:7;;13635:27;;;;;;;13197:473;;;:::o;24239:204::-;24345:4;24188:42;24374:43;24382:9;24393:23;24414:1;24393:20;:23::i;:::-;24374:7;:43::i;:::-;-1:-1:-1;;;;;24374:61:0;;;24239:204;-1:-1:-1;;;24239:204:0:o;18682:173::-;18757:6;;;-1:-1:-1;;;;;18774:17:0;;;-1:-1:-1;;;;;;18774:17:0;;;;;;;18807:40;;18757:6;;;18774:17;18757:6;;18807:40;;18738:16;;18807:40;18727:128;18682:173;:::o;11119:261::-;11276:28;11286:4;11292:2;11296:7;11276:9;:28::i;:::-;11323:48;11346:4;11352:2;11356:7;11365:5;11323:22;:48::i;:::-;11315:57;;;;;9255:101;9306:13;9339:9;9332:16;;;;;:::i;4973:532::-;5029:13;5059:10;5055:53;;-1:-1:-1;;5086:10:0;;;;;;;;;;;;-1:-1:-1;;;5086:10:0;;;;;4973:532::o;5055:53::-;5133:5;5118:12;5174:78;5181:9;;5174:78;;5207:8;;;;:::i;:::-;;-1:-1:-1;5230:10:0;;-1:-1:-1;5238:2:0;5230:10;;:::i;:::-;;;5174:78;;;5262:19;5294:6;5284:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5284:17:0;;5262:39;;5312:154;5319:10;;5312:154;;5346:11;5356:1;5346:11;;:::i;:::-;;-1:-1:-1;5415:10:0;5423:2;5415:5;:10;:::i;:::-;5402:24;;:2;:24;:::i;:::-;5389:39;;5372:6;5379;5372:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5372:56:0;;;;;;;;-1:-1:-1;5443:11:0;5452:2;5443:11;;:::i;:::-;;;5312:154;;593:1680;651:13;681:4;:11;696:1;681:16;677:31;;;-1:-1:-1;;699:9:0;;;;;;;;;-1:-1:-1;699:9:0;;;593:1680::o;677:31::-;719:19;741:12;;;;;;;;;;;;;;;;;719:34;;764:18;810:1;791:4;:11;805:1;791:15;;;;:::i;:::-;790:21;;;;:::i;:::-;785:27;;:1;:27;:::i;:::-;764:48;-1:-1:-1;823:20:0;857:15;764:48;870:2;857:15;:::i;:::-;846:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;846:27:0;;823:50;;923:10;915:6;908:26;975:1;968:5;964:13;1006:4;1057;1051:11;1042:7;1038:25;1106:2;1098:6;1094:15;1123:872;1158:6;1149:7;1146:19;1123:872;;;1228:1;1219:7;1215:15;1204:26;;1267:7;1261:14;1395:4;1387:5;1383:2;1379:14;1375:25;1365:8;1361:40;1355:47;1323:9;1293:128;1467:1;1456:9;1452:17;1439:30;;1589:4;1581:5;1577:2;1573:14;1569:25;1559:8;1555:40;1549:47;1517:9;1487:128;1661:1;1650:9;1646:17;1633:30;;1782:4;1774:5;1771:1;1767:13;1763:24;1753:8;1749:39;1743:46;1711:9;1681:127;1854:1;1843:9;1839:17;1826:30;;1924:4;1917:5;1913:16;1903:8;1899:31;1893:38;1882:9;1874:58;-1:-1:-1;1978:1:0;1963:17;1123:872;;;2033:1;2026:4;2020:11;2016:19;2054:1;2049:84;;;;2152:1;2147:82;;;;2009:220;;2049:84;-1:-1:-1;;;;;2082:17:0;;2075:43;2049:84;;2147:82;-1:-1:-1;;;;;2180:17:0;;2173:41;2009:220;-1:-1:-1;2259:6:0;;593:1680;-1:-1:-1;;;;;;;;593:1680:0:o;12011:230::-;12141:18;12147:2;12151:7;12141:5;:18::i;:::-;12178:54;12209:1;12213:2;12217:7;12226:5;12178:22;:54::i;:::-;12170:63;;;;;24694:365;24796:7;24963:24;24972:7;:14;24963:8;:24::i;:::-;25010:7;24869:167;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24841:210;;;;;;24821:230;;24694:365;;;:::o;24451:235::-;24553:7;24579:9;24590;24601:7;24612:25;24627:9;24612:14;:25::i;:::-;24657:21;;;;;;;;;;;;13062:25:1;;;13135:4;13123:17;;13103:18;;;13096:45;;;;13157:18;;;13150:34;;;13200:18;;;13193:34;;;24578:59:0;;-1:-1:-1;24578:59:0;;-1:-1:-1;24578:59:0;-1:-1:-1;24657:21:0;;13034:19:1;;24657:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24657:21:0;;-1:-1:-1;;24657:21:0;;;24451:235;-1:-1:-1;;;;;;;24451:235:0:o;13991:880::-;14146:4;-1:-1:-1;;;;;14167:13:0;;4337:20;4385:8;14163:701;;14220:175;;-1:-1:-1;;;14220:175:0;;-1:-1:-1;;;;;14220:36:0;;;;;:175;;4749:10;;14314:4;;14341:7;;14371:5;;14220:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14220:175:0;;;;;;;;-1:-1:-1;;14220:175:0;;;;;;;;;;;;:::i;:::-;;;14199:610;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14578:13:0;;14574:220;;14621:8;;;14574:220;14744:6;14738:13;14729:6;14725:2;14721:15;14714:38;14199:610;-1:-1:-1;;;;;;14459:51:0;-1:-1:-1;;;14459:51:0;;-1:-1:-1;14452:58:0;;14163:701;-1:-1:-1;14848:4:0;13991:880;;;;;;:::o;12249:608::-;-1:-1:-1;;;;;12329:16:0;;12321:25;;;;;;11453:4;11477:20;;;:11;:20;;;;;;;;:25;12357:26;;;;;;12454:6;12542:25;12559:7;12542:16;:25::i;:::-;12505:63;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12505:63:0;;;;;;;;;12454:140;;;;;;;-1:-1:-1;12454:140:0;;;12505:63;12454:140;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12605:12:0;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12638:13:0;;-1:-1:-1;12638:13:0;;;:9;12605:20;12638:13;;;;:18;;:13;;-1:-1:-1;12638:18:0;;12605:20;;12638:18;:::i;:::-;;;;-1:-1:-1;;12667:20:0;;;;:11;:20;;;;;:25;;12691:1;;12667:20;:25;;12691:1;;12667:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12703:16:0;;;:7;:16;;;;;;;;:25;;-1:-1:-1;12703:25:0;;;;;;;;;;;;;-1:-1:-1;;;;;;12703:25:0;-1:-1:-1;;;;;12703:25:0;;;;;12739:26;;;:17;:26;;;;;12768:12;12739:41;;12791:9;;;-1:-1:-1;12791:9:0;;;:::i;:::-;;;;-1:-1:-1;;12816:33:0;;12841:7;;-1:-1:-1;;;;;12816:33:0;;;12833:1;;12816:33;;12833:1;;12816:33;12249:608;;:::o;25453:621::-;25533:27;25582:7;25578:50;;-1:-1:-1;;25606:10:0;;;;;;;;;;;;-1:-1:-1;;;25606:10:0;;;;;25453:621::o;25578:50::-;25650:2;25638:9;25685:69;25692:6;;25685:69;;25715:5;;;;:::i;:::-;;-1:-1:-1;25735:7:0;;-1:-1:-1;25740:2:0;25735:7;;:::i;:::-;;;25685:69;;;25764:17;25794:3;25784:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25784:14:0;-1:-1:-1;25764:34:0;-1:-1:-1;25821:3:0;25835:202;25842:7;;25835:202;;25870:5;25874:1;25870;:5;:::i;:::-;25866:9;-1:-1:-1;25890:10:0;25921:7;25926:2;25921;:7;:::i;:::-;25920:14;;25932:2;25920:14;:::i;:::-;25915:19;;:2;:19;:::i;:::-;25904:31;;:2;:31;:::i;:::-;25890:46;;25951:9;25970:4;25963:12;;25951:24;;26000:2;25990:4;25995:1;25990:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;25990:12:0;;;;;;;;-1:-1:-1;26017:8:0;26023:2;26017:8;;:::i;:::-;;;25851:186;;25835:202;;;-1:-1:-1;26061:4:0;25453:621;-1:-1:-1;;;;25453:621:0:o;25067:378::-;25173:9;25197;25221:7;25264:3;:10;25278:2;25264:16;25256:25;;;;;;-1:-1:-1;;;25338:2:0;25329:12;;25323:19;25376:2;25367:12;;25361:19;25422:2;25413:12;;;25407:19;25323;;25404:1;25399:28;;;;;25067:378::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;293:131:1;-1:-1:-1;;;;;;367:32:1;;357:43;;347:71;;414:1;411;404:12;429:245;487:6;540:2;528:9;519:7;515:23;511:32;508:52;;;556:1;553;546:12;508:52;595:9;582:23;614:30;638:5;614:30;:::i;:::-;663:5;429:245;-1:-1:-1;;;429:245:1:o;871:180::-;930:6;983:2;971:9;962:7;958:23;954:32;951:52;;;999:1;996;989:12;951:52;-1:-1:-1;1022:23:1;;871:180;-1:-1:-1;871:180:1:o;1056:258::-;1128:1;1138:113;1152:6;1149:1;1146:13;1138:113;;;1228:11;;;1222:18;1209:11;;;1202:39;1174:2;1167:10;1138:113;;;1269:6;1266:1;1263:13;1260:48;;;-1:-1:-1;;1304:1:1;1286:16;;1279:27;1056:258::o;1319:::-;1361:3;1399:5;1393:12;1426:6;1421:3;1414:19;1442:63;1498:6;1491:4;1486:3;1482:14;1475:4;1468:5;1464:16;1442:63;:::i;:::-;1559:2;1538:15;-1:-1:-1;;1534:29:1;1525:39;;;;1566:4;1521:50;;1319:258;-1:-1:-1;;1319:258:1:o;1582:220::-;1731:2;1720:9;1713:21;1694:4;1751:45;1792:2;1781:9;1777:18;1769:6;1751:45;:::i;2015:131::-;-1:-1:-1;;;;;2090:31:1;;2080:42;;2070:70;;2136:1;2133;2126:12;2151:315;2219:6;2227;2280:2;2268:9;2259:7;2255:23;2251:32;2248:52;;;2296:1;2293;2286:12;2248:52;2335:9;2322:23;2354:31;2379:5;2354:31;:::i;:::-;2404:5;2456:2;2441:18;;;;2428:32;;-1:-1:-1;;;2151:315:1:o;2653:255::-;2720:6;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2828:9;2815:23;2847:31;2872:5;2847:31;:::i;2913:456::-;2990:6;2998;3006;3059:2;3047:9;3038:7;3034:23;3030:32;3027:52;;;3075:1;3072;3065:12;3027:52;3114:9;3101:23;3133:31;3158:5;3133:31;:::i;:::-;3183:5;-1:-1:-1;3240:2:1;3225:18;;3212:32;3253:33;3212:32;3253:33;:::i;:::-;2913:456;;3305:7;;-1:-1:-1;;;3359:2:1;3344:18;;;;3331:32;;2913:456::o;3374:127::-;3435:10;3430:3;3426:20;3423:1;3416:31;3466:4;3463:1;3456:15;3490:4;3487:1;3480:15;3506:718;3548:5;3601:3;3594:4;3586:6;3582:17;3578:27;3568:55;;3619:1;3616;3609:12;3568:55;3655:6;3642:20;3681:18;3718:2;3714;3711:10;3708:36;;;3724:18;;:::i;:::-;3799:2;3793:9;3767:2;3853:13;;-1:-1:-1;;3849:22:1;;;3873:2;3845:31;3841:40;3829:53;;;3897:18;;;3917:22;;;3894:46;3891:72;;;3943:18;;:::i;:::-;3983:10;3979:2;3972:22;4018:2;4010:6;4003:18;4064:3;4057:4;4052:2;4044:6;4040:15;4036:26;4033:35;4030:55;;;4081:1;4078;4071:12;4030:55;4145:2;4138:4;4130:6;4126:17;4119:4;4111:6;4107:17;4094:54;4192:1;4185:4;4180:2;4172:6;4168:15;4164:26;4157:37;4212:6;4203:15;;;;;;3506:718;;;;:::o;4229:388::-;4306:6;4314;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4419:9;4406:23;4396:33;;4480:2;4469:9;4465:18;4452:32;4507:18;4499:6;4496:30;4493:50;;;4539:1;4536;4529:12;4493:50;4562:49;4603:7;4594:6;4583:9;4579:22;4562:49;:::i;:::-;4552:59;;;4229:388;;;;;:::o;4622:321::-;4691:6;4744:2;4732:9;4723:7;4719:23;4715:32;4712:52;;;4760:1;4757;4750:12;4712:52;4800:9;4787:23;4833:18;4825:6;4822:30;4819:50;;;4865:1;4862;4855:12;4819:50;4888:49;4929:7;4920:6;4909:9;4905:22;4888:49;:::i;5722:160::-;5787:20;;5843:13;;5836:21;5826:32;;5816:60;;5872:1;5869;5862:12;5816:60;5722:160;;;:::o;5887:315::-;5952:6;5960;6013:2;6001:9;5992:7;5988:23;5984:32;5981:52;;;6029:1;6026;6019:12;5981:52;6068:9;6055:23;6087:31;6112:5;6087:31;:::i;:::-;6137:5;-1:-1:-1;6161:35:1;6192:2;6177:18;;6161:35;:::i;:::-;6151:45;;5887:315;;;;;:::o;6207:665::-;6302:6;6310;6318;6326;6379:3;6367:9;6358:7;6354:23;6350:33;6347:53;;;6396:1;6393;6386:12;6347:53;6435:9;6422:23;6454:31;6479:5;6454:31;:::i;:::-;6504:5;-1:-1:-1;6561:2:1;6546:18;;6533:32;6574:33;6533:32;6574:33;:::i;:::-;6626:7;-1:-1:-1;6680:2:1;6665:18;;6652:32;;-1:-1:-1;6735:2:1;6720:18;;6707:32;6762:18;6751:30;;6748:50;;;6794:1;6791;6784:12;6748:50;6817:49;6858:7;6849:6;6838:9;6834:22;6817:49;:::i;:::-;6807:59;;;6207:665;;;;;;;:::o;7271:180::-;7327:6;7380:2;7368:9;7359:7;7355:23;7351:32;7348:52;;;7396:1;7393;7386:12;7348:52;7419:26;7435:9;7419:26;:::i;7456:388::-;7524:6;7532;7585:2;7573:9;7564:7;7560:23;7556:32;7553:52;;;7601:1;7598;7591:12;7553:52;7640:9;7627:23;7659:31;7684:5;7659:31;:::i;:::-;7709:5;-1:-1:-1;7766:2:1;7751:18;;7738:32;7779:33;7738:32;7779:33;:::i;:::-;7831:7;7821:17;;;7456:388;;;;;:::o;7849:344::-;7916:6;7924;7977:2;7965:9;7956:7;7952:23;7948:32;7945:52;;;7993:1;7990;7983:12;7945:52;8029:9;8016:23;8006:33;;8089:2;8078:9;8074:18;8061:32;8133:10;8126:5;8122:22;8115:5;8112:33;8102:61;;8159:1;8156;8149:12;8198:127;8259:10;8254:3;8250:20;8247:1;8240:31;8290:4;8287:1;8280:15;8314:4;8311:1;8304:15;8330:168;8370:7;8436:1;8432;8428:6;8424:14;8421:1;8418:21;8413:1;8406:9;8399:17;8395:45;8392:71;;;8443:18;;:::i;:::-;-1:-1:-1;8483:9:1;;8330:168::o;8503:128::-;8543:3;8574:1;8570:6;8567:1;8564:13;8561:39;;;8580:18;;:::i;:::-;-1:-1:-1;8616:9:1;;8503:128::o;8636:135::-;8675:3;-1:-1:-1;;8696:17:1;;8693:43;;;8716:18;;:::i;:::-;-1:-1:-1;8763:1:1;8752:13;;8636:135::o;8776:380::-;8855:1;8851:12;;;;8898;;;8919:61;;8973:4;8965:6;8961:17;8951:27;;8919:61;9026:2;9018:6;9015:14;8995:18;8992:38;8989:161;;;9072:10;9067:3;9063:20;9060:1;9053:31;9107:4;9104:1;9097:15;9135:4;9132:1;9125:15;8989:161;;8776:380;;;:::o;9161:127::-;9222:10;9217:3;9213:20;9210:1;9203:31;9253:4;9250:1;9243:15;9277:4;9274:1;9267:15;9293:120;9333:1;9359;9349:35;;9364:18;;:::i;:::-;-1:-1:-1;9398:9:1;;9293:120::o;9418:125::-;9458:4;9486:1;9483;9480:8;9477:34;;;9491:18;;:::i;:::-;-1:-1:-1;9528:9:1;;9418:125::o;10069:221::-;10108:4;10137:10;10197;;;;10167;;10219:12;;;10216:38;;;10234:18;;:::i;:::-;10271:13;;10069:221;-1:-1:-1;;;10069:221:1:o;10295:127::-;10356:10;10351:3;10347:20;10344:1;10337:31;10387:4;10384:1;10377:15;10411:4;10408:1;10401:15;10427:228;10466:3;10494:10;10531:2;10528:1;10524:10;10561:2;10558:1;10554:10;10592:3;10588:2;10584:12;10579:3;10576:21;10573:47;;;10600:18;;:::i;:::-;10636:13;;10427:228;-1:-1:-1;;;;10427:228:1:o;10660:1163::-;11137:3;11175:6;11169:13;11191:53;11237:6;11232:3;11225:4;11217:6;11213:17;11191:53;:::i;:::-;11307:13;;11266:16;;;;11329:57;11307:13;11266:16;11363:4;11351:17;;11329:57;:::i;:::-;-1:-1:-1;;;11408:20:1;;11437:35;;;11497:13;;11519:66;11497:13;11571:2;11560:14;;11553:4;11541:17;;11519:66;:::i;:::-;-1:-1:-1;;;11648:2:1;11604:20;;;;11640:11;;;11633:32;11690:13;;11712:63;11690:13;11761:2;11753:11;;11746:4;11734:17;;11712:63;:::i;:::-;11795:17;11814:2;11791:26;;10660:1163;-1:-1:-1;;;;;;10660:1163:1:o;12038:112::-;12070:1;12096;12086:35;;12101:18;;:::i;:::-;-1:-1:-1;12135:9:1;;12038:112::o;12155:675::-;12463:66;12458:3;12451:79;12433:3;12559:6;12553:13;12575:62;12630:6;12625:2;12620:3;12616:12;12609:4;12601:6;12597:17;12575:62;:::i;:::-;12697:13;;12656:16;;;;12719:63;12697:13;12768:2;12760:11;;12753:4;12741:17;;12719:63;:::i;:::-;12802:17;12821:2;12798:26;;12155:675;-1:-1:-1;;;;12155:675:1:o;13238:489::-;-1:-1:-1;;;;;13507:15:1;;;13489:34;;13559:15;;13554:2;13539:18;;13532:43;13606:2;13591:18;;13584:34;;;13654:3;13649:2;13634:18;;13627:31;;;13432:4;;13675:46;;13701:19;;13693:6;13675:46;:::i;:::-;13667:54;13238:489;-1:-1:-1;;;;;;13238:489:1:o;13732:249::-;13801:6;13854:2;13842:9;13833:7;13829:23;13825:32;13822:52;;;13870:1;13867;13860:12;13822:52;13902:9;13896:16;13921:30;13945:5;13921:30;:::i;13986:435::-;-1:-1:-1;;;14243:3:1;14236:31;14218:3;14296:6;14290:13;14312:62;14367:6;14362:2;14357:3;14353:12;14346:4;14338:6;14334:17;14312:62;:::i;:::-;14394:16;;;;14412:2;14390:25;;13986:435;-1:-1:-1;;13986:435:1:o;14426:204::-;14464:3;14500:4;14497:1;14493:12;14532:4;14529:1;14525:12;14567:3;14561:4;14557:14;14552:3;14549:23;14546:49;;;14575:18;;:::i;:::-;14611:13;;14426:204;-1:-1:-1;;;14426:204:1:o

Swarm Source

ipfs://bfe2091eab73271d8570f1e94e517c2045e3e186d12bbc54b30a1a7e19175fa5

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.