ETH Price: $3,744.93 (+2.35%)
Gas: 7 Gwei

Contract

0x86351a00b58001e23978e19b44245e2b955Cca7A
 

Overview

ETH Balance

0.1104 ETH

Eth Value

$413.44 (@ $3,744.93/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Set Approval For...192248682024-02-14 7:58:1197 days ago1707897491IN
0x86351a00...b955Cca7A
0 ETH0.0008244117.66752348
Mint188021372023-12-17 0:18:23157 days ago1702772303IN
0x86351a00...b955Cca7A
0.0207 ETH0.0133459133.2314357
Mint186460362023-11-25 3:29:35179 days ago1700882975IN
0x86351a00...b955Cca7A
0.0138 ETH0.0054771719.51046402
Mint186380802023-11-24 0:44:35180 days ago1700786675IN
0x86351a00...b955Cca7A
0.0069 ETH0.0027362716.56792792
Mint179714272023-08-22 16:24:59273 days ago1692721499IN
0x86351a00...b955Cca7A
0.0069 ETH0.0101123161.2292673
Mint179714222023-08-22 16:23:59273 days ago1692721439IN
0x86351a00...b955Cca7A
0 ETH0.0028248662.74691486
Mint168093992023-03-12 3:52:35437 days ago1678593155IN
0x86351a00...b955Cca7A
0 ETH0.0008924721.86784337
Mint167161492023-02-27 1:04:59450 days ago1677459899IN
0x86351a00...b955Cca7A
0 ETH0.0009885124.22117207
Mint167161242023-02-27 0:59:59450 days ago1677459599IN
0x86351a00...b955Cca7A
0 ETH0.0009767623.93327394
Add Artist Mint ...166656332023-02-19 22:34:59457 days ago1676846099IN
0x86351a00...b955Cca7A
0 ETH0.0012916927.82804358
Safe Transfer Fr...165146332023-01-29 19:42:23478 days ago1675021343IN
0x86351a00...b955Cca7A
0 ETH0.0022688522.19380446
Mint164630192023-01-22 14:44:11485 days ago1674398651IN
0x86351a00...b955Cca7A
0.0069 ETH0.0023739514.13444258
Safe Transfer Fr...163087352023-01-01 1:49:35507 days ago1672537775IN
0x86351a00...b955Cca7A
0 ETH0.0015363115.16983634
Mint162393992022-12-22 9:38:47516 days ago1671701927IN
0x86351a00...b955Cca7A
0.0069 ETH0.0019818612
Safe Transfer Fr...161148342022-12-04 23:50:35534 days ago1670197835IN
0x86351a00...b955Cca7A
0 ETH0.0013136412.97114865
Mint161001522022-12-02 22:37:35536 days ago1670020655IN
0x86351a00...b955Cca7A
0.0069 ETH0.0019878912.03653163
Set Approval For...160753922022-11-29 11:36:35539 days ago1669721795IN
0x86351a00...b955Cca7A
0 ETH0.0005328311.41877427
Mint160706132022-11-28 19:35:59540 days ago1669664159IN
0x86351a00...b955Cca7A
0 ETH0.0093323614.95724955
Set Is Revealed160687682022-11-28 13:25:23540 days ago1669641923IN
0x86351a00...b955Cca7A
0 ETH0.0005881512.74710425
Set Contract URI160624892022-11-27 16:22:23541 days ago1669566143IN
0x86351a00...b955Cca7A
0 ETH0.0003852610.18747659
Mint160619862022-11-27 14:41:23541 days ago1669560083IN
0x86351a00...b955Cca7A
0.0069 ETH0.0004593811.25603676
Mint160619822022-11-27 14:40:35541 days ago1669560035IN
0x86351a00...b955Cca7A
0.0069 ETH0.0004781711.71652624
Mint160615732022-11-27 13:18:11541 days ago1669555091IN
0x86351a00...b955Cca7A
0 ETH0.0017737410.82131693
Mint160612622022-11-27 12:15:59541 days ago1669551359IN
0x86351a00...b955Cca7A
0.0069 ETH0.0019806311.99259992
Mint160579432022-11-27 1:10:23542 days ago1669511423IN
0x86351a00...b955Cca7A
0.0138 ETH0.0031930111.3744548
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SusSeagulls

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : SusSeagulls.sol
// ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡β–„β–„β–„¡¡¡
// ¡β–ˆβ–“β–ˆβ–€¡β–„β–„β–β–Œβ–β–ˆβ–€β–“¡¡¡¡¡β–“β–ˆβ–€β–€¡¡β–„β–“β–Œ¡β•₯β–“β–„¡¡β•₯β–ˆβ–ˆm¡¡β–“β–‘¡β–ˆβˆ©β–“β–„¡¡β–ˆm¡¡β–β–ˆβ–„β•¨βŒ‘¡¡
// ¡β–€β–ˆβ–Œ¡¡β–ˆβ–Œβ•‘β–ˆβ•¨β–ˆβ–„β”¡¡¡¡¡Jβ–€β–ˆβ–„β”¡β–ˆβ–“β–„¡β–ˆβ–ˆβ–ˆµ¡β–ˆβ–ŒAβ–„Hwβ–ˆβ–‘¡β–ˆβ–‘β–ˆβ–ˆ¡¡β–ˆβ–Œ¡¡¡β””β•¨β–ˆβ–ˆµ¡
// ¡¡;β•¨β–ˆβ–Œβ–ˆβ–Œeβ–ˆβ–’β”˜β–€β–ˆβ–„¡¡¡¡¡;β””β–“β–ˆ¡β–ˆβ–’¡¡β–ˆβ–ˆβ–ˆβ–ˆ¡β–ˆβ–Œβ•«β–ˆβ–ˆ¡β–ˆβ–Œβ–ˆβ–ˆβ–ˆβ•β–ˆβ–“β–Œβ–€β–ˆβ–“β–Œ¡β–„β–„β–„β–ˆβ–’¡
// ¡β•™β–ˆβ–ˆβ–ˆβ•¨β•™β–ˆβ–ˆβ–€β–€hβ–“β–ˆβ–Œ¡¡¡¡¡β–€β–ˆβ–ˆβ–€¡β–€β–€β–€β–€β–€β”¡β–€β–’¡β–€β–€β–€β–€β”¡β•¨β”˜¡¡¡¡¡¡¡¡¡¡¡β”˜β•¨β•¨¡¡¡
// ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
// A generative collection of 6,666 suspicious seagulls 
// by @cryptoboop
// dev @jahhweh
// SPDX-License-Identifier: CC0-1.0

pragma solidity ^0.8.0;

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 IERC2981 is IERC165 {
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

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

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, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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,
            "Address: insufficient balance"
        );

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

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

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

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

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

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

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

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

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

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

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _owners[tokenId];
        require(
            owner != address(0),
            "ERC721: owner query for nonexistent token"
        );
        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),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _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),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

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

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

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

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

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        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),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _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,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, 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(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;

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

    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721.balanceOf(owner),
            "ERC721Enumerable: owner index out of bounds"
        );
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721Enumerable.totalSupply(),
            "ERC721Enumerable: global index out of bounds"
        );
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
        private
    {
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

// 57656C6C206C6F6F6B7920686572652C2069662069742069736E2774205375737379204D63537573736572746F6E2E2E2E207768617420796F7520646F696E2073757373696E2061726F756E6420646F776E20686572653F
contract SusSeagulls is ERC721, ERC721Enumerable, Ownable {
    using Strings for uint256;

    string baseURI;
    string public baseExtension = ".json";
    uint256 public freeMint = 0.0 ether;
    uint256 public cost = 0.0069 ether;
    uint256 public maxSupply = 6666;
    uint256 public reservedSupply = 66;
    uint256 public timeDeployed;
    uint256 public allowMintingAfter = 0;
    bool public isPaused = true;
    bool public isRevealed = false;
    string public notRevealedUri;
    mapping(address => bool) public ArtistMintList;
    mapping(address => bool) public FrensMintList;
    uint96 royaltyFeesInBips;
    string public contractURI;
    address royaltyReceiver;

    constructor(
        string memory _name,
        string memory _symbol,
        uint256 _cost,
        uint256 _maxSupply,
        uint256 _reservedSupply,
        uint256 _allowMintingOn,
        string memory _initBaseURI,
        string memory _initNotRevealedUri,
        uint96 _royaltyFeesInBips,
        string memory _contractURI
        
    ) ERC721(_name, _symbol) {
        if (_allowMintingOn > block.timestamp) {
            allowMintingAfter = _allowMintingOn - block.timestamp;
        }
        cost = _cost;
        maxSupply = _maxSupply;
        reservedSupply = _reservedSupply;
        timeDeployed = block.timestamp;
        royaltyReceiver = msg.sender;
        setBaseURI(_initBaseURI);
        setNotRevealedURI(_initNotRevealedUri);
        royaltyFeesInBips = _royaltyFeesInBips;
        contractURI = _contractURI;
    }

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

    function mint(address _to, uint256 _mintAmount) public payable {
        require(
            block.timestamp >= timeDeployed + allowMintingAfter,
            "Minting is still turned off"
        );

        uint256 supply = totalSupply();
        require(!isPaused, "Minting is currently paused");
        require(_mintAmount > 0, "Mint must be greater than zero");
        require(supply + _mintAmount <= maxSupply - reservedSupply, "Only reserved mints are left");

        if (msg.sender != owner()) {
            if (ArtistMintList[msg.sender] == true) {
                require(ArtistMintList[msg.sender] = true, "You did not contribute to this project as an artist");
                require(_mintAmount == 5, "You must mint exactly 5");
                require(msg.value >= freeMint * _mintAmount, "Payment must be exactly 0 eth");
                ArtistMintList[msg.sender] = false;
            } 
            else if (FrensMintList[msg.sender] == true) {
                require(FrensMintList[msg.sender] = true, "You are not on the frens list");
                require(_mintAmount == 1, "You must mint exactly 1");
                require(msg.value >= freeMint * _mintAmount, "Payment must be exactly 0 eth");
                FrensMintList[msg.sender] = false;
            }
            else {
                require(msg.value >= cost * _mintAmount, "Not enough eth");
            }
        }

        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(_to, supply + i);
        }
    }

    function mintReserved(uint256 _mintAmount) public onlyOwner {
        uint256 supply = totalSupply();
        require(!isPaused);
        require(_mintAmount > 0);
        require(supply + _mintAmount <= maxSupply);
        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        if (isRevealed == false) {
            return notRevealedUri;
        }
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(
                    abi.encodePacked(
                        currentBaseURI,
                        tokenId.toString(),
                        baseExtension
                    )
                )
                : "";
    }

    function setIsRevealed(bool _state) public onlyOwner {
        isRevealed = _state;
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setReservedSupply(uint256 _setReservedSupply) public onlyOwner {
        reservedSupply = _setReservedSupply;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
        baseExtension = _newBaseExtension;
    }

    function setIsPaused(bool _state) public onlyOwner {
        isPaused = _state;
    }

    function addArtistMintList(address _user) public onlyOwner {
        ArtistMintList[_user] = true;
    }

    function removeArtistMintList(address _user) public onlyOwner {
        ArtistMintList[_user] = false;
    }

    function addFrensMintList(address _user) public onlyOwner {
        FrensMintList[_user] = true;
    }

    function removeFrensMintList(address _user) public onlyOwner {
        FrensMintList[_user] = false;
    }

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }

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

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return
            interfaceId == 0x2a55205a || super.supportsInterface(interfaceId);
    }

    function royaltyInfo(uint256 _tokenId, uint256 _cost)
        external
        view
        returns (address receiver, uint256 royaltyAmount)
    {
        return (royaltyReceiver, calculateRoyalty(_cost));
    }

    function calculateRoyalty(uint256 _cost) public view returns (uint256) {
        return (_cost / 10000) * royaltyFeesInBips;
    }

    function setRoyaltyInfo(address _royaltyReceiver, uint96 _royaltyFeesInBips)
        public
        onlyOwner
    {
        royaltyReceiver = _royaltyReceiver;
        royaltyFeesInBips = _royaltyFeesInBips;
    }

    function setContractURI(string calldata _contractURI) public onlyOwner {
        contractURI = _contractURI;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "london",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_reservedSupply","type":"uint256"},{"internalType":"uint256","name":"_allowMintingOn","type":"uint256"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"},{"internalType":"string","name":"_contractURI","type":"string"}],"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":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":"address","name":"","type":"address"}],"name":"ArtistMintList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"FrensMintList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addArtistMintList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addFrensMintList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowMintingAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"calculateRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeArtistMintList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFrensMintList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_setReservedSupply","type":"uint256"}],"name":"setReservedSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyReceiver","type":"address"},{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeDeployed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000476565b506000600d556618838370f34000600e55611a0a600f55604260105560006012556001601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff021916908315150217905550348015620000b557600080fd5b50604051620064c6380380620064c68339818101604052810190620000db919062000747565b89898160009080519060200190620000f592919062000476565b5080600190805190602001906200010e92919062000476565b50505062000131620001256200022860201b60201c565b6200023060201b60201c565b428511156200014f57428562000148919062000907565b6012819055505b87600e8190555086600f81905550856010819055504260118190555033601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001bd84620002f660201b60201c565b620001ce83620003a160201b60201c565b81601760006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080601890805190602001906200021792919062000476565b505050505050505050505062000a2a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003066200022860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200032c6200044c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000385576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037c90620009a3565b60405180910390fd5b80600b90805190602001906200039d92919062000476565b5050565b620003b16200022860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003d76200044c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000430576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042790620009a3565b60405180910390fd5b80601490805190602001906200044892919062000476565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200048490620009f4565b90600052602060002090601f016020900481019282620004a85760008555620004f4565b82601f10620004c357805160ff1916838001178555620004f4565b82800160010185558215620004f4579182015b82811115620004f3578251825591602001919060010190620004d6565b5b50905062000503919062000507565b5090565b5b808211156200052257600081600090555060010162000508565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200058f8262000544565b810181811067ffffffffffffffff82111715620005b157620005b062000555565b5b80604052505050565b6000620005c662000526565b9050620005d4828262000584565b919050565b600067ffffffffffffffff821115620005f757620005f662000555565b5b620006028262000544565b9050602081019050919050565b60005b838110156200062f57808201518184015260208101905062000612565b838111156200063f576000848401525b50505050565b60006200065c6200065684620005d9565b620005ba565b9050828152602081018484840111156200067b576200067a6200053f565b5b620006888482856200060f565b509392505050565b600082601f830112620006a857620006a76200053a565b5b8151620006ba84826020860162000645565b91505092915050565b6000819050919050565b620006d881620006c3565b8114620006e457600080fd5b50565b600081519050620006f881620006cd565b92915050565b60006bffffffffffffffffffffffff82169050919050565b6200072181620006fe565b81146200072d57600080fd5b50565b600081519050620007418162000716565b92915050565b6000806000806000806000806000806101408b8d0312156200076e576200076d62000530565b5b60008b015167ffffffffffffffff8111156200078f576200078e62000535565b5b6200079d8d828e0162000690565b9a505060208b015167ffffffffffffffff811115620007c157620007c062000535565b5b620007cf8d828e0162000690565b9950506040620007e28d828e01620006e7565b9850506060620007f58d828e01620006e7565b9750506080620008088d828e01620006e7565b96505060a06200081b8d828e01620006e7565b95505060c08b015167ffffffffffffffff8111156200083f576200083e62000535565b5b6200084d8d828e0162000690565b94505060e08b015167ffffffffffffffff81111562000871576200087062000535565b5b6200087f8d828e0162000690565b935050610100620008938d828e0162000730565b9250506101208b015167ffffffffffffffff811115620008b857620008b762000535565b5b620008c68d828e0162000690565b9150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200091482620006c3565b91506200092183620006c3565b925082821015620009375762000936620008d8565b5b828203905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200098b60208362000942565b9150620009988262000953565b602082019050919050565b60006020820190508181036000830152620009be816200097c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a0d57607f821691505b6020821081141562000a245762000a23620009c5565b5b50919050565b615a8c8062000a3a6000396000f3fe6080604052600436106102e45760003560e01c806355f804b311610190578063af850043116100dc578063d6eb510211610095578063e985e9c51161006f578063e985e9c514610b41578063f2c4ce1e14610b7e578063f2fde38b14610ba7578063fc9525f014610bd0576102e4565b8063d6eb510214610ab0578063da3ef23f14610aed578063e8a3d48514610b16576102e4565b8063af850043146109a0578063b187bd26146109c9578063b88d4fde146109f4578063c668286214610a1d578063c87b56dd14610a48578063d5abeb0114610a85576102e4565b80638da5cb5b116101495780639a5d140b116101235780639a5d140b146108e8578063a22cb46514610911578063a2e696131461093a578063aa3b1b3014610977576102e4565b80638da5cb5b14610869578063938e3d7b1461089457806395d89b41146108bd576102e4565b806355f804b3146107595780635b70ea9f146107825780636352211e146107ad57806370a08231146107ea578063715018a614610827578063872bdcdb1461083e576102e4565b80632a55205a1161024f578063438b63001161020857806349a5980a116101e257806349a5980a1461069f5780634f6ccce7146106c857806354214f69146107055780635428ba7e14610730576102e4565b8063438b63001461060e57806344a0d68a1461064b57806344d19d2b14610674576102e4565b80632a55205a146105075780632f745c59146105455780632f9928d5146105825780633ccfd60b146105bf57806340c10f19146105c957806342842e0e146105e5576102e4565b806313faede6116102a157806313faede61461040b57806318160ddd1461043657806319188c35146104615780631e13f86b1461048c57806323b872dd146104b5578063240976bf146104de576102e4565b806301ffc9a7146102e957806302fa7c471461032657806306fdde031461034f578063081812fc1461037a578063081c8c44146103b7578063095ea7b3146103e2575b600080fd5b3480156102f557600080fd5b50610310600480360381019061030b9190613e8e565b610bf9565b60405161031d9190613ed6565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613f93565b610c3b565b005b34801561035b57600080fd5b50610364610d2d565b604051610371919061406c565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906140c4565b610dbf565b6040516103ae9190614100565b60405180910390f35b3480156103c357600080fd5b506103cc610e44565b6040516103d9919061406c565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061411b565b610ed2565b005b34801561041757600080fd5b50610420610fea565b60405161042d919061416a565b60405180910390f35b34801561044257600080fd5b5061044b610ff0565b604051610458919061416a565b60405180910390f35b34801561046d57600080fd5b50610476610ffd565b604051610483919061416a565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906140c4565b611003565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190614185565b611089565b005b3480156104ea57600080fd5b5061050560048036038101906105009190614204565b6110e9565b005b34801561051357600080fd5b5061052e60048036038101906105299190614231565b611182565b60405161053c929190614271565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061411b565b6111bc565b604051610579919061416a565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061429a565b611261565b6040516105b69190613ed6565b60405180910390f35b6105c7611281565b005b6105e360048036038101906105de919061411b565b611376565b005b3480156105f157600080fd5b5061060c60048036038101906106079190614185565b61194b565b005b34801561061a57600080fd5b506106356004803603810190610630919061429a565b61196b565b6040516106429190614385565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906140c4565b611a19565b005b34801561068057600080fd5b50610689611a9f565b604051610696919061416a565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190614204565b611aa5565b005b3480156106d457600080fd5b506106ef60048036038101906106ea91906140c4565b611b3e565b6040516106fc919061416a565b60405180910390f35b34801561071157600080fd5b5061071a611baf565b6040516107279190613ed6565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061429a565b611bc2565b005b34801561076557600080fd5b50610780600480360381019061077b91906144dc565b611c99565b005b34801561078e57600080fd5b50610797611d2f565b6040516107a4919061416a565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906140c4565b611d35565b6040516107e19190614100565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c919061429a565b611de7565b60405161081e919061416a565b60405180910390f35b34801561083357600080fd5b5061083c611e9f565b005b34801561084a57600080fd5b50610853611f27565b604051610860919061416a565b60405180910390f35b34801561087557600080fd5b5061087e611f2d565b60405161088b9190614100565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190614585565b611f57565b005b3480156108c957600080fd5b506108d2611fe9565b6040516108df919061406c565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a91906140c4565b61207b565b005b34801561091d57600080fd5b50610938600480360381019061093391906145d2565b61217f565b005b34801561094657600080fd5b50610961600480360381019061095c91906140c4565b612300565b60405161096e919061416a565b60405180910390f35b34801561098357600080fd5b5061099e6004803603810190610999919061429a565b61234a565b005b3480156109ac57600080fd5b506109c760048036038101906109c2919061429a565b612421565b005b3480156109d557600080fd5b506109de6124f8565b6040516109eb9190613ed6565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a1691906146b3565b61250b565b005b348015610a2957600080fd5b50610a3261256d565b604051610a3f919061406c565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a91906140c4565b6125fb565b604051610a7c919061406c565b60405180910390f35b348015610a9157600080fd5b50610a9a612754565b604051610aa7919061416a565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad2919061429a565b61275a565b604051610ae49190613ed6565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f91906144dc565b61277a565b005b348015610b2257600080fd5b50610b2b612810565b604051610b38919061406c565b60405180910390f35b348015610b4d57600080fd5b50610b686004803603810190610b639190614736565b61289e565b604051610b759190613ed6565b60405180910390f35b348015610b8a57600080fd5b50610ba56004803603810190610ba091906144dc565b612932565b005b348015610bb357600080fd5b50610bce6004803603810190610bc9919061429a565b6129c8565b005b348015610bdc57600080fd5b50610bf76004803603810190610bf2919061429a565b612ac0565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c345750610c3382612b97565b5b9050919050565b610c43612c11565b73ffffffffffffffffffffffffffffffffffffffff16610c61611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae906147c2565b60405180910390fd5b81601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505050565b606060008054610d3c90614811565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6890614811565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b5050505050905090565b6000610dca82612c19565b610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e00906148b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60148054610e5190614811565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7d90614811565b8015610eca5780601f10610e9f57610100808354040283529160200191610eca565b820191906000526020600020905b815481529060010190602001808311610ead57829003601f168201915b505050505081565b6000610edd82611d35565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590614947565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f6d612c11565b73ffffffffffffffffffffffffffffffffffffffff161480610f9c5750610f9b81610f96612c11565b61289e565b5b610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906149d9565b60405180910390fd5b610fe58383612c85565b505050565b600e5481565b6000600880549050905090565b60115481565b61100b612c11565b73ffffffffffffffffffffffffffffffffffffffff16611029611f2d565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906147c2565b60405180910390fd5b8060108190555050565b61109a611094612c11565b82612d3e565b6110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090614a6b565b60405180910390fd5b6110e4838383612e1c565b505050565b6110f1612c11565b73ffffffffffffffffffffffffffffffffffffffff1661110f611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c906147c2565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111b184612300565b915091509250929050565b60006111c783611de7565b8210611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90614afd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b611289612c11565b73ffffffffffffffffffffffffffffffffffffffff166112a7611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f4906147c2565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161132390614b4e565b60006040518083038185875af1925050503d8060008114611360576040519150601f19603f3d011682016040523d82523d6000602084013e611365565b606091505b505090508061137357600080fd5b50565b6012546011546113869190614b92565b4210156113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614c34565b60405180910390fd5b60006113d2610ff0565b9050601360009054906101000a900460ff1615611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90614ca0565b60405180910390fd5b60008211611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90614d0c565b60405180910390fd5b601054600f546114779190614d2c565b82826114839190614b92565b11156114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90614dac565b60405180910390fd5b6114cc611f2d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190f5760011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156116dd576001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790556115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614e3e565b60405180910390fd5b60058214611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614eaa565b60405180910390fd5b81600d5461163e9190614eca565b341015611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790614f70565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061190e565b60011515601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156118bc576001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790556117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c390614fdc565b60405180910390fd5b6001821461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690615048565b60405180910390fd5b81600d5461181d9190614eca565b34101561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614f70565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061190d565b81600e546118ca9190614eca565b34101561190c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611903906150b4565b60405180910390fd5b5b5b5b6000600190505b8281116119455761193284828461192d9190614b92565b613078565b808061193d906150d4565b915050611916565b50505050565b6119668383836040518060200160405280600081525061250b565b505050565b6060600061197883611de7565b905060008167ffffffffffffffff811115611996576119956143b1565b5b6040519080825280602002602001820160405280156119c45781602001602082028036833780820191505090505b50905060005b82811015611a0e576119dc85826111bc565b8282815181106119ef576119ee61511d565b5b6020026020010181815250508080611a06906150d4565b9150506119ca565b508092505050919050565b611a21612c11565b73ffffffffffffffffffffffffffffffffffffffff16611a3f611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906147c2565b60405180910390fd5b80600e8190555050565b60105481565b611aad612c11565b73ffffffffffffffffffffffffffffffffffffffff16611acb611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b18906147c2565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b6000611b48610ff0565b8210611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b80906151be565b60405180910390fd5b60088281548110611b9d57611b9c61511d565b5b90600052602060002001549050919050565b601360019054906101000a900460ff1681565b611bca612c11565b73ffffffffffffffffffffffffffffffffffffffff16611be8611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c35906147c2565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ca1612c11565b73ffffffffffffffffffffffffffffffffffffffff16611cbf611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c906147c2565b60405180910390fd5b80600b9080519060200190611d2b929190613cf9565b5050565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590615250565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906152e2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ea7612c11565b73ffffffffffffffffffffffffffffffffffffffff16611ec5611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f12906147c2565b60405180910390fd5b611f256000613096565b565b60125481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f5f612c11565b73ffffffffffffffffffffffffffffffffffffffff16611f7d611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca906147c2565b60405180910390fd5b818160189190611fe4929190613d7f565b505050565b606060018054611ff890614811565b80601f016020809104026020016040519081016040528092919081815260200182805461202490614811565b80156120715780601f1061204657610100808354040283529160200191612071565b820191906000526020600020905b81548152906001019060200180831161205457829003601f168201915b5050505050905090565b612083612c11565b73ffffffffffffffffffffffffffffffffffffffff166120a1611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee906147c2565b60405180910390fd5b6000612101610ff0565b9050601360009054906101000a900460ff161561211d57600080fd5b6000821161212a57600080fd5b600f5482826121399190614b92565b111561214457600080fd5b6000600190505b82811161217a576121673382846121629190614b92565b613078565b8080612172906150d4565b91505061214b565b505050565b612187612c11565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ec9061534e565b60405180910390fd5b8060056000612202612c11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122af612c11565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122f49190613ed6565b60405180910390a35050565b6000601760009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1661271083612339919061539d565b6123439190614eca565b9050919050565b612352612c11565b73ffffffffffffffffffffffffffffffffffffffff16612370611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd906147c2565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612429612c11565b73ffffffffffffffffffffffffffffffffffffffff16612447611f2d565b73ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612494906147c2565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601360009054906101000a900460ff1681565b61251c612516612c11565b83612d3e565b61255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614a6b565b60405180910390fd5b6125678484848461315c565b50505050565b600c805461257a90614811565b80601f01602080910402602001604051908101604052809291908181526020018280546125a690614811565b80156125f35780601f106125c8576101008083540402835291602001916125f3565b820191906000526020600020905b8154815290600101906020018083116125d657829003601f168201915b505050505081565b606061260682612c19565b612645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263c90615440565b60405180910390fd5b60001515601360019054906101000a900460ff16151514156126f3576014805461266e90614811565b80601f016020809104026020016040519081016040528092919081815260200182805461269a90614811565b80156126e75780601f106126bc576101008083540402835291602001916126e7565b820191906000526020600020905b8154815290600101906020018083116126ca57829003601f168201915b5050505050905061274f565b60006126fd6131b8565b9050600081511161271d576040518060200160405280600081525061274b565b806127278461324a565b600c60405160200161273b93929190615530565b6040516020818303038152906040525b9150505b919050565b600f5481565b60156020528060005260406000206000915054906101000a900460ff1681565b612782612c11565b73ffffffffffffffffffffffffffffffffffffffff166127a0611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906147c2565b60405180910390fd5b80600c908051906020019061280c929190613cf9565b5050565b6018805461281d90614811565b80601f016020809104026020016040519081016040528092919081815260200182805461284990614811565b80156128965780601f1061286b57610100808354040283529160200191612896565b820191906000526020600020905b81548152906001019060200180831161287957829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61293a612c11565b73ffffffffffffffffffffffffffffffffffffffff16612958611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146129ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a5906147c2565b60405180910390fd5b80601490805190602001906129c4929190613cf9565b5050565b6129d0612c11565b73ffffffffffffffffffffffffffffffffffffffff166129ee611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906147c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab906155d3565b60405180910390fd5b612abd81613096565b50565b612ac8612c11565b73ffffffffffffffffffffffffffffffffffffffff16612ae6611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614612b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b33906147c2565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c0a5750612c09826133ab565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cf883611d35565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d4982612c19565b612d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7f90615665565b60405180910390fd5b6000612d9383611d35565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e0257508373ffffffffffffffffffffffffffffffffffffffff16612dea84610dbf565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e135750612e12818561289e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e3c82611d35565b73ffffffffffffffffffffffffffffffffffffffff1614612e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e89906156f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef990615789565b60405180910390fd5b612f0d83838361348d565b612f18600082612c85565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f689190614d2c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fbf9190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61309282826040518060200160405280600081525061349d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613167848484612e1c565b613173848484846134f8565b6131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a99061581b565b60405180910390fd5b50505050565b6060600b80546131c790614811565b80601f01602080910402602001604051908101604052809291908181526020018280546131f390614811565b80156132405780601f1061321557610100808354040283529160200191613240565b820191906000526020600020905b81548152906001019060200180831161322357829003601f168201915b5050505050905090565b60606000821415613292576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133a6565b600082905060005b600082146132c45780806132ad906150d4565b915050600a826132bd919061539d565b915061329a565b60008167ffffffffffffffff8111156132e0576132df6143b1565b5b6040519080825280601f01601f1916602001820160405280156133125781602001600182028036833780820191505090505b5090505b6000851461339f5760018261332b9190614d2c565b9150600a8561333a919061583b565b60306133469190614b92565b60f81b81838151811061335c5761335b61511d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613398919061539d565b9450613316565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061347657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061348657506134858261368f565b5b9050919050565b6134988383836136f9565b505050565b6134a7838361380d565b6134b460008484846134f8565b6134f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ea9061581b565b60405180910390fd5b505050565b60006135198473ffffffffffffffffffffffffffffffffffffffff166139db565b15613682578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613542612c11565b8786866040518563ffffffff1660e01b815260040161356494939291906158c1565b602060405180830381600087803b15801561357e57600080fd5b505af19250505080156135af57506040513d601f19601f820116820180604052508101906135ac9190615922565b60015b613632573d80600081146135df576040519150601f19603f3d011682016040523d82523d6000602084013e6135e4565b606091505b5060008151141561362a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136219061581b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613687565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6137048383836139ee565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561374757613742816139f3565b613786565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613785576137848382613a3c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137c9576137c481613ba9565b613808565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613807576138068282613c7a565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561387d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138749061599b565b60405180910390fd5b61388681612c19565b156138c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138bd90615a07565b60405180910390fd5b6138d26000838361348d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139229190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613a4984611de7565b613a539190614d2c565b9050600060076000848152602001908152602001600020549050818114613b38576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613bbd9190614d2c565b9050600060096000848152602001908152602001600020549050600060088381548110613bed57613bec61511d565b5b906000526020600020015490508060088381548110613c0f57613c0e61511d565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613c5e57613c5d615a27565b5b6001900381819060005260206000200160009055905550505050565b6000613c8583611de7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613d0590614811565b90600052602060002090601f016020900481019282613d275760008555613d6e565b82601f10613d4057805160ff1916838001178555613d6e565b82800160010185558215613d6e579182015b82811115613d6d578251825591602001919060010190613d52565b5b509050613d7b9190613e05565b5090565b828054613d8b90614811565b90600052602060002090601f016020900481019282613dad5760008555613df4565b82601f10613dc657803560ff1916838001178555613df4565b82800160010185558215613df4579182015b82811115613df3578235825591602001919060010190613dd8565b5b509050613e019190613e05565b5090565b5b80821115613e1e576000816000905550600101613e06565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613e6b81613e36565b8114613e7657600080fd5b50565b600081359050613e8881613e62565b92915050565b600060208284031215613ea457613ea3613e2c565b5b6000613eb284828501613e79565b91505092915050565b60008115159050919050565b613ed081613ebb565b82525050565b6000602082019050613eeb6000830184613ec7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1c82613ef1565b9050919050565b613f2c81613f11565b8114613f3757600080fd5b50565b600081359050613f4981613f23565b92915050565b60006bffffffffffffffffffffffff82169050919050565b613f7081613f4f565b8114613f7b57600080fd5b50565b600081359050613f8d81613f67565b92915050565b60008060408385031215613faa57613fa9613e2c565b5b6000613fb885828601613f3a565b9250506020613fc985828601613f7e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561400d578082015181840152602081019050613ff2565b8381111561401c576000848401525b50505050565b6000601f19601f8301169050919050565b600061403e82613fd3565b6140488185613fde565b9350614058818560208601613fef565b61406181614022565b840191505092915050565b600060208201905081810360008301526140868184614033565b905092915050565b6000819050919050565b6140a18161408e565b81146140ac57600080fd5b50565b6000813590506140be81614098565b92915050565b6000602082840312156140da576140d9613e2c565b5b60006140e8848285016140af565b91505092915050565b6140fa81613f11565b82525050565b600060208201905061411560008301846140f1565b92915050565b6000806040838503121561413257614131613e2c565b5b600061414085828601613f3a565b9250506020614151858286016140af565b9150509250929050565b6141648161408e565b82525050565b600060208201905061417f600083018461415b565b92915050565b60008060006060848603121561419e5761419d613e2c565b5b60006141ac86828701613f3a565b93505060206141bd86828701613f3a565b92505060406141ce868287016140af565b9150509250925092565b6141e181613ebb565b81146141ec57600080fd5b50565b6000813590506141fe816141d8565b92915050565b60006020828403121561421a57614219613e2c565b5b6000614228848285016141ef565b91505092915050565b6000806040838503121561424857614247613e2c565b5b6000614256858286016140af565b9250506020614267858286016140af565b9150509250929050565b600060408201905061428660008301856140f1565b614293602083018461415b565b9392505050565b6000602082840312156142b0576142af613e2c565b5b60006142be84828501613f3a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142fc8161408e565b82525050565b600061430e83836142f3565b60208301905092915050565b6000602082019050919050565b6000614332826142c7565b61433c81856142d2565b9350614347836142e3565b8060005b8381101561437857815161435f8882614302565b975061436a8361431a565b92505060018101905061434b565b5085935050505092915050565b6000602082019050818103600083015261439f8184614327565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6143e982614022565b810181811067ffffffffffffffff82111715614408576144076143b1565b5b80604052505050565b600061441b613e22565b905061442782826143e0565b919050565b600067ffffffffffffffff821115614447576144466143b1565b5b61445082614022565b9050602081019050919050565b82818337600083830152505050565b600061447f61447a8461442c565b614411565b90508281526020810184848401111561449b5761449a6143ac565b5b6144a684828561445d565b509392505050565b600082601f8301126144c3576144c26143a7565b5b81356144d384826020860161446c565b91505092915050565b6000602082840312156144f2576144f1613e2c565b5b600082013567ffffffffffffffff8111156145105761450f613e31565b5b61451c848285016144ae565b91505092915050565b600080fd5b600080fd5b60008083601f840112614545576145446143a7565b5b8235905067ffffffffffffffff81111561456257614561614525565b5b60208301915083600182028301111561457e5761457d61452a565b5b9250929050565b6000806020838503121561459c5761459b613e2c565b5b600083013567ffffffffffffffff8111156145ba576145b9613e31565b5b6145c68582860161452f565b92509250509250929050565b600080604083850312156145e9576145e8613e2c565b5b60006145f785828601613f3a565b9250506020614608858286016141ef565b9150509250929050565b600067ffffffffffffffff82111561462d5761462c6143b1565b5b61463682614022565b9050602081019050919050565b600061465661465184614612565b614411565b905082815260208101848484011115614672576146716143ac565b5b61467d84828561445d565b509392505050565b600082601f83011261469a576146996143a7565b5b81356146aa848260208601614643565b91505092915050565b600080600080608085870312156146cd576146cc613e2c565b5b60006146db87828801613f3a565b94505060206146ec87828801613f3a565b93505060406146fd878288016140af565b925050606085013567ffffffffffffffff81111561471e5761471d613e31565b5b61472a87828801614685565b91505092959194509250565b6000806040838503121561474d5761474c613e2c565b5b600061475b85828601613f3a565b925050602061476c85828601613f3a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147ac602083613fde565b91506147b782614776565b602082019050919050565b600060208201905081810360008301526147db8161479f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482957607f821691505b6020821081141561483d5761483c6147e2565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061489f602c83613fde565b91506148aa82614843565b604082019050919050565b600060208201905081810360008301526148ce81614892565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614931602183613fde565b915061493c826148d5565b604082019050919050565b6000602082019050818103600083015261496081614924565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006149c3603883613fde565b91506149ce82614967565b604082019050919050565b600060208201905081810360008301526149f2816149b6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614a55603183613fde565b9150614a60826149f9565b604082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614ae7602b83613fde565b9150614af282614a8b565b604082019050919050565b60006020820190508181036000830152614b1681614ada565b9050919050565b600081905092915050565b50565b6000614b38600083614b1d565b9150614b4382614b28565b600082019050919050565b6000614b5982614b2b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b9d8261408e565b9150614ba88361408e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bdd57614bdc614b63565b5b828201905092915050565b7f4d696e74696e67206973207374696c6c207475726e6564206f66660000000000600082015250565b6000614c1e601b83613fde565b9150614c2982614be8565b602082019050919050565b60006020820190508181036000830152614c4d81614c11565b9050919050565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b6000614c8a601b83613fde565b9150614c9582614c54565b602082019050919050565b60006020820190508181036000830152614cb981614c7d565b9050919050565b7f4d696e74206d7573742062652067726561746572207468616e207a65726f0000600082015250565b6000614cf6601e83613fde565b9150614d0182614cc0565b602082019050919050565b60006020820190508181036000830152614d2581614ce9565b9050919050565b6000614d378261408e565b9150614d428361408e565b925082821015614d5557614d54614b63565b5b828203905092915050565b7f4f6e6c79207265736572766564206d696e747320617265206c65667400000000600082015250565b6000614d96601c83613fde565b9150614da182614d60565b602082019050919050565b60006020820190508181036000830152614dc581614d89565b9050919050565b7f596f7520646964206e6f7420636f6e7472696275746520746f2074686973207060008201527f726f6a65637420617320616e2061727469737400000000000000000000000000602082015250565b6000614e28603383613fde565b9150614e3382614dcc565b604082019050919050565b60006020820190508181036000830152614e5781614e1b565b9050919050565b7f596f75206d757374206d696e742065786163746c792035000000000000000000600082015250565b6000614e94601783613fde565b9150614e9f82614e5e565b602082019050919050565b60006020820190508181036000830152614ec381614e87565b9050919050565b6000614ed58261408e565b9150614ee08361408e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1957614f18614b63565b5b828202905092915050565b7f5061796d656e74206d7573742062652065786163746c79203020657468000000600082015250565b6000614f5a601d83613fde565b9150614f6582614f24565b602082019050919050565b60006020820190508181036000830152614f8981614f4d565b9050919050565b7f596f7520617265206e6f74206f6e20746865206672656e73206c697374000000600082015250565b6000614fc6601d83613fde565b9150614fd182614f90565b602082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b7f596f75206d757374206d696e742065786163746c792031000000000000000000600082015250565b6000615032601783613fde565b915061503d82614ffc565b602082019050919050565b6000602082019050818103600083015261506181615025565b9050919050565b7f4e6f7420656e6f75676820657468000000000000000000000000000000000000600082015250565b600061509e600e83613fde565b91506150a982615068565b602082019050919050565b600060208201905081810360008301526150cd81615091565b9050919050565b60006150df8261408e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561511257615111614b63565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006151a8602c83613fde565b91506151b38261514c565b604082019050919050565b600060208201905081810360008301526151d78161519b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061523a602983613fde565b9150615245826151de565b604082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006152cc602a83613fde565b91506152d782615270565b604082019050919050565b600060208201905081810360008301526152fb816152bf565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615338601983613fde565b915061534382615302565b602082019050919050565b600060208201905081810360008301526153678161532b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153a88261408e565b91506153b38361408e565b9250826153c3576153c261536e565b5b828204905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061542a602f83613fde565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b9050919050565b600081905092915050565b600061547682613fd3565b6154808185615460565b9350615490818560208601613fef565b80840191505092915050565b60008190508160005260206000209050919050565b600081546154be81614811565b6154c88186615460565b945060018216600081146154e357600181146154f457615527565b60ff19831686528186019350615527565b6154fd8561549c565b60005b8381101561551f57815481890152600182019150602081019050615500565b838801955050505b50505092915050565b600061553c828661546b565b9150615548828561546b565b915061555482846154b1565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155bd602683613fde565b91506155c882615561565b604082019050919050565b600060208201905081810360008301526155ec816155b0565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061564f602c83613fde565b915061565a826155f3565b604082019050919050565b6000602082019050818103600083015261567e81615642565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006156e1602983613fde565b91506156ec82615685565b604082019050919050565b60006020820190508181036000830152615710816156d4565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615773602483613fde565b915061577e82615717565b604082019050919050565b600060208201905081810360008301526157a281615766565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615805603283613fde565b9150615810826157a9565b604082019050919050565b60006020820190508181036000830152615834816157f8565b9050919050565b60006158468261408e565b91506158518361408e565b9250826158615761586061536e565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006158938261586c565b61589d8185615877565b93506158ad818560208601613fef565b6158b681614022565b840191505092915050565b60006080820190506158d660008301876140f1565b6158e360208301866140f1565b6158f0604083018561415b565b81810360608301526159028184615888565b905095945050505050565b60008151905061591c81613e62565b92915050565b60006020828403121561593857615937613e2c565b5b60006159468482850161590d565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615985602083613fde565b91506159908261594f565b602082019050919050565b600060208201905081810360008301526159b481615978565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006159f1601c83613fde565b91506159fc826159bb565b602082019050919050565b60006020820190508181036000830152615a20816159e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220c9de5a5f67c3a57014b0643d147cf8b47e6c16cded2207324fba8d30ca4739de64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000018838370f340000000000000000000000000000000000000000000000000000000000000001a0a0000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000006357ff3900000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000c5375732053656167756c6c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000547554c4c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5375586954546b416136474e35347470727a334a7a7476616b31714764383639396b4670747a796765346b6d2f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5375586954546b416136474e35347470727a334a7a7476616b31714764383639396b4670747a796765346b6d00000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d617168616f5439375653685a754b6e44555a7852734755536a42677a553545484d41555662537a64447a6d440000000000000000000000

Deployed Bytecode

0x6080604052600436106102e45760003560e01c806355f804b311610190578063af850043116100dc578063d6eb510211610095578063e985e9c51161006f578063e985e9c514610b41578063f2c4ce1e14610b7e578063f2fde38b14610ba7578063fc9525f014610bd0576102e4565b8063d6eb510214610ab0578063da3ef23f14610aed578063e8a3d48514610b16576102e4565b8063af850043146109a0578063b187bd26146109c9578063b88d4fde146109f4578063c668286214610a1d578063c87b56dd14610a48578063d5abeb0114610a85576102e4565b80638da5cb5b116101495780639a5d140b116101235780639a5d140b146108e8578063a22cb46514610911578063a2e696131461093a578063aa3b1b3014610977576102e4565b80638da5cb5b14610869578063938e3d7b1461089457806395d89b41146108bd576102e4565b806355f804b3146107595780635b70ea9f146107825780636352211e146107ad57806370a08231146107ea578063715018a614610827578063872bdcdb1461083e576102e4565b80632a55205a1161024f578063438b63001161020857806349a5980a116101e257806349a5980a1461069f5780634f6ccce7146106c857806354214f69146107055780635428ba7e14610730576102e4565b8063438b63001461060e57806344a0d68a1461064b57806344d19d2b14610674576102e4565b80632a55205a146105075780632f745c59146105455780632f9928d5146105825780633ccfd60b146105bf57806340c10f19146105c957806342842e0e146105e5576102e4565b806313faede6116102a157806313faede61461040b57806318160ddd1461043657806319188c35146104615780631e13f86b1461048c57806323b872dd146104b5578063240976bf146104de576102e4565b806301ffc9a7146102e957806302fa7c471461032657806306fdde031461034f578063081812fc1461037a578063081c8c44146103b7578063095ea7b3146103e2575b600080fd5b3480156102f557600080fd5b50610310600480360381019061030b9190613e8e565b610bf9565b60405161031d9190613ed6565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613f93565b610c3b565b005b34801561035b57600080fd5b50610364610d2d565b604051610371919061406c565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c91906140c4565b610dbf565b6040516103ae9190614100565b60405180910390f35b3480156103c357600080fd5b506103cc610e44565b6040516103d9919061406c565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061411b565b610ed2565b005b34801561041757600080fd5b50610420610fea565b60405161042d919061416a565b60405180910390f35b34801561044257600080fd5b5061044b610ff0565b604051610458919061416a565b60405180910390f35b34801561046d57600080fd5b50610476610ffd565b604051610483919061416a565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906140c4565b611003565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190614185565b611089565b005b3480156104ea57600080fd5b5061050560048036038101906105009190614204565b6110e9565b005b34801561051357600080fd5b5061052e60048036038101906105299190614231565b611182565b60405161053c929190614271565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061411b565b6111bc565b604051610579919061416a565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061429a565b611261565b6040516105b69190613ed6565b60405180910390f35b6105c7611281565b005b6105e360048036038101906105de919061411b565b611376565b005b3480156105f157600080fd5b5061060c60048036038101906106079190614185565b61194b565b005b34801561061a57600080fd5b506106356004803603810190610630919061429a565b61196b565b6040516106429190614385565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d91906140c4565b611a19565b005b34801561068057600080fd5b50610689611a9f565b604051610696919061416a565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190614204565b611aa5565b005b3480156106d457600080fd5b506106ef60048036038101906106ea91906140c4565b611b3e565b6040516106fc919061416a565b60405180910390f35b34801561071157600080fd5b5061071a611baf565b6040516107279190613ed6565b60405180910390f35b34801561073c57600080fd5b506107576004803603810190610752919061429a565b611bc2565b005b34801561076557600080fd5b50610780600480360381019061077b91906144dc565b611c99565b005b34801561078e57600080fd5b50610797611d2f565b6040516107a4919061416a565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906140c4565b611d35565b6040516107e19190614100565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c919061429a565b611de7565b60405161081e919061416a565b60405180910390f35b34801561083357600080fd5b5061083c611e9f565b005b34801561084a57600080fd5b50610853611f27565b604051610860919061416a565b60405180910390f35b34801561087557600080fd5b5061087e611f2d565b60405161088b9190614100565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190614585565b611f57565b005b3480156108c957600080fd5b506108d2611fe9565b6040516108df919061406c565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a91906140c4565b61207b565b005b34801561091d57600080fd5b50610938600480360381019061093391906145d2565b61217f565b005b34801561094657600080fd5b50610961600480360381019061095c91906140c4565b612300565b60405161096e919061416a565b60405180910390f35b34801561098357600080fd5b5061099e6004803603810190610999919061429a565b61234a565b005b3480156109ac57600080fd5b506109c760048036038101906109c2919061429a565b612421565b005b3480156109d557600080fd5b506109de6124f8565b6040516109eb9190613ed6565b60405180910390f35b348015610a0057600080fd5b50610a1b6004803603810190610a1691906146b3565b61250b565b005b348015610a2957600080fd5b50610a3261256d565b604051610a3f919061406c565b60405180910390f35b348015610a5457600080fd5b50610a6f6004803603810190610a6a91906140c4565b6125fb565b604051610a7c919061406c565b60405180910390f35b348015610a9157600080fd5b50610a9a612754565b604051610aa7919061416a565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad2919061429a565b61275a565b604051610ae49190613ed6565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f91906144dc565b61277a565b005b348015610b2257600080fd5b50610b2b612810565b604051610b38919061406c565b60405180910390f35b348015610b4d57600080fd5b50610b686004803603810190610b639190614736565b61289e565b604051610b759190613ed6565b60405180910390f35b348015610b8a57600080fd5b50610ba56004803603810190610ba091906144dc565b612932565b005b348015610bb357600080fd5b50610bce6004803603810190610bc9919061429a565b6129c8565b005b348015610bdc57600080fd5b50610bf76004803603810190610bf2919061429a565b612ac0565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c345750610c3382612b97565b5b9050919050565b610c43612c11565b73ffffffffffffffffffffffffffffffffffffffff16610c61611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae906147c2565b60405180910390fd5b81601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505050565b606060008054610d3c90614811565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6890614811565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b5050505050905090565b6000610dca82612c19565b610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e00906148b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60148054610e5190614811565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7d90614811565b8015610eca5780601f10610e9f57610100808354040283529160200191610eca565b820191906000526020600020905b815481529060010190602001808311610ead57829003601f168201915b505050505081565b6000610edd82611d35565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590614947565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f6d612c11565b73ffffffffffffffffffffffffffffffffffffffff161480610f9c5750610f9b81610f96612c11565b61289e565b5b610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906149d9565b60405180910390fd5b610fe58383612c85565b505050565b600e5481565b6000600880549050905090565b60115481565b61100b612c11565b73ffffffffffffffffffffffffffffffffffffffff16611029611f2d565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906147c2565b60405180910390fd5b8060108190555050565b61109a611094612c11565b82612d3e565b6110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090614a6b565b60405180910390fd5b6110e4838383612e1c565b505050565b6110f1612c11565b73ffffffffffffffffffffffffffffffffffffffff1661110f611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c906147c2565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111b184612300565b915091509250929050565b60006111c783611de7565b8210611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90614afd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b611289612c11565b73ffffffffffffffffffffffffffffffffffffffff166112a7611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f4906147c2565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161132390614b4e565b60006040518083038185875af1925050503d8060008114611360576040519150601f19603f3d011682016040523d82523d6000602084013e611365565b606091505b505090508061137357600080fd5b50565b6012546011546113869190614b92565b4210156113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614c34565b60405180910390fd5b60006113d2610ff0565b9050601360009054906101000a900460ff1615611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90614ca0565b60405180910390fd5b60008211611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90614d0c565b60405180910390fd5b601054600f546114779190614d2c565b82826114839190614b92565b11156114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90614dac565b60405180910390fd5b6114cc611f2d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190f5760011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156116dd576001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790556115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614e3e565b60405180910390fd5b60058214611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614eaa565b60405180910390fd5b81600d5461163e9190614eca565b341015611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790614f70565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061190e565b60011515601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156118bc576001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790556117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c390614fdc565b60405180910390fd5b6001821461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690615048565b60405180910390fd5b81600d5461181d9190614eca565b34101561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614f70565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061190d565b81600e546118ca9190614eca565b34101561190c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611903906150b4565b60405180910390fd5b5b5b5b6000600190505b8281116119455761193284828461192d9190614b92565b613078565b808061193d906150d4565b915050611916565b50505050565b6119668383836040518060200160405280600081525061250b565b505050565b6060600061197883611de7565b905060008167ffffffffffffffff811115611996576119956143b1565b5b6040519080825280602002602001820160405280156119c45781602001602082028036833780820191505090505b50905060005b82811015611a0e576119dc85826111bc565b8282815181106119ef576119ee61511d565b5b6020026020010181815250508080611a06906150d4565b9150506119ca565b508092505050919050565b611a21612c11565b73ffffffffffffffffffffffffffffffffffffffff16611a3f611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906147c2565b60405180910390fd5b80600e8190555050565b60105481565b611aad612c11565b73ffffffffffffffffffffffffffffffffffffffff16611acb611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b18906147c2565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b6000611b48610ff0565b8210611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b80906151be565b60405180910390fd5b60088281548110611b9d57611b9c61511d565b5b90600052602060002001549050919050565b601360019054906101000a900460ff1681565b611bca612c11565b73ffffffffffffffffffffffffffffffffffffffff16611be8611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c35906147c2565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ca1612c11565b73ffffffffffffffffffffffffffffffffffffffff16611cbf611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c906147c2565b60405180910390fd5b80600b9080519060200190611d2b929190613cf9565b5050565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590615250565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906152e2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ea7612c11565b73ffffffffffffffffffffffffffffffffffffffff16611ec5611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f12906147c2565b60405180910390fd5b611f256000613096565b565b60125481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f5f612c11565b73ffffffffffffffffffffffffffffffffffffffff16611f7d611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca906147c2565b60405180910390fd5b818160189190611fe4929190613d7f565b505050565b606060018054611ff890614811565b80601f016020809104026020016040519081016040528092919081815260200182805461202490614811565b80156120715780601f1061204657610100808354040283529160200191612071565b820191906000526020600020905b81548152906001019060200180831161205457829003601f168201915b5050505050905090565b612083612c11565b73ffffffffffffffffffffffffffffffffffffffff166120a1611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee906147c2565b60405180910390fd5b6000612101610ff0565b9050601360009054906101000a900460ff161561211d57600080fd5b6000821161212a57600080fd5b600f5482826121399190614b92565b111561214457600080fd5b6000600190505b82811161217a576121673382846121629190614b92565b613078565b8080612172906150d4565b91505061214b565b505050565b612187612c11565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ec9061534e565b60405180910390fd5b8060056000612202612c11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122af612c11565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122f49190613ed6565b60405180910390a35050565b6000601760009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1661271083612339919061539d565b6123439190614eca565b9050919050565b612352612c11565b73ffffffffffffffffffffffffffffffffffffffff16612370611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd906147c2565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612429612c11565b73ffffffffffffffffffffffffffffffffffffffff16612447611f2d565b73ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612494906147c2565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601360009054906101000a900460ff1681565b61251c612516612c11565b83612d3e565b61255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614a6b565b60405180910390fd5b6125678484848461315c565b50505050565b600c805461257a90614811565b80601f01602080910402602001604051908101604052809291908181526020018280546125a690614811565b80156125f35780601f106125c8576101008083540402835291602001916125f3565b820191906000526020600020905b8154815290600101906020018083116125d657829003601f168201915b505050505081565b606061260682612c19565b612645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263c90615440565b60405180910390fd5b60001515601360019054906101000a900460ff16151514156126f3576014805461266e90614811565b80601f016020809104026020016040519081016040528092919081815260200182805461269a90614811565b80156126e75780601f106126bc576101008083540402835291602001916126e7565b820191906000526020600020905b8154815290600101906020018083116126ca57829003601f168201915b5050505050905061274f565b60006126fd6131b8565b9050600081511161271d576040518060200160405280600081525061274b565b806127278461324a565b600c60405160200161273b93929190615530565b6040516020818303038152906040525b9150505b919050565b600f5481565b60156020528060005260406000206000915054906101000a900460ff1681565b612782612c11565b73ffffffffffffffffffffffffffffffffffffffff166127a0611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ed906147c2565b60405180910390fd5b80600c908051906020019061280c929190613cf9565b5050565b6018805461281d90614811565b80601f016020809104026020016040519081016040528092919081815260200182805461284990614811565b80156128965780601f1061286b57610100808354040283529160200191612896565b820191906000526020600020905b81548152906001019060200180831161287957829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61293a612c11565b73ffffffffffffffffffffffffffffffffffffffff16612958611f2d565b73ffffffffffffffffffffffffffffffffffffffff16146129ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a5906147c2565b60405180910390fd5b80601490805190602001906129c4929190613cf9565b5050565b6129d0612c11565b73ffffffffffffffffffffffffffffffffffffffff166129ee611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906147c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab906155d3565b60405180910390fd5b612abd81613096565b50565b612ac8612c11565b73ffffffffffffffffffffffffffffffffffffffff16612ae6611f2d565b73ffffffffffffffffffffffffffffffffffffffff1614612b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b33906147c2565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c0a5750612c09826133ab565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cf883611d35565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d4982612c19565b612d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7f90615665565b60405180910390fd5b6000612d9383611d35565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e0257508373ffffffffffffffffffffffffffffffffffffffff16612dea84610dbf565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e135750612e12818561289e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e3c82611d35565b73ffffffffffffffffffffffffffffffffffffffff1614612e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e89906156f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef990615789565b60405180910390fd5b612f0d83838361348d565b612f18600082612c85565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f689190614d2c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fbf9190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61309282826040518060200160405280600081525061349d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613167848484612e1c565b613173848484846134f8565b6131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a99061581b565b60405180910390fd5b50505050565b6060600b80546131c790614811565b80601f01602080910402602001604051908101604052809291908181526020018280546131f390614811565b80156132405780601f1061321557610100808354040283529160200191613240565b820191906000526020600020905b81548152906001019060200180831161322357829003601f168201915b5050505050905090565b60606000821415613292576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133a6565b600082905060005b600082146132c45780806132ad906150d4565b915050600a826132bd919061539d565b915061329a565b60008167ffffffffffffffff8111156132e0576132df6143b1565b5b6040519080825280601f01601f1916602001820160405280156133125781602001600182028036833780820191505090505b5090505b6000851461339f5760018261332b9190614d2c565b9150600a8561333a919061583b565b60306133469190614b92565b60f81b81838151811061335c5761335b61511d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613398919061539d565b9450613316565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061347657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061348657506134858261368f565b5b9050919050565b6134988383836136f9565b505050565b6134a7838361380d565b6134b460008484846134f8565b6134f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ea9061581b565b60405180910390fd5b505050565b60006135198473ffffffffffffffffffffffffffffffffffffffff166139db565b15613682578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613542612c11565b8786866040518563ffffffff1660e01b815260040161356494939291906158c1565b602060405180830381600087803b15801561357e57600080fd5b505af19250505080156135af57506040513d601f19601f820116820180604052508101906135ac9190615922565b60015b613632573d80600081146135df576040519150601f19603f3d011682016040523d82523d6000602084013e6135e4565b606091505b5060008151141561362a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136219061581b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613687565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6137048383836139ee565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561374757613742816139f3565b613786565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613785576137848382613a3c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137c9576137c481613ba9565b613808565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613807576138068282613c7a565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561387d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138749061599b565b60405180910390fd5b61388681612c19565b156138c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138bd90615a07565b60405180910390fd5b6138d26000838361348d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139229190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613a4984611de7565b613a539190614d2c565b9050600060076000848152602001908152602001600020549050818114613b38576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613bbd9190614d2c565b9050600060096000848152602001908152602001600020549050600060088381548110613bed57613bec61511d565b5b906000526020600020015490508060088381548110613c0f57613c0e61511d565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613c5e57613c5d615a27565b5b6001900381819060005260206000200160009055905550505050565b6000613c8583611de7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613d0590614811565b90600052602060002090601f016020900481019282613d275760008555613d6e565b82601f10613d4057805160ff1916838001178555613d6e565b82800160010185558215613d6e579182015b82811115613d6d578251825591602001919060010190613d52565b5b509050613d7b9190613e05565b5090565b828054613d8b90614811565b90600052602060002090601f016020900481019282613dad5760008555613df4565b82601f10613dc657803560ff1916838001178555613df4565b82800160010185558215613df4579182015b82811115613df3578235825591602001919060010190613dd8565b5b509050613e019190613e05565b5090565b5b80821115613e1e576000816000905550600101613e06565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613e6b81613e36565b8114613e7657600080fd5b50565b600081359050613e8881613e62565b92915050565b600060208284031215613ea457613ea3613e2c565b5b6000613eb284828501613e79565b91505092915050565b60008115159050919050565b613ed081613ebb565b82525050565b6000602082019050613eeb6000830184613ec7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1c82613ef1565b9050919050565b613f2c81613f11565b8114613f3757600080fd5b50565b600081359050613f4981613f23565b92915050565b60006bffffffffffffffffffffffff82169050919050565b613f7081613f4f565b8114613f7b57600080fd5b50565b600081359050613f8d81613f67565b92915050565b60008060408385031215613faa57613fa9613e2c565b5b6000613fb885828601613f3a565b9250506020613fc985828601613f7e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561400d578082015181840152602081019050613ff2565b8381111561401c576000848401525b50505050565b6000601f19601f8301169050919050565b600061403e82613fd3565b6140488185613fde565b9350614058818560208601613fef565b61406181614022565b840191505092915050565b600060208201905081810360008301526140868184614033565b905092915050565b6000819050919050565b6140a18161408e565b81146140ac57600080fd5b50565b6000813590506140be81614098565b92915050565b6000602082840312156140da576140d9613e2c565b5b60006140e8848285016140af565b91505092915050565b6140fa81613f11565b82525050565b600060208201905061411560008301846140f1565b92915050565b6000806040838503121561413257614131613e2c565b5b600061414085828601613f3a565b9250506020614151858286016140af565b9150509250929050565b6141648161408e565b82525050565b600060208201905061417f600083018461415b565b92915050565b60008060006060848603121561419e5761419d613e2c565b5b60006141ac86828701613f3a565b93505060206141bd86828701613f3a565b92505060406141ce868287016140af565b9150509250925092565b6141e181613ebb565b81146141ec57600080fd5b50565b6000813590506141fe816141d8565b92915050565b60006020828403121561421a57614219613e2c565b5b6000614228848285016141ef565b91505092915050565b6000806040838503121561424857614247613e2c565b5b6000614256858286016140af565b9250506020614267858286016140af565b9150509250929050565b600060408201905061428660008301856140f1565b614293602083018461415b565b9392505050565b6000602082840312156142b0576142af613e2c565b5b60006142be84828501613f3a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142fc8161408e565b82525050565b600061430e83836142f3565b60208301905092915050565b6000602082019050919050565b6000614332826142c7565b61433c81856142d2565b9350614347836142e3565b8060005b8381101561437857815161435f8882614302565b975061436a8361431a565b92505060018101905061434b565b5085935050505092915050565b6000602082019050818103600083015261439f8184614327565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6143e982614022565b810181811067ffffffffffffffff82111715614408576144076143b1565b5b80604052505050565b600061441b613e22565b905061442782826143e0565b919050565b600067ffffffffffffffff821115614447576144466143b1565b5b61445082614022565b9050602081019050919050565b82818337600083830152505050565b600061447f61447a8461442c565b614411565b90508281526020810184848401111561449b5761449a6143ac565b5b6144a684828561445d565b509392505050565b600082601f8301126144c3576144c26143a7565b5b81356144d384826020860161446c565b91505092915050565b6000602082840312156144f2576144f1613e2c565b5b600082013567ffffffffffffffff8111156145105761450f613e31565b5b61451c848285016144ae565b91505092915050565b600080fd5b600080fd5b60008083601f840112614545576145446143a7565b5b8235905067ffffffffffffffff81111561456257614561614525565b5b60208301915083600182028301111561457e5761457d61452a565b5b9250929050565b6000806020838503121561459c5761459b613e2c565b5b600083013567ffffffffffffffff8111156145ba576145b9613e31565b5b6145c68582860161452f565b92509250509250929050565b600080604083850312156145e9576145e8613e2c565b5b60006145f785828601613f3a565b9250506020614608858286016141ef565b9150509250929050565b600067ffffffffffffffff82111561462d5761462c6143b1565b5b61463682614022565b9050602081019050919050565b600061465661465184614612565b614411565b905082815260208101848484011115614672576146716143ac565b5b61467d84828561445d565b509392505050565b600082601f83011261469a576146996143a7565b5b81356146aa848260208601614643565b91505092915050565b600080600080608085870312156146cd576146cc613e2c565b5b60006146db87828801613f3a565b94505060206146ec87828801613f3a565b93505060406146fd878288016140af565b925050606085013567ffffffffffffffff81111561471e5761471d613e31565b5b61472a87828801614685565b91505092959194509250565b6000806040838503121561474d5761474c613e2c565b5b600061475b85828601613f3a565b925050602061476c85828601613f3a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147ac602083613fde565b91506147b782614776565b602082019050919050565b600060208201905081810360008301526147db8161479f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482957607f821691505b6020821081141561483d5761483c6147e2565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061489f602c83613fde565b91506148aa82614843565b604082019050919050565b600060208201905081810360008301526148ce81614892565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614931602183613fde565b915061493c826148d5565b604082019050919050565b6000602082019050818103600083015261496081614924565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006149c3603883613fde565b91506149ce82614967565b604082019050919050565b600060208201905081810360008301526149f2816149b6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614a55603183613fde565b9150614a60826149f9565b604082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614ae7602b83613fde565b9150614af282614a8b565b604082019050919050565b60006020820190508181036000830152614b1681614ada565b9050919050565b600081905092915050565b50565b6000614b38600083614b1d565b9150614b4382614b28565b600082019050919050565b6000614b5982614b2b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b9d8261408e565b9150614ba88361408e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bdd57614bdc614b63565b5b828201905092915050565b7f4d696e74696e67206973207374696c6c207475726e6564206f66660000000000600082015250565b6000614c1e601b83613fde565b9150614c2982614be8565b602082019050919050565b60006020820190508181036000830152614c4d81614c11565b9050919050565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b6000614c8a601b83613fde565b9150614c9582614c54565b602082019050919050565b60006020820190508181036000830152614cb981614c7d565b9050919050565b7f4d696e74206d7573742062652067726561746572207468616e207a65726f0000600082015250565b6000614cf6601e83613fde565b9150614d0182614cc0565b602082019050919050565b60006020820190508181036000830152614d2581614ce9565b9050919050565b6000614d378261408e565b9150614d428361408e565b925082821015614d5557614d54614b63565b5b828203905092915050565b7f4f6e6c79207265736572766564206d696e747320617265206c65667400000000600082015250565b6000614d96601c83613fde565b9150614da182614d60565b602082019050919050565b60006020820190508181036000830152614dc581614d89565b9050919050565b7f596f7520646964206e6f7420636f6e7472696275746520746f2074686973207060008201527f726f6a65637420617320616e2061727469737400000000000000000000000000602082015250565b6000614e28603383613fde565b9150614e3382614dcc565b604082019050919050565b60006020820190508181036000830152614e5781614e1b565b9050919050565b7f596f75206d757374206d696e742065786163746c792035000000000000000000600082015250565b6000614e94601783613fde565b9150614e9f82614e5e565b602082019050919050565b60006020820190508181036000830152614ec381614e87565b9050919050565b6000614ed58261408e565b9150614ee08361408e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1957614f18614b63565b5b828202905092915050565b7f5061796d656e74206d7573742062652065786163746c79203020657468000000600082015250565b6000614f5a601d83613fde565b9150614f6582614f24565b602082019050919050565b60006020820190508181036000830152614f8981614f4d565b9050919050565b7f596f7520617265206e6f74206f6e20746865206672656e73206c697374000000600082015250565b6000614fc6601d83613fde565b9150614fd182614f90565b602082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b7f596f75206d757374206d696e742065786163746c792031000000000000000000600082015250565b6000615032601783613fde565b915061503d82614ffc565b602082019050919050565b6000602082019050818103600083015261506181615025565b9050919050565b7f4e6f7420656e6f75676820657468000000000000000000000000000000000000600082015250565b600061509e600e83613fde565b91506150a982615068565b602082019050919050565b600060208201905081810360008301526150cd81615091565b9050919050565b60006150df8261408e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561511257615111614b63565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006151a8602c83613fde565b91506151b38261514c565b604082019050919050565b600060208201905081810360008301526151d78161519b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061523a602983613fde565b9150615245826151de565b604082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006152cc602a83613fde565b91506152d782615270565b604082019050919050565b600060208201905081810360008301526152fb816152bf565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615338601983613fde565b915061534382615302565b602082019050919050565b600060208201905081810360008301526153678161532b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153a88261408e565b91506153b38361408e565b9250826153c3576153c261536e565b5b828204905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061542a602f83613fde565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b9050919050565b600081905092915050565b600061547682613fd3565b6154808185615460565b9350615490818560208601613fef565b80840191505092915050565b60008190508160005260206000209050919050565b600081546154be81614811565b6154c88186615460565b945060018216600081146154e357600181146154f457615527565b60ff19831686528186019350615527565b6154fd8561549c565b60005b8381101561551f57815481890152600182019150602081019050615500565b838801955050505b50505092915050565b600061553c828661546b565b9150615548828561546b565b915061555482846154b1565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155bd602683613fde565b91506155c882615561565b604082019050919050565b600060208201905081810360008301526155ec816155b0565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061564f602c83613fde565b915061565a826155f3565b604082019050919050565b6000602082019050818103600083015261567e81615642565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006156e1602983613fde565b91506156ec82615685565b604082019050919050565b60006020820190508181036000830152615710816156d4565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615773602483613fde565b915061577e82615717565b604082019050919050565b600060208201905081810360008301526157a281615766565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615805603283613fde565b9150615810826157a9565b604082019050919050565b60006020820190508181036000830152615834816157f8565b9050919050565b60006158468261408e565b91506158518361408e565b9250826158615761586061536e565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006158938261586c565b61589d8185615877565b93506158ad818560208601613fef565b6158b681614022565b840191505092915050565b60006080820190506158d660008301876140f1565b6158e360208301866140f1565b6158f0604083018561415b565b81810360608301526159028184615888565b905095945050505050565b60008151905061591c81613e62565b92915050565b60006020828403121561593857615937613e2c565b5b60006159468482850161590d565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615985602083613fde565b91506159908261594f565b602082019050919050565b600060208201905081810360008301526159b481615978565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006159f1601c83613fde565b91506159fc826159bb565b602082019050919050565b60006020820190508181036000830152615a20816159e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220c9de5a5f67c3a57014b0643d147cf8b47e6c16cded2207324fba8d30ca4739de64736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000018838370f340000000000000000000000000000000000000000000000000000000000000001a0a0000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000006357ff3900000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000c5375732053656167756c6c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000547554c4c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5375586954546b416136474e35347470727a334a7a7476616b31714764383639396b4670747a796765346b6d2f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5375586954546b416136474e35347470727a334a7a7476616b31714764383639396b4670747a796765346b6d00000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d617168616f5439375653685a754b6e44555a7852734755536a42677a553545484d41555662537a64447a6d440000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Sus Seagulls
Arg [1] : _symbol (string): GULLS
Arg [2] : _cost (uint256): 6900000000000000
Arg [3] : _maxSupply (uint256): 6666
Arg [4] : _reservedSupply (uint256): 66
Arg [5] : _allowMintingOn (uint256): 1666711353
Arg [6] : _initBaseURI (string): ipfs://QmSuXiTTkAa6GN54tprz3Jztvak1qGd8699kFptzyge4km/
Arg [7] : _initNotRevealedUri (string): ipfs://QmSuXiTTkAa6GN54tprz3Jztvak1qGd8699kFptzyge4km
Arg [8] : _royaltyFeesInBips (uint96): 250
Arg [9] : _contractURI (string): ipfs://QmaqhaoT97VShZuKnDUZxRsGUSjBgzU5EHMAUVbSzdDzmD

-----Encoded View---------------
23 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 0000000000000000000000000000000000000000000000000018838370f34000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001a0a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [5] : 000000000000000000000000000000000000000000000000000000006357ff39
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [8] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [11] : 5375732053656167756c6c730000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [13] : 47554c4c53000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [15] : 697066733a2f2f516d5375586954546b416136474e35347470727a334a7a7476
Arg [16] : 616b31714764383639396b4670747a796765346b6d2f00000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [18] : 697066733a2f2f516d5375586954546b416136474e35347470727a334a7a7476
Arg [19] : 616b31714764383639396b4670747a796765346b6d0000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [21] : 697066733a2f2f516d617168616f5439375653685a754b6e44555a7852734755
Arg [22] : 536a42677a553545484d41555662537a64447a6d440000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.