ETH Price: $3,168.25 (-8.45%)
Gas: 3 Gwei

Contract

0x326461ddcC52d225B743C99884af2733785d57a9
 

Overview

ETH Balance

0.00001337 ETH

Eth Value

$0.04 (@ $3,168.25/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...163128542023-01-01 15:36:35570 days ago1672587395IN
0x326461dd...3785d57a9
0 ETH0.0003347413.7715049
Set Approval For...162852132022-12-28 19:02:11574 days ago1672254131IN
0x326461dd...3785d57a9
0 ETH0.0004041916.62892792
Set Approval For...152026162022-07-24 2:17:30732 days ago1658629050IN
0x326461dd...3785d57a9
0 ETH0.000200678.2557447
Set Approval For...152025792022-07-24 2:10:01732 days ago1658628601IN
0x326461dd...3785d57a9
0 ETH0.0006780214.66972556
Set Approval For...150773862022-07-04 17:24:19751 days ago1656955459IN
0x326461dd...3785d57a9
0 ETH0.0007555131.08212749
Set Approval For...149945322022-06-20 4:10:46766 days ago1655698246IN
0x326461dd...3785d57a9
0 ETH0.0004325917.79733475
Transfer From149859642022-06-18 16:31:17767 days ago1655569877IN
0x326461dd...3785d57a9
0 ETH0.0029609124.86676031
Set Approval For...149213922022-06-07 14:40:48778 days ago1654612848IN
0x326461dd...3785d57a9
0 ETH0.0045900999.31176477
Set Approval For...148767032022-05-31 4:26:26786 days ago1653971186IN
0x326461dd...3785d57a9
0 ETH0.0019694242.61062261
Set Approval For...147188092022-05-05 18:33:15811 days ago1651775595IN
0x326461dd...3785d57a9
0 ETH0.0038528983.36163355
Set Approval For...147068672022-05-03 20:44:59813 days ago1651610699IN
0x326461dd...3785d57a9
0 ETH0.0030394665.76225329
Transfer From146704902022-04-28 3:24:42819 days ago1651116282IN
0x326461dd...3785d57a9
0 ETH0.008305969.76292783
Set Approval For...145833782022-04-14 11:51:57832 days ago1649937117IN
0x326461dd...3785d57a9
0 ETH0.0013734629.71646546
Set Approval For...145414412022-04-07 22:27:10839 days ago1649370430IN
0x326461dd...3785d57a9
0 ETH0.0029992264.89166231
Deposit145057782022-04-02 8:45:43844 days ago1648889143IN
0x326461dd...3785d57a9
0.00001337 ETH0.0016292336.01941833
Withdraw144908552022-03-31 0:54:11847 days ago1648688051IN
0x326461dd...3785d57a9
0 ETH0.0014083936.28952373
Set Approval For...144908072022-03-31 0:42:40847 days ago1648687360IN
0x326461dd...3785d57a9
0 ETH0.0021645546.83249235
Set Approval For...144896802022-03-30 20:31:15847 days ago1648672275IN
0x326461dd...3785d57a9
0 ETH0.0037597781.34705246
Set Approval For...144896382022-03-30 20:20:55847 days ago1648671655IN
0x326461dd...3785d57a9
0 ETH0.003160368.37680682
Set Approval For...144896332022-03-30 20:19:55847 days ago1648671595IN
0x326461dd...3785d57a9
0 ETH0.0037302280.70765785
Set Approval For...144896092022-03-30 20:12:26847 days ago1648671146IN
0x326461dd...3785d57a9
0 ETH0.0032750370.85906024
Dev Mint144893312022-03-30 19:08:38847 days ago1648667318IN
0x326461dd...3785d57a9
0 ETH0.12590701127.23612272
Buy NFT144893152022-03-30 19:05:02847 days ago1648667102IN
0x326461dd...3785d57a9
0.077 ETH0.0177134596.59371516
Set Approval For...144893142022-03-30 19:04:25847 days ago1648667065IN
0x326461dd...3785d57a9
0 ETH0.0040680688.01725771
Buy NFT144892932022-03-30 18:59:48847 days ago1648666788IN
0x326461dd...3785d57a9
0.231 ETH0.0231968562.27092075
View all transactions

Latest 22 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
144893152022-03-30 19:05:02847 days ago1648667102
0x326461dd...3785d57a9
0.077 ETH
144892932022-03-30 18:59:48847 days ago1648666788
0x326461dd...3785d57a9
0.231 ETH
144892882022-03-30 18:58:31847 days ago1648666711
0x326461dd...3785d57a9
0.077 ETH
144892772022-03-30 18:56:59847 days ago1648666619
0x326461dd...3785d57a9
0.077 ETH
144892752022-03-30 18:56:36847 days ago1648666596
0x326461dd...3785d57a9
0.154 ETH
143942982022-03-16 0:09:54862 days ago1647389394
0x326461dd...3785d57a9
0.077 ETH
143941552022-03-15 23:37:56862 days ago1647387476
0x326461dd...3785d57a9
0.077 ETH
143941142022-03-15 23:25:50862 days ago1647386750
0x326461dd...3785d57a9
0.077 ETH
143939662022-03-15 22:51:03862 days ago1647384663
0x326461dd...3785d57a9
0.077 ETH
143939602022-03-15 22:49:59862 days ago1647384599
0x326461dd...3785d57a9
0.077 ETH
143932042022-03-15 20:05:41862 days ago1647374741
0x326461dd...3785d57a9
0.077 ETH
143931432022-03-15 19:51:12862 days ago1647373872
0x326461dd...3785d57a9
0.077 ETH
143931362022-03-15 19:49:38862 days ago1647373778
0x326461dd...3785d57a9
0.077 ETH
143930742022-03-15 19:35:32862 days ago1647372932
0x326461dd...3785d57a9
0.077 ETH
143930742022-03-15 19:35:32862 days ago1647372932
0x326461dd...3785d57a9
0.077 ETH
143930662022-03-15 19:32:36862 days ago1647372756
0x326461dd...3785d57a9
0.077 ETH
143930612022-03-15 19:30:45862 days ago1647372645
0x326461dd...3785d57a9
0.077 ETH
143930532022-03-15 19:29:43862 days ago1647372583
0x326461dd...3785d57a9
0.077 ETH
143929922022-03-15 19:17:31862 days ago1647371851
0x326461dd...3785d57a9
0.154 ETH
143929922022-03-15 19:17:31862 days ago1647371851
0x326461dd...3785d57a9
0.077 ETH
143929022022-03-15 18:57:52862 days ago1647370672
0x326461dd...3785d57a9
0.077 ETH
143928732022-03-15 18:50:01862 days ago1647370201
0x326461dd...3785d57a9
0.077 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LeoDynasty

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-15
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Address {

    function isContract(address account) internal view returns (bool) {

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

}
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a);
        return c;
    }
}


interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

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

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

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);
    event Mint(uint indexed index, address indexed minter);
    event Deposit(address indexed account, uint indexed amount);
    event Withdraw(address indexed account, uint indexed amount);
    event NewBid(address indexed bidder, uint indexed amount, uint indexed tokenId);
    event Trade(address indexed seller, address indexed buyer, uint indexed tokenId,uint amount);
    event SellNft(address indexed owner,uint indexed tokenId,uint indexed minPrice);
    event CancelSellNft(address indexed owner,uint indexed tokenId);
    event SaleIsStarted();

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

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

}

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

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

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

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

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

    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");

    string private _name;
    string private _symbol;
    string public _preSaleAddrs;
    string internal baseURI;
    uint internal price = 0.077 ether;
    uint256 internal tokensSold = 0;
    bool public _startSale = false;

    uint256 constant MAX_SUPPLY = 6789;
    address public royalty;


    mapping (uint => ForSale) public nftForSale;
    mapping (uint256 => address) private _owners;
    mapping (address => uint256) private _balances;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    mapping (uint256 => string) private _tokenURIs;
    mapping (address => uint256[]) public tokensPerOwner;
    mapping(address => uint256[]) internal ownerToIds;
    mapping(uint256 => uint256) internal idToOwnerIndex;

    struct ForSale {
        uint nft_uid;
        address owner;
        address bidder;
        uint minValue;
        uint highestBid;
    }

    constructor (string memory name_, string memory symbol_,string memory baseURI_,address _royalty) {
        _name = name_;
        _symbol = symbol_;
        baseURI = baseURI_;
        royalty = _royalty;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165, AccessControl) 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 totalSupply() public view returns (uint256) {
        return tokensSold;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return string(abi.encodePacked(_baseURI(), toString(tokenId)));
    }

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


    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "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 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 _addNFToken(address _to, uint256 _tokenId) internal {
        require(_owners[_tokenId] == address(0), "Cannot add, already owned.");
        _owners[_tokenId] = _to;

        ownerToIds[_to].push(_tokenId);
        idToOwnerIndex[_tokenId] = ownerToIds[_to].length.sub(1);
    }

    function _removeNFToken(address _from, uint256 _tokenId) internal {
        require(_owners[_tokenId] == _from, "Incorrect owner.");
        delete _owners[_tokenId];
        delete nftForSale[_tokenId];
        uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId];
        uint256 lastTokenIndex = ownerToIds[_from].length.sub(1);

        if (lastTokenIndex != tokenToRemoveIndex) {
            uint256 lastToken = ownerToIds[_from][lastTokenIndex];
            ownerToIds[_from][tokenToRemoveIndex] = lastToken;
            idToOwnerIndex[lastToken] = tokenToRemoveIndex;
        }

        ownerToIds[_from].pop();
        emit CancelSellNft(_msgSender(),_tokenId);
    }
	function _getAddrQuantity(address to) internal virtual returns (uint256 value) {
		return _balances[to];
	}
    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;
        tokensSold += 1;
        tokensPerOwner[to].push(tokenId);
        _addNFToken(to, tokenId);
        emit Mint(tokenId, to);
        emit Transfer(address(0), to, tokenId);
    }
    function devMint(uint count, address recipient) external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(tokensSold+count <=6789, "The tokens limit has reached.");
        for (uint i = 0; i < count; i++) {
            uint256 _tokenId = tokensSold + 1;
            _mint(recipient, _tokenId);
        }
    }



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

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

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];
        tokensPerOwner[owner].push(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);

        _removeNFToken(from, tokenId);
        _addNFToken(to, tokenId);

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

        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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}
contract LeoDynasty is ERC721  {
    using SafeMath for uint256;

    bool private lock = false;
    bool public contractPaused;
    uint256 constant CONTRACT_ROYALTY = 2;//Contract royalty in percent

    mapping (address => uint256) public ethBalance;



    constructor() ERC721("LeoDynasty", "LEODY", " https://leopards.world/json/", address(0xB0A0e9bF8e827877DC0C0a288026CF947a1FB95c)) {

        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    modifier nonReentrant {
        require(!lock, "ReentrancyGuard: reentrant call");
        lock = true;
        _;
        lock = false;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function pauseContract(bool _paused) external  {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to pause the contract");
        contractPaused = _paused;
    }

    function setBaseURI(string memory newURI) public returns (bool) {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        baseURI = newURI;
        return true;

    }

    function changeRoyaltyAddr(address _newRoyaltyAddr) public returns(bool){
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change royalty address");
        royalty = _newRoyaltyAddr;
        return true;
    }


    function getTokensByOwner(address _owner) public view returns (uint256[] memory){
        return ownerToIds[_owner];
    }

    function toSellNFT(uint tokenId, uint minPrice) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        nftForSale[tokenId] =ForSale(tokenId,_msgSender(),address(0),minPrice,0);
        emit SellNft(_msgSender(),tokenId,minPrice);
        return true;
    }

    function toCancelSaleOfNFT(uint tokenId) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        delete nftForSale[tokenId];
        emit CancelSellNft(_msgSender(),tokenId);
        return true;
    }


    function toMakeBid(uint tokenId) public payable nonReentrant returns(bool){
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(!_isApprovedOrOwner(_msgSender(), tokenId), "The owner can't make bid");
        if (order.bidder == _msgSender()){
            require(msg.value > 0,"Insufficient funds to make bid");
            order.highestBid = order.highestBid.add(msg.value);
        } else{
            require(msg.value >= order.minValue && msg.value > order.highestBid, "Insufficient funds to make bid");
            order.highestBid = msg.value;
            order.bidder = _msgSender();
        }
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value);
        nftForSale[tokenId] = order;
        emit Deposit(_msgSender(),msg.value);
        emit NewBid(_msgSender(),order.highestBid,tokenId);
        return true;
    }

    function toAcceptBid(uint tokenId) public nonReentrant returns(bool){
        require(!contractPaused);
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Only owner or approved can accept the bid");
        require(ethBalance[order.bidder] >= order.highestBid,"Insufficient funds of the bidder balance");
        delete nftForSale[tokenId];
        uint256 total_royalty = order.highestBid / 100 * CONTRACT_ROYALTY;
        ethBalance[order.bidder] = ethBalance[order.bidder].sub(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(total_royalty);
        (bool success, ) = royalty.call{value:total_royalty}("");
        require(success);
        _transfer(order.owner,order.bidder,tokenId);
        emit CancelSellNft(_msgSender(),tokenId);
        emit Trade(_msgSender(),order.bidder,order.highestBid,tokenId);
        emit Transfer(order.owner,order.bidder,tokenId);
        return true;
    }

    function startSale() external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(!_startSale);
        _startSale = true;
        emit SaleIsStarted();
    }

    function buyNFT(uint quantity)external payable nonReentrant returns(bool, uint){
        require(!contractPaused);
		require(quantity>0, "Quantity must be more than 0");
		require(quantity<11, "Quantity must be less than 11");
        require(tokensSold+quantity <=6789, "The tokens limit has reached.");
            require(msg.value*quantity >= price, "Insufficient funds to purchase.");
        (bool success, ) = royalty.call{value:msg.value}("");
        require(success);
        uint _tokenId;
		for (uint i = 0; i < quantity; i++) {
			_tokenId = tokensSold + 1;
			_mint(_msgSender(), _tokenId);
		}
        return (true,_tokenId);
    }

    function withdraw(uint amount) external nonReentrant {
        require(!contractPaused);
        require(amount <= ethBalance[_msgSender()],"Insufficient funds to withdraw.");
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(amount);
        (bool success, ) = msg.sender.call{value:amount}("");
        require(success);
        emit Withdraw(_msgSender(), amount);
    }

    function deposit() external payable {
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value);
        emit Deposit(_msgSender(), msg.value);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CancelSellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleIsStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"SellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Trade","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preSaleAddrs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"buyNFT","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRoyaltyAddr","type":"address"}],"name":"changeRoyaltyAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethBalance","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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftForSale","outputs":[{"internalType":"uint256","name":"nft_uid","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"minValue","type":"uint256"},{"internalType":"uint256","name":"highestBid","type":"uint256"}],"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":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toAcceptBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toCancelSaleOfNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toMakeBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"toSellNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensPerOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526701118f178fb4800060055560006006556007805460ff199081169091556011805490911690553480156200003857600080fd5b506040518060400160405280600a8152602001694c656f44796e6173747960b01b815250604051806040016040528060058152602001644c454f445960d81b8152506040518060400160405280601d81526020017f2068747470733a2f2f6c656f70617264732e776f726c642f6a736f6e2f00000081525073b0a0e9bf8e827877dc0c0a288026cf947a1fb95c8360019080519060200190620000dd92919062000257565b508251620000f390600290602086019062000257565b5081516200010990600490602085019062000257565b50600780546001600160a01b0390921661010002610100600160a81b03199092169190911790555062000149915060009050620001433390565b620001a7565b620001757fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620001a7565b620001a17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001a7565b6200033a565b620001b38282620001b7565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001b3576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002133390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200026590620002fd565b90600052602060002090601f016020900481019282620002895760008555620002d4565b82601f10620002a457805160ff1916838001178555620002d4565b82800160010185558215620002d4579182015b82811115620002d4578251825591602001919060010190620002b7565b50620002e2929150620002e6565b5090565b5b80821115620002e25760008155600101620002e7565b600181811c908216806200031257607f821691505b602082108114156200033457634e487b7160e01b600052602260045260246000fd5b50919050565b6133e8806200034a6000396000f3fe6080604052600436106102515760003560e01c80637fc9b4a611610139578063b88d4fde116100b6578063d8f3790f1161007a578063d8f3790f1461075a578063e272b89214610787578063e985e9c5146107a7578063ef5793ce146107f0578063f6e4bba614610810578063f7932ab81461083057600080fd5b8063b88d4fde146106d0578063c87b56dd146106f0578063d0e30db014610710578063d539139314610718578063d547741f1461073a57600080fd5b806395d89b41116100fd57806395d89b4114610657578063a217fddf1461066c578063a22cb46514610681578063b2918503146106a1578063b66a0e5d146106bb57600080fd5b80637fc9b4a61461055b5780638a67456a1461056e578063906f33301461058d57806390ba7a32146105ad57806391d148541461063757600080fd5b80632f2ff15d116101d257806351ed82881161019657806351ed82881461047d57806355f804b3146104a75780636352211e146104c757806370a08231146104e757806375b238fc146105075780637ed0f2811461053b57600080fd5b80632f2ff15d146103db57806336568abe146103fb57806340398d671461041b57806342842e0e14610448578063480080d61461046857600080fd5b806323b872dd1161021957806323b872dd14610326578063248a9ca31461034657806329ee566c146103765780632d1a12f61461039b5780632e1a7d4d146103bb57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b50610276610271366004612f49565b610850565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0610861565b60405161028291906130c4565b3480156102b957600080fd5b506102cd6102c8366004612f0f565b6108f3565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612ecc565b610980565b005b34801561031357600080fd5b506006545b604051908152602001610282565b34801561033257600080fd5b50610305610341366004612def565b610a96565b34801561035257600080fd5b50610318610361366004612f0f565b60009081526020819052604090206001015490565b34801561038257600080fd5b506007546102cd9061010090046001600160a01b031681565b3480156103a757600080fd5b506103056103b6366004612f27565b610ac7565b3480156103c757600080fd5b506103056103d6366004612f0f565b610b95565b3480156103e757600080fd5b506103056103f6366004612f27565b610d00565b34801561040757600080fd5b50610305610416366004612f27565b610d8f565b34801561042757600080fd5b5061043b610436366004612da3565b610e09565b6040516102829190613080565b34801561045457600080fd5b50610305610463366004612def565b610e75565b34801561047457600080fd5b506102a0610e90565b61049061048b366004612f0f565b610f1e565b604080519215158352602083019190915201610282565b3480156104b357600080fd5b506102766104c2366004612f81565b611175565b3480156104d357600080fd5b506102cd6104e2366004612f0f565b6111c7565b3480156104f357600080fd5b50610318610502366004612da3565b61123e565b34801561051357600080fd5b506103187fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561054757600080fd5b50610276610556366004612f0f565b6112c5565b610276610569366004612f0f565b61135e565b34801561057a57600080fd5b5060115461027690610100900460ff1681565b34801561059957600080fd5b506102766105a8366004612fc7565b6116d9565b3480156105b957600080fd5b506106036105c8366004612f0f565b6008602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610282565b34801561064357600080fd5b50610276610652366004612f27565b6117dd565b34801561066357600080fd5b506102a0611806565b34801561067857600080fd5b50610318600081565b34801561068d57600080fd5b5061030561069c366004612ea3565b611815565b3480156106ad57600080fd5b506007546102769060ff1681565b3480156106c757600080fd5b506103056118da565b3480156106dc57600080fd5b506103056106eb366004612e2a565b611956565b3480156106fc57600080fd5b506102a061070b366004612f0f565b61198d565b610305611a34565b34801561072457600080fd5b5061031860008051602061339383398151915281565b34801561074657600080fd5b50610305610755366004612f27565b611a7f565b34801561076657600080fd5b50610318610775366004612da3565b60126020526000908152604090205481565b34801561079357600080fd5b506103056107a2366004612ef5565b611aff565b3480156107b357600080fd5b506102766107c2366004612dbd565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b3480156107fc57600080fd5b5061031861080b366004612ecc565b611b95565b34801561081c57600080fd5b5061027661082b366004612f0f565b611bc6565b34801561083c57600080fd5b5061027661084b366004612da3565b61202b565b600061085b826120d9565b92915050565b606060018054610870906132cd565b80601f016020809104026020016040519081016040528092919081815260200182805461089c906132cd565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b60006108fe82612119565b6109645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600b60205260409020546001600160a01b031690565b600061098b826111c7565b9050806001600160a01b0316836001600160a01b031614156109f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161095b565b336001600160a01b0382161480610a155750610a1581336107c2565b610a875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095b565b610a918383612136565b505050565b610aa033826121a4565b610abc5760405162461bcd60e51b815260040161095b906131b7565b610a9183838361228e565b610adf600080516020613393833981519152336117dd565b610afb5760405162461bcd60e51b815260040161095b90613129565b611a8582600654610b0c919061323f565b1115610b5a5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60005b82811015610a915760006006546001610b76919061323f565b9050610b828382612426565b5080610b8d81613308565b915050610b5d565b60115460ff1615610bb85760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610bd957600080fd5b33600090815260126020526040902054811115610c385760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e00604482015260640161095b565b610c628160126000335b6001600160a01b03168152602081019190915260400160002054906125c1565b3360008181526012602052604080822093909355915183908381818185875af1925050503d8060008114610cb2576040519150601f19603f3d011682016040523d82523d6000602084013e610cb7565b606091505b5050905080610cc557600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506011805460ff19169055565b600082815260208190526040902060010154610d1d905b336117dd565b610d815760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161095b565b610d8b82826125e1565b5050565b6001600160a01b0381163314610dff5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161095b565b610d8b8282612665565b6001600160a01b0381166000908152600f6020908152604091829020805483518184028101840190945280845260609392830182828015610e6957602002820191906000526020600020905b815481526020019060010190808311610e55575b50505050509050919050565b610a9183838360405180602001604052806000815250611956565b60038054610e9d906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec9906132cd565b8015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b505050505081565b601154600090819060ff1615610f465760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610f6757600080fd5b60008311610fb75760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e203000000000604482015260640161095b565b600b83106110075760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e203131000000604482015260640161095b565b611a8583600654611018919061323f565b11156110665760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b600554611073843461326b565b10156110c15760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b60075460405160009161010090046001600160a01b03169034908381818185875af1925050503d8060008114611113576040519150601f19603f3d011682016040523d82523d6000602084013e611118565b606091505b505090508061112657600080fd5b6000805b8581101561115e5760065461114090600161323f565b915061114c3383612426565b8061115681613308565b91505061112a565b506011805460ff1916905560019590945092505050565b600061118f600080516020613393833981519152336117dd565b6111ab5760405162461bcd60e51b815260040161095b90613129565b81516111be906004906020850190612c68565b50600192915050565b6000818152600960205260408120546001600160a01b03168061085b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161095b565b60006001600160a01b0382166112a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161095b565b506001600160a01b03166000908152600a602052604090205490565b60006112d2335b836121a4565b6112ee5760405162461bcd60e51b815260040161095b90613174565b6000828152600860205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60115460009060ff16156113845760405162461bcd60e51b815260040161095b90613208565b6011805460ff1916600117905561139a82612119565b6113e15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261147d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611488335b846121a4565b156114d55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b65206269640000000000000000604482015260640161095b565b60408101516001600160a01b0316331415611553576000341161153a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b608081015161154990346126ca565b60808201526115c3565b8060600151341015801561156a5750806080015134115b6115b65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b3460808201523360408201525b6115ed3460126000335b6001600160a01b03168152602081019190915260400160002054906126ca565b336000818152601260209081526040808320949094558682526008815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516116923390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506011805460ff1916905550600190565b60006116e433611482565b6117005760405162461bcd60e51b815260040161095b90613174565b6040518060a001604052808481526020016117183390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600882529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361179f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610870906132cd565b6001600160a01b03821633141561186e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095b565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118f2600080516020613393833981519152336117dd565b61190e5760405162461bcd60e51b815260040161095b90613129565b60075460ff161561191e57600080fd5b6007805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61195f336112cc565b61197b5760405162461bcd60e51b815260040161095b906131b7565b611987848484846126e5565b50505050565b606061199882612119565b6119fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161095b565b611a04612718565b611a0d83612727565b604051602001611a1e929190613014565b6040516020818303038152906040529050919050565b611a423460126000336115cd565b3360008181526012602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b600082815260208190526040902060010154611a9a90610d17565b610dff5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161095b565b611b17600080516020613393833981519152336117dd565b611b7b5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b606482015260840161095b565b601180549115156101000261ff0019909216919091179055565b600e6020528160005260406000208181548110611bb157600080fd5b90600052602060002001600091509150505481565b60115460009060ff1615611bec5760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615611c0d57600080fd5b611c1682612119565b611c5d5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611cf95760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611d0233611482565b611d605760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b606482015260840161095b565b60808101516040808301516001600160a01b03166000908152601260205220541015611ddf5760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b606482015260840161095b565b60008381526008602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611e3290606490613257565b611e3c919061326b565b60808301516040808501516001600160a01b0316600090815260126020522054919250611e6991906125c1565b6040808401516001600160a01b0316600090815260126020819052918120929092556080840151611e9d92909190336115cd565b336000818152601260208190526040822093909355611ec0928492909190610c42565b33600090815260126020526040808220929092556007549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611f24576040519150601f19603f3d011682016040523d82523d6000602084013e611f29565b606091505b5050905080611f3757600080fd5b611f4a836020015184604001518761228e565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611fc591815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506011805460ff1916905550600192915050565b6000612045600080516020613393833981519152336117dd565b6120ad5760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b606482015260840161095b565b50600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b148061210a57506001600160e01b03198216635b5e139f60e01b145b8061085b575061085b82612841565b6000908152600960205260409020546001600160a01b0316151590565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061216b826111c7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121af82612119565b6122105760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161095b565b600061221b836111c7565b9050806001600160a01b0316846001600160a01b031614806122565750836001600160a01b031661224b846108f3565b6001600160a01b0316145b8061228657506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122a1826111c7565b6001600160a01b0316146123095760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161095b565b6001600160a01b03821661236b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161095b565b612376600082612136565b6123808382612876565b61238a8282612a8c565b6001600160a01b0383166000908152600a602052604081208054600192906123b390849061328a565b90915550506001600160a01b0382166000908152600a602052604081208054600192906123e190849061323f565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b03821661247c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161095b565b61248581612119565b156124d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161095b565b6001600160a01b0382166000908152600a602052604081208054600192906124fb90849061323f565b92505081905550600160066000828254612515919061323f565b90915550506001600160a01b0382166000908152600e602090815260408220805460018101825590835291200181905561254f8282612a8c565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156125d057600080fd5b6125da828461328a565b9392505050565b6125eb82826117dd565b610d8b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556126213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61266f82826117dd565b15610d8b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006126d6828461323f565b90508281101561085b57600080fd5b6126f084848461228e565b6126fc84848484612b5b565b6119875760405162461bcd60e51b815260040161095b906130d7565b606060048054610870906132cd565b60608161274b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612775578061275f81613308565b915061276e9050600a83613257565b915061274f565b60008167ffffffffffffffff81111561279e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127c8576020820181803683370190505b5090505b8415612286576127dd60018361328a565b91506127ea600a86613323565b6127f590603061323f565b60f81b81838151811061281857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061283a600a86613257565b94506127cc565b60006001600160e01b03198216637965db0b60e01b148061085b57506301ffc9a760e01b6001600160e01b031983161461085b565b6000818152600960205260409020546001600160a01b038381169116146128d25760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b604482015260640161095b565b600081815260096020908152604080832080546001600160a01b03199081169091556008835281842084815560018181018054841690556002820180549093169092556003810185905560040184905560108352818420546001600160a01b0387168552600f9093529083205491929161294b916125c1565b90508181146129fe576001600160a01b0384166000908152600f6020526040812080548390811061298c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600f6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106129de57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260109052604090208290555b6001600160a01b0384166000908152600f60205260409020805480612a3357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905582612a513390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600960205260409020546001600160a01b031615612af15760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e000000000000604482015260640161095b565b600081815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600f83529083208054600181810183558286529385200185905592529054612b48916125c1565b6000918252601060205260409091205550565b60006001600160a01b0384163b15612c5d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b9f903390899088908890600401613043565b602060405180830381600087803b158015612bb957600080fd5b505af1925050508015612be9575060408051601f3d908101601f19168201909252612be691810190612f65565b60015b612c43573d808015612c17576040519150601f19603f3d011682016040523d82523d6000602084013e612c1c565b606091505b508051612c3b5760405162461bcd60e51b815260040161095b906130d7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612286565b506001949350505050565b828054612c74906132cd565b90600052602060002090601f016020900481019282612c965760008555612cdc565b82601f10612caf57805160ff1916838001178555612cdc565b82800160010185558215612cdc579182015b82811115612cdc578251825591602001919060010190612cc1565b50612ce8929150612cec565b5090565b5b80821115612ce85760008155600101612ced565b600067ffffffffffffffff80841115612d1c57612d1c613363565b604051601f8501601f19908116603f01168101908282118183101715612d4457612d44613363565b81604052809350858152868686011115612d5d57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d8e57600080fd5b919050565b80358015158114612d8e57600080fd5b600060208284031215612db4578081fd5b6125da82612d77565b60008060408385031215612dcf578081fd5b612dd883612d77565b9150612de660208401612d77565b90509250929050565b600080600060608486031215612e03578081fd5b612e0c84612d77565b9250612e1a60208501612d77565b9150604084013590509250925092565b60008060008060808587031215612e3f578081fd5b612e4885612d77565b9350612e5660208601612d77565b925060408501359150606085013567ffffffffffffffff811115612e78578182fd5b8501601f81018713612e88578182fd5b612e9787823560208401612d01565b91505092959194509250565b60008060408385031215612eb5578182fd5b612ebe83612d77565b9150612de660208401612d93565b60008060408385031215612ede578182fd5b612ee783612d77565b946020939093013593505050565b600060208284031215612f06578081fd5b6125da82612d93565b600060208284031215612f20578081fd5b5035919050565b60008060408385031215612f39578182fd5b82359150612de660208401612d77565b600060208284031215612f5a578081fd5b81356125da81613379565b600060208284031215612f76578081fd5b81516125da81613379565b600060208284031215612f92578081fd5b813567ffffffffffffffff811115612fa8578182fd5b8201601f81018413612fb8578182fd5b61228684823560208401612d01565b60008060408385031215612fd9578182fd5b50508035926020909101359150565b600081518084526130008160208601602086016132a1565b601f01601f19169290920160200192915050565b600083516130268184602088016132a1565b83519083019061303a8183602088016132a1565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061307690830184612fe8565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130b85783518352928401929184019160010161309c565b50909695505050505050565b6020815260006125da6020830184612fe8565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561325257613252613337565b500190565b6000826132665761326661334d565b500490565b600081600019048311821515161561328557613285613337565b500290565b60008282101561329c5761329c613337565b500390565b60005b838110156132bc5781810151838201526020016132a4565b838111156119875750506000910152565b600181811c908216806132e157607f821691505b6020821081141561330257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561331c5761331c613337565b5060010190565b6000826133325761333261334d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461338f57600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122000fae5c4ec3ed844abf393f0ab122e1234ab93e13f1c75c2aa9095c7b8dff92364736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102515760003560e01c80637fc9b4a611610139578063b88d4fde116100b6578063d8f3790f1161007a578063d8f3790f1461075a578063e272b89214610787578063e985e9c5146107a7578063ef5793ce146107f0578063f6e4bba614610810578063f7932ab81461083057600080fd5b8063b88d4fde146106d0578063c87b56dd146106f0578063d0e30db014610710578063d539139314610718578063d547741f1461073a57600080fd5b806395d89b41116100fd57806395d89b4114610657578063a217fddf1461066c578063a22cb46514610681578063b2918503146106a1578063b66a0e5d146106bb57600080fd5b80637fc9b4a61461055b5780638a67456a1461056e578063906f33301461058d57806390ba7a32146105ad57806391d148541461063757600080fd5b80632f2ff15d116101d257806351ed82881161019657806351ed82881461047d57806355f804b3146104a75780636352211e146104c757806370a08231146104e757806375b238fc146105075780637ed0f2811461053b57600080fd5b80632f2ff15d146103db57806336568abe146103fb57806340398d671461041b57806342842e0e14610448578063480080d61461046857600080fd5b806323b872dd1161021957806323b872dd14610326578063248a9ca31461034657806329ee566c146103765780632d1a12f61461039b5780632e1a7d4d146103bb57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b50610276610271366004612f49565b610850565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0610861565b60405161028291906130c4565b3480156102b957600080fd5b506102cd6102c8366004612f0f565b6108f3565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612ecc565b610980565b005b34801561031357600080fd5b506006545b604051908152602001610282565b34801561033257600080fd5b50610305610341366004612def565b610a96565b34801561035257600080fd5b50610318610361366004612f0f565b60009081526020819052604090206001015490565b34801561038257600080fd5b506007546102cd9061010090046001600160a01b031681565b3480156103a757600080fd5b506103056103b6366004612f27565b610ac7565b3480156103c757600080fd5b506103056103d6366004612f0f565b610b95565b3480156103e757600080fd5b506103056103f6366004612f27565b610d00565b34801561040757600080fd5b50610305610416366004612f27565b610d8f565b34801561042757600080fd5b5061043b610436366004612da3565b610e09565b6040516102829190613080565b34801561045457600080fd5b50610305610463366004612def565b610e75565b34801561047457600080fd5b506102a0610e90565b61049061048b366004612f0f565b610f1e565b604080519215158352602083019190915201610282565b3480156104b357600080fd5b506102766104c2366004612f81565b611175565b3480156104d357600080fd5b506102cd6104e2366004612f0f565b6111c7565b3480156104f357600080fd5b50610318610502366004612da3565b61123e565b34801561051357600080fd5b506103187fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561054757600080fd5b50610276610556366004612f0f565b6112c5565b610276610569366004612f0f565b61135e565b34801561057a57600080fd5b5060115461027690610100900460ff1681565b34801561059957600080fd5b506102766105a8366004612fc7565b6116d9565b3480156105b957600080fd5b506106036105c8366004612f0f565b6008602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610282565b34801561064357600080fd5b50610276610652366004612f27565b6117dd565b34801561066357600080fd5b506102a0611806565b34801561067857600080fd5b50610318600081565b34801561068d57600080fd5b5061030561069c366004612ea3565b611815565b3480156106ad57600080fd5b506007546102769060ff1681565b3480156106c757600080fd5b506103056118da565b3480156106dc57600080fd5b506103056106eb366004612e2a565b611956565b3480156106fc57600080fd5b506102a061070b366004612f0f565b61198d565b610305611a34565b34801561072457600080fd5b5061031860008051602061339383398151915281565b34801561074657600080fd5b50610305610755366004612f27565b611a7f565b34801561076657600080fd5b50610318610775366004612da3565b60126020526000908152604090205481565b34801561079357600080fd5b506103056107a2366004612ef5565b611aff565b3480156107b357600080fd5b506102766107c2366004612dbd565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b3480156107fc57600080fd5b5061031861080b366004612ecc565b611b95565b34801561081c57600080fd5b5061027661082b366004612f0f565b611bc6565b34801561083c57600080fd5b5061027661084b366004612da3565b61202b565b600061085b826120d9565b92915050565b606060018054610870906132cd565b80601f016020809104026020016040519081016040528092919081815260200182805461089c906132cd565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b60006108fe82612119565b6109645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600b60205260409020546001600160a01b031690565b600061098b826111c7565b9050806001600160a01b0316836001600160a01b031614156109f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161095b565b336001600160a01b0382161480610a155750610a1581336107c2565b610a875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095b565b610a918383612136565b505050565b610aa033826121a4565b610abc5760405162461bcd60e51b815260040161095b906131b7565b610a9183838361228e565b610adf600080516020613393833981519152336117dd565b610afb5760405162461bcd60e51b815260040161095b90613129565b611a8582600654610b0c919061323f565b1115610b5a5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60005b82811015610a915760006006546001610b76919061323f565b9050610b828382612426565b5080610b8d81613308565b915050610b5d565b60115460ff1615610bb85760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610bd957600080fd5b33600090815260126020526040902054811115610c385760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e00604482015260640161095b565b610c628160126000335b6001600160a01b03168152602081019190915260400160002054906125c1565b3360008181526012602052604080822093909355915183908381818185875af1925050503d8060008114610cb2576040519150601f19603f3d011682016040523d82523d6000602084013e610cb7565b606091505b5050905080610cc557600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506011805460ff19169055565b600082815260208190526040902060010154610d1d905b336117dd565b610d815760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161095b565b610d8b82826125e1565b5050565b6001600160a01b0381163314610dff5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161095b565b610d8b8282612665565b6001600160a01b0381166000908152600f6020908152604091829020805483518184028101840190945280845260609392830182828015610e6957602002820191906000526020600020905b815481526020019060010190808311610e55575b50505050509050919050565b610a9183838360405180602001604052806000815250611956565b60038054610e9d906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec9906132cd565b8015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b505050505081565b601154600090819060ff1615610f465760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610f6757600080fd5b60008311610fb75760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e203000000000604482015260640161095b565b600b83106110075760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e203131000000604482015260640161095b565b611a8583600654611018919061323f565b11156110665760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b600554611073843461326b565b10156110c15760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b60075460405160009161010090046001600160a01b03169034908381818185875af1925050503d8060008114611113576040519150601f19603f3d011682016040523d82523d6000602084013e611118565b606091505b505090508061112657600080fd5b6000805b8581101561115e5760065461114090600161323f565b915061114c3383612426565b8061115681613308565b91505061112a565b506011805460ff1916905560019590945092505050565b600061118f600080516020613393833981519152336117dd565b6111ab5760405162461bcd60e51b815260040161095b90613129565b81516111be906004906020850190612c68565b50600192915050565b6000818152600960205260408120546001600160a01b03168061085b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161095b565b60006001600160a01b0382166112a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161095b565b506001600160a01b03166000908152600a602052604090205490565b60006112d2335b836121a4565b6112ee5760405162461bcd60e51b815260040161095b90613174565b6000828152600860205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60115460009060ff16156113845760405162461bcd60e51b815260040161095b90613208565b6011805460ff1916600117905561139a82612119565b6113e15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261147d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611488335b846121a4565b156114d55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b65206269640000000000000000604482015260640161095b565b60408101516001600160a01b0316331415611553576000341161153a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b608081015161154990346126ca565b60808201526115c3565b8060600151341015801561156a5750806080015134115b6115b65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b3460808201523360408201525b6115ed3460126000335b6001600160a01b03168152602081019190915260400160002054906126ca565b336000818152601260209081526040808320949094558682526008815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516116923390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506011805460ff1916905550600190565b60006116e433611482565b6117005760405162461bcd60e51b815260040161095b90613174565b6040518060a001604052808481526020016117183390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600882529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361179f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610870906132cd565b6001600160a01b03821633141561186e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095b565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118f2600080516020613393833981519152336117dd565b61190e5760405162461bcd60e51b815260040161095b90613129565b60075460ff161561191e57600080fd5b6007805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61195f336112cc565b61197b5760405162461bcd60e51b815260040161095b906131b7565b611987848484846126e5565b50505050565b606061199882612119565b6119fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161095b565b611a04612718565b611a0d83612727565b604051602001611a1e929190613014565b6040516020818303038152906040529050919050565b611a423460126000336115cd565b3360008181526012602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b600082815260208190526040902060010154611a9a90610d17565b610dff5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161095b565b611b17600080516020613393833981519152336117dd565b611b7b5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b606482015260840161095b565b601180549115156101000261ff0019909216919091179055565b600e6020528160005260406000208181548110611bb157600080fd5b90600052602060002001600091509150505481565b60115460009060ff1615611bec5760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615611c0d57600080fd5b611c1682612119565b611c5d5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611cf95760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611d0233611482565b611d605760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b606482015260840161095b565b60808101516040808301516001600160a01b03166000908152601260205220541015611ddf5760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b606482015260840161095b565b60008381526008602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611e3290606490613257565b611e3c919061326b565b60808301516040808501516001600160a01b0316600090815260126020522054919250611e6991906125c1565b6040808401516001600160a01b0316600090815260126020819052918120929092556080840151611e9d92909190336115cd565b336000818152601260208190526040822093909355611ec0928492909190610c42565b33600090815260126020526040808220929092556007549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611f24576040519150601f19603f3d011682016040523d82523d6000602084013e611f29565b606091505b5050905080611f3757600080fd5b611f4a836020015184604001518761228e565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611fc591815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506011805460ff1916905550600192915050565b6000612045600080516020613393833981519152336117dd565b6120ad5760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b606482015260840161095b565b50600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b148061210a57506001600160e01b03198216635b5e139f60e01b145b8061085b575061085b82612841565b6000908152600960205260409020546001600160a01b0316151590565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061216b826111c7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121af82612119565b6122105760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161095b565b600061221b836111c7565b9050806001600160a01b0316846001600160a01b031614806122565750836001600160a01b031661224b846108f3565b6001600160a01b0316145b8061228657506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122a1826111c7565b6001600160a01b0316146123095760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161095b565b6001600160a01b03821661236b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161095b565b612376600082612136565b6123808382612876565b61238a8282612a8c565b6001600160a01b0383166000908152600a602052604081208054600192906123b390849061328a565b90915550506001600160a01b0382166000908152600a602052604081208054600192906123e190849061323f565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b03821661247c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161095b565b61248581612119565b156124d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161095b565b6001600160a01b0382166000908152600a602052604081208054600192906124fb90849061323f565b92505081905550600160066000828254612515919061323f565b90915550506001600160a01b0382166000908152600e602090815260408220805460018101825590835291200181905561254f8282612a8c565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156125d057600080fd5b6125da828461328a565b9392505050565b6125eb82826117dd565b610d8b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556126213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61266f82826117dd565b15610d8b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006126d6828461323f565b90508281101561085b57600080fd5b6126f084848461228e565b6126fc84848484612b5b565b6119875760405162461bcd60e51b815260040161095b906130d7565b606060048054610870906132cd565b60608161274b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612775578061275f81613308565b915061276e9050600a83613257565b915061274f565b60008167ffffffffffffffff81111561279e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127c8576020820181803683370190505b5090505b8415612286576127dd60018361328a565b91506127ea600a86613323565b6127f590603061323f565b60f81b81838151811061281857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061283a600a86613257565b94506127cc565b60006001600160e01b03198216637965db0b60e01b148061085b57506301ffc9a760e01b6001600160e01b031983161461085b565b6000818152600960205260409020546001600160a01b038381169116146128d25760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b604482015260640161095b565b600081815260096020908152604080832080546001600160a01b03199081169091556008835281842084815560018181018054841690556002820180549093169092556003810185905560040184905560108352818420546001600160a01b0387168552600f9093529083205491929161294b916125c1565b90508181146129fe576001600160a01b0384166000908152600f6020526040812080548390811061298c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600f6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106129de57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260109052604090208290555b6001600160a01b0384166000908152600f60205260409020805480612a3357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905582612a513390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600960205260409020546001600160a01b031615612af15760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e000000000000604482015260640161095b565b600081815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600f83529083208054600181810183558286529385200185905592529054612b48916125c1565b6000918252601060205260409091205550565b60006001600160a01b0384163b15612c5d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b9f903390899088908890600401613043565b602060405180830381600087803b158015612bb957600080fd5b505af1925050508015612be9575060408051601f3d908101601f19168201909252612be691810190612f65565b60015b612c43573d808015612c17576040519150601f19603f3d011682016040523d82523d6000602084013e612c1c565b606091505b508051612c3b5760405162461bcd60e51b815260040161095b906130d7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612286565b506001949350505050565b828054612c74906132cd565b90600052602060002090601f016020900481019282612c965760008555612cdc565b82601f10612caf57805160ff1916838001178555612cdc565b82800160010185558215612cdc579182015b82811115612cdc578251825591602001919060010190612cc1565b50612ce8929150612cec565b5090565b5b80821115612ce85760008155600101612ced565b600067ffffffffffffffff80841115612d1c57612d1c613363565b604051601f8501601f19908116603f01168101908282118183101715612d4457612d44613363565b81604052809350858152868686011115612d5d57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d8e57600080fd5b919050565b80358015158114612d8e57600080fd5b600060208284031215612db4578081fd5b6125da82612d77565b60008060408385031215612dcf578081fd5b612dd883612d77565b9150612de660208401612d77565b90509250929050565b600080600060608486031215612e03578081fd5b612e0c84612d77565b9250612e1a60208501612d77565b9150604084013590509250925092565b60008060008060808587031215612e3f578081fd5b612e4885612d77565b9350612e5660208601612d77565b925060408501359150606085013567ffffffffffffffff811115612e78578182fd5b8501601f81018713612e88578182fd5b612e9787823560208401612d01565b91505092959194509250565b60008060408385031215612eb5578182fd5b612ebe83612d77565b9150612de660208401612d93565b60008060408385031215612ede578182fd5b612ee783612d77565b946020939093013593505050565b600060208284031215612f06578081fd5b6125da82612d93565b600060208284031215612f20578081fd5b5035919050565b60008060408385031215612f39578182fd5b82359150612de660208401612d77565b600060208284031215612f5a578081fd5b81356125da81613379565b600060208284031215612f76578081fd5b81516125da81613379565b600060208284031215612f92578081fd5b813567ffffffffffffffff811115612fa8578182fd5b8201601f81018413612fb8578182fd5b61228684823560208401612d01565b60008060408385031215612fd9578182fd5b50508035926020909101359150565b600081518084526130008160208601602086016132a1565b601f01601f19169290920160200192915050565b600083516130268184602088016132a1565b83519083019061303a8183602088016132a1565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061307690830184612fe8565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130b85783518352928401929184019160010161309c565b50909695505050505050565b6020815260006125da6020830184612fe8565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561325257613252613337565b500190565b6000826132665761326661334d565b500490565b600081600019048311821515161561328557613285613337565b500290565b60008282101561329c5761329c613337565b500390565b60005b838110156132bc5781810151838201526020016132a4565b838111156119875750506000910152565b600181811c908216806132e157607f821691505b6020821081141561330257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561331c5761331c613337565b5060010190565b6000826133325761333261334d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461338f57600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122000fae5c4ec3ed844abf393f0ab122e1234ab93e13f1c75c2aa9095c7b8dff92364736f6c63430008040033

Deployed Bytecode Sourcemap

17456:6093:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18179:161;;;;;;;;;;-1:-1:-1;18179:161:0;;;;;:::i;:::-;;:::i;:::-;;;7899:14:1;;7892:22;7874:41;;7862:2;7847:18;18179:161:0;;;;;;;;9192:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10289:221::-;;;;;;;;;;-1:-1:-1;10289:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6557:32:1;;;6539:51;;6527:2;6512:18;10289:221:0;6494:102:1;9884:397:0;;;;;;;;;;-1:-1:-1;9884:397:0;;;;;:::i;:::-;;:::i;:::-;;9414:89;;;;;;;;;;-1:-1:-1;9485:10:0;;9414:89;;;8335:25:1;;;8323:2;8308:18;9414:89:0;8290:76:1;10993:252:0;;;;;;;;;;-1:-1:-1;10993:252:0;;;;;:::i;:::-;;:::i;5278:123::-;;;;;;;;;;-1:-1:-1;5278:123:0;;;;;:::i;:::-;5344:7;5371:12;;;;;;;;;;:22;;;;5278:123;7482:22;;;;;;;;;;-1:-1:-1;7482:22:0;;;;;;;-1:-1:-1;;;;;7482:22:0;;;14998:386;;;;;;;;;;-1:-1:-1;14998:386:0;;;;;:::i;:::-;;:::i;22971:394::-;;;;;;;;;;-1:-1:-1;22971:394:0;;;;;:::i;:::-;;:::i;5409:232::-;;;;;;;;;;-1:-1:-1;5409:232:0;;;;;:::i;:::-;;:::i;5892:218::-;;;;;;;;;;-1:-1:-1;5892:218:0;;;;;:::i;:::-;;:::i;19040:124::-;;;;;;;;;;-1:-1:-1;19040:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11253:151::-;;;;;;;;;;-1:-1:-1;11253:151:0;;;;;:::i;:::-;;:::i;7260:27::-;;;;;;;;;;;;;:::i;22303:660::-;;;;;;:::i;:::-;;:::i;:::-;;;;8119:14:1;;8112:22;8094:41;;8166:2;8151:18;;8144:34;;;;8067:18;22303:660:0;8049:135:1;18551:224:0;;;;;;;;;;-1:-1:-1;18551:224:0;;;;;:::i;:::-;;:::i;8945:239::-;;;;;;;;;;-1:-1:-1;8945:239:0;;;;;:::i;:::-;;:::i;8729:208::-;;;;;;;;;;-1:-1:-1;8729:208:0;;;;;:::i;:::-;;:::i;7135:60::-;;;;;;;;;;;;7172:23;7135:60;;19516:280;;;;;;;;;;-1:-1:-1;19516:280:0;;;;;:::i;:::-;;:::i;19806:1016::-;;;;;;:::i;:::-;;:::i;17561:26::-;;;;;;;;;;-1:-1:-1;17561:26:0;;;;;;;;;;;19172:336;;;;;;;;;;-1:-1:-1;19172:336:0;;;;;:::i;:::-;;:::i;7515:43::-;;;;;;;;;;-1:-1:-1;7515:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7515:43:0;;;;;;;;;;;;;;;22642:25:1;;;-1:-1:-1;;;;;22741:15:1;;;22736:2;22721:18;;22714:43;22793:15;;;;22773:18;;;22766:43;;;;22840:2;22825:18;;22818:34;22883:3;22868:19;;22861:35;22629:3;22614:19;7515:43:0;22596:306:1;5131:139:0;;;;;;;;;;-1:-1:-1;5131:139:0;;;;;:::i;:::-;;:::i;9300:104::-;;;;;;;;;;;;;:::i;4540:49::-;;;;;;;;;;-1:-1:-1;4540:49:0;4585:4;4540:49;;10518:295;;;;;;;;;;-1:-1:-1;10518:295:0;;;;;:::i;:::-;;:::i;7402:30::-;;;;;;;;;;-1:-1:-1;7402:30:0;;;;;;;;22066:229;;;;;;;;;;;;;:::i;11412:285::-;;;;;;;;;;-1:-1:-1;11412:285:0;;;;;:::i;:::-;;:::i;9511:256::-;;;;;;;;;;-1:-1:-1;9511:256:0;;;;;:::i;:::-;;:::i;23373:169::-;;;:::i;7066:62::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7066:62:0;;5649:235;;;;;;;;;;-1:-1:-1;5649:235:0;;;;;:::i;:::-;;:::i;17669:46::-;;;;;;;;;;-1:-1:-1;17669:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;18348:195;;;;;;;;;;-1:-1:-1;18348:195:0;;;;;:::i;:::-;;:::i;10821:164::-;;;;;;;;;;-1:-1:-1;10821:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;10942:25:0;;;10918:4;10942:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10821:164;7861:52;;;;;;;;;;-1:-1:-1;7861:52:0;;;;;:::i;:::-;;:::i;20830:1228::-;;;;;;;;;;-1:-1:-1;20830:1228:0;;;;;:::i;:::-;;:::i;18783:247::-;;;;;;;;;;-1:-1:-1;18783:247:0;;;;;:::i;:::-;;:::i;18179:161::-;18272:4;18296:36;18320:11;18296:23;:36::i;:::-;18289:43;18179:161;-1:-1:-1;;18179:161:0:o;9192:100::-;9246:13;9279:5;9272:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9192:100;:::o;10289:221::-;10365:7;10393:16;10401:7;10393;:16::i;:::-;10385:73;;;;-1:-1:-1;;;10385:73:0;;16569:2:1;10385:73:0;;;16551:21:1;16608:2;16588:18;;;16581:30;16647:34;16627:18;;;16620:62;-1:-1:-1;;;16698:18:1;;;16691:42;16750:19;;10385:73:0;;;;;;;;;-1:-1:-1;10478:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;10478:24:0;;10289:221::o;9884:397::-;9965:13;9981:23;9996:7;9981:14;:23::i;:::-;9965:39;;10029:5;-1:-1:-1;;;;;10023:11:0;:2;-1:-1:-1;;;;;10023:11:0;;;10015:57;;;;-1:-1:-1;;;10015:57:0;;20449:2:1;10015:57:0;;;20431:21:1;20488:2;20468:18;;;20461:30;20527:34;20507:18;;;20500:62;-1:-1:-1;;;20578:18:1;;;20571:31;20619:19;;10015:57:0;20421:223:1;10015:57:0;4074:10;-1:-1:-1;;;;;10093:21:0;;;;:62;;-1:-1:-1;10118:37:0;10135:5;4074:10;10821:164;:::i;10118:37::-;10085:154;;;;-1:-1:-1;;;10085:154:0;;14609:2:1;10085:154:0;;;14591:21:1;14648:2;14628:18;;;14621:30;14687:34;14667:18;;;14660:62;14758:26;14738:18;;;14731:54;14802:19;;10085:154:0;14581:246:1;10085:154:0;10252:21;10261:2;10265:7;10252:8;:21::i;:::-;9884:397;;;:::o;10993:252::-;11101:41;4074:10;11134:7;11101:18;:41::i;:::-;11093:103;;;;-1:-1:-1;;;11093:103:0;;;;;;;:::i;:::-;11209:28;11219:4;11225:2;11229:7;11209:9;:28::i;14998:386::-;15074:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;15074:34::-;15066:90;;;;-1:-1:-1;;;15066:90:0;;;;;;;:::i;:::-;15194:4;15186:5;15175:10;;:16;;;;:::i;:::-;:23;;15167:65;;;;-1:-1:-1;;;15167:65:0;;21269:2:1;15167:65:0;;;21251:21:1;21308:2;21288:18;;;21281:30;21347:31;21327:18;;;21320:59;21396:18;;15167:65:0;21241:179:1;15167:65:0;15248:6;15243:134;15264:5;15260:1;:9;15243:134;;;15291:16;15310:10;;15323:1;15310:14;;;;:::i;:::-;15291:33;;15339:26;15345:9;15356:8;15339:5;:26::i;:::-;-1:-1:-1;15271:3:0;;;;:::i;:::-;;;;15243:134;;22971:394;18066:4;;;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;;;;23044:14;::::1;18117:11:::0;23044:14:::1;23043:15;23035:24;;;::::0;::::1;;4074:10:::0;23088:24:::1;::::0;;;:10:::1;:24;::::0;;;;;23078:34;::::1;;23070:77;;;::::0;-1:-1:-1;;;23070:77:0;;17751:2:1;23070:77:0::1;::::0;::::1;17733:21:1::0;17790:2;17770:18;;;17763:30;17829:33;17809:18;;;17802:61;17880:18;;23070:77:0::1;17723:181:1::0;23070:77:0::1;23185:36;23214:6:::0;23185:10:::1;:24;4074:10:::0;23196:12:::1;-1:-1:-1::0;;;;;23185:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23185:24:0;;;:28:::1;:36::i;:::-;4074:10:::0;23158:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:63;;;;23251:33;;23273:6;;23158:24;23251:33;23158:24;23251:33;23273:6;4074:10;23251:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23232:52;;;23303:7;23295:16;;;::::0;::::1;;23327:30;::::0;23350:6;;4074:10;;23327:30:::1;::::0;;;::::1;-1:-1:-1::0;;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;22971:394::o;5409:232::-;5344:7;5371:12;;;;;;;;;;:22;;;5502:41;;5510:18;4074:10;5131:139;:::i;5502:41::-;5494:101;;;;-1:-1:-1;;;5494:101:0;;8797:2:1;5494:101:0;;;8779:21:1;8836:2;8816:18;;;8809:30;8875:34;8855:18;;;8848:62;-1:-1:-1;;;8926:18:1;;;8919:45;8981:19;;5494:101:0;8769:237:1;5494:101:0;5608:25;5619:4;5625:7;5608:10;:25::i;:::-;5409:232;;:::o;5892:218::-;-1:-1:-1;;;;;5988:23:0;;4074:10;5988:23;5980:83;;;;-1:-1:-1;;;5980:83:0;;21987:2:1;5980:83:0;;;21969:21:1;22026:2;22006:18;;;21999:30;22065:34;22045:18;;;22038:62;-1:-1:-1;;;22116:18:1;;;22109:45;22171:19;;5980:83:0;21959:237:1;5980:83:0;6076:26;6088:4;6094:7;6076:11;:26::i;19040:124::-;-1:-1:-1;;;;;19138:18:0;;;;;;:10;:18;;;;;;;;;19131:25;;;;;;;;;;;;;;;;;19103:16;;19131:25;;;19138:18;19131:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19040:124;;;:::o;11253:151::-;11357:39;11374:4;11380:2;11384:7;11357:39;;;;;;;;;;;;:16;:39::i;7260:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22303:660::-;18066:4;;22371;;;;18066;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;;;;22402:14;::::1;18117:11:::0;22402:14:::1;22401:15;22393:24;;;::::0;::::1;;22439:1;22430:8;:10;22422:51;;;::::0;-1:-1:-1;;;22422:51:0;;9632:2:1;22422:51:0::1;::::0;::::1;9614:21:1::0;9671:2;9651:18;;;9644:30;9710;9690:18;;;9683:58;9758:18;;22422:51:0::1;9604:178:1::0;22422:51:0::1;22495:2;22486:8;:11;22478:53;;;::::0;-1:-1:-1;;;22478:53:0;;12652:2:1;22478:53:0::1;::::0;::::1;12634:21:1::0;12691:2;12671:18;;;12664:30;12730:31;12710:18;;;12703:59;12779:18;;22478:53:0::1;12624:179:1::0;22478:53:0::1;22572:4;22561:8;22550:10;;:19;;;;:::i;:::-;:26;;22542:68;;;::::0;-1:-1:-1;;;22542:68:0;;21269:2:1;22542:68:0::1;::::0;::::1;21251:21:1::0;21308:2;21288:18;;;21281:30;21347:31;21327:18;;;21320:59;21396:18;;22542:68:0::1;21241:179:1::0;22542:68:0::1;22655:5;::::0;22633:18:::1;22643:8:::0;22633:9:::1;:18;:::i;:::-;:27;;22625:71;;;::::0;-1:-1:-1;;;22625:71:0;;12292:2:1;22625:71:0::1;::::0;::::1;12274:21:1::0;12331:2;12311:18;;;12304:30;12370:33;12350:18;;;12343:61;12421:18;;22625:71:0::1;12264:181:1::0;22625:71:0::1;22726:7;::::0;:33:::1;::::0;22708:12:::1;::::0;22726:7:::1;::::0;::::1;-1:-1:-1::0;;;;;22726:7:0::1;::::0;22745:9:::1;::::0;22708:12;22726:33;22708:12;22726:33;22745:9;22726:7;:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22707:52;;;22778:7;22770:16;;;::::0;::::1;;22797:13;::::0;22815:108:::1;22836:8;22832:1;:12;22815:108;;;22868:10;::::0;:14:::1;::::0;22881:1:::1;22868:14;:::i;:::-;22857:25:::0;-1:-1:-1;22888:29:0::1;4074:10:::0;22908:8:::1;22888:5;:29::i;:::-;22846:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22815:108;;;-1:-1:-1::0;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;22941:4:::1;::::0;22946:8;;-1:-1:-1;22303:660:0;-1:-1:-1;;;22303:660:0:o;18551:224::-;18609:4;18634:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;18634:34::-;18626:90;;;;-1:-1:-1;;;18626:90:0;;;;;;;:::i;:::-;18727:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;18761:4:0;;18551:224;-1:-1:-1;;18551:224:0:o;8945:239::-;9017:7;9053:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9053:16:0;9088:19;9080:73;;;;-1:-1:-1;;;9080:73:0;;15445:2:1;9080:73:0;;;15427:21:1;15484:2;15464:18;;;15457:30;15523:34;15503:18;;;15496:62;-1:-1:-1;;;15574:18:1;;;15567:39;15623:19;;9080:73:0;15417:231:1;8729:208:0;8801:7;-1:-1:-1;;;;;8829:19:0;;8821:74;;;;-1:-1:-1;;;8821:74:0;;15034:2:1;8821:74:0;;;15016:21:1;15073:2;15053:18;;;15046:30;15112:34;15092:18;;;15085:62;-1:-1:-1;;;15163:18:1;;;15156:40;15213:19;;8821:74:0;15006:232:1;8821:74:0;-1:-1:-1;;;;;;8913:16:0;;;;;:9;:16;;;;;;;8729:208::o;19516:280::-;19573:4;19597:41;4074:10;19616:12;19630:7;19597:18;:41::i;:::-;19589:89;;;;-1:-1:-1;;;19589:89:0;;;;;;;:::i;:::-;19696:19;;;;:10;:19;;;;;;19689:26;;;;;;;;-1:-1:-1;;;;;;19689:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19731:35;19696:19;;4074:10;;19731:35;;19696:19;19731:35;-1:-1:-1;19784:4:0;;19516:280;-1:-1:-1;19516:280:0:o;19806:1016::-;18066:4;;19875;;18066;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;19899:16:::1;19907:7:::0;19899::::1;:16::i;:::-;19891:53;;;::::0;-1:-1:-1;;;19891:53:0;;13839:2:1;19891:53:0::1;::::0;::::1;13821:21:1::0;13878:2;13858:18;;;13851:30;-1:-1:-1;;;13897:18:1;;;13890:54;13961:18;;19891:53:0::1;13811:174:1::0;19891:53:0::1;19955:20;19978:19:::0;;;:10:::1;:19;::::0;;;;;;;;19955:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;19955:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;20008:62:::1;;;::::0;-1:-1:-1;;;20008:62:0;;19346:2:1;20008:62:0::1;::::0;::::1;19328:21:1::0;19385:2;19365:18;;;19358:30;-1:-1:-1;;;19404:18:1;;;19397:55;19469:18;;20008:62:0::1;19318:175:1::0;20008:62:0::1;20090:41;4074:10:::0;20109:12:::1;20123:7;20090:18;:41::i;:::-;20089:42;20081:79;;;::::0;-1:-1:-1;;;20081:79:0;;15855:2:1;20081:79:0::1;::::0;::::1;15837:21:1::0;15894:2;15874:18;;;15867:30;15933:26;15913:18;;;15906:54;15977:18;;20081:79:0::1;15827:174:1::0;20081:79:0::1;20175:12;::::0;::::1;::::0;-1:-1:-1;;;;;20175:28:0::1;4074:10:::0;20175:28:::1;20171:399;;;20239:1;20227:9;:13;20219:55;;;::::0;-1:-1:-1;;;20219:55:0;;16982:2:1;20219:55:0::1;::::0;::::1;16964:21:1::0;17021:2;17001:18;;;16994:30;17060:32;17040:18;;;17033:60;17110:18;;20219:55:0::1;16954:180:1::0;20219:55:0::1;20308:16;::::0;::::1;::::0;:31:::1;::::0;20329:9:::1;20308:20;:31::i;:::-;20289:16;::::0;::::1;:50:::0;20171:399:::1;;;20392:5;:14;;;20379:9;:27;;:59;;;;;20422:5;:16;;;20410:9;:28;20379:59;20371:102;;;::::0;-1:-1:-1;;;20371:102:0;;16982:2:1;20371:102:0::1;::::0;::::1;16964:21:1::0;17021:2;17001:18;;;16994:30;17060:32;17040:18;;;17033:60;17110:18;;20371:102:0::1;16954:180:1::0;20371:102:0::1;20507:9;20488:16;::::0;::::1;:28:::0;4074:10;20531:12:::1;::::0;::::1;:27:::0;20171:399:::1;20607:39;20636:9;20607:10;:24;4074:10:::0;20618:12:::1;-1:-1:-1::0;;;;;20607:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20607:24:0;;;:28:::1;:39::i;:::-;4074:10:::0;20580:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:66;;;;20657:19;;;:10:::1;:19:::0;;;;;:27;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;20657:27:0;;::::1;-1:-1:-1::0;;;;;;20657:27:0;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;20700:31;;20721:9:::1;::::0;20700:31:::1;::::0;::::1;20784:7;20767:5;:16;;;20754:12;4074:10:::0;;3994:98;20754:12:::1;-1:-1:-1::0;;;;;20747:45:0::1;;;;;;;;;;;-1:-1:-1::0;;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;-1:-1:-1;20810:4:0::1;::::0;19806:1016::o;19172:336::-;19236:4;19260:41;4074:10;19279:12;3994:98;19260:41;19252:89;;;;-1:-1:-1;;;19252:89:0;;;;;;;:::i;:::-;19373:51;;;;;;;;19381:7;19373:51;;;;19389:12;4074:10;;3994:98;19389:12;-1:-1:-1;;;;;19373:51:0;;;;;19410:1;19373:51;;;;;;;;;;;;;;;;;;;;;19352:19;;;:10;:19;;;;;;:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19352:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19413:8;19363:7;19448:12;4074:10;;3994:98;19448:12;-1:-1:-1;;;;;19440:38:0;;;;;;;;;;;-1:-1:-1;19496:4:0;19172:336;;;;:::o;5131:139::-;5209:4;5233:12;;;;;;;;;;;-1:-1:-1;;;;;5233:29:0;;;;;;;;;;;;;;;5131:139::o;9300:104::-;9356:13;9389:7;9382:14;;;;;:::i;10518:295::-;-1:-1:-1;;;;;10621:24:0;;4074:10;10621:24;;10613:62;;;;-1:-1:-1;;;10613:62:0;;11583:2:1;10613:62:0;;;11565:21:1;11622:2;11602:18;;;11595:30;11661:27;11641:18;;;11634:55;11706:18;;10613:62:0;11555:175:1;10613:62:0;4074:10;10688:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10688:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;10688:53:0;;;;;;;;;;10757:48;;7874:41:1;;;10688:42:0;;4074:10;10757:48;;7847:18:1;10757:48:0;;;;;;;10518:295;;:::o;22066:229::-;22115:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;22115:34::-;22107:90;;;;-1:-1:-1;;;22107:90:0;;;;;;;:::i;:::-;22217:10;;;;22216:11;22208:20;;;;;;22239:10;:17;;-1:-1:-1;;22239:17:0;22252:4;22239:17;;;22272:15;;;;22239:10;;22272:15;22066:229::o;11412:285::-;11544:41;4074:10;11563:12;3994:98;11544:41;11536:103;;;;-1:-1:-1;;;11536:103:0;;;;;;;:::i;:::-;11650:39;11664:4;11670:2;11674:7;11683:5;11650:13;:39::i;:::-;11412:285;;;;:::o;9511:256::-;9584:13;9618:16;9626:7;9618;:16::i;:::-;9610:76;;;;-1:-1:-1;;;9610:76:0;;18111:2:1;9610:76:0;;;18093:21:1;18150:2;18130:18;;;18123:30;18189:34;18169:18;;;18162:62;-1:-1:-1;;;18240:18:1;;;18233:45;18295:19;;9610:76:0;18083:237:1;9610:76:0;9728:10;:8;:10::i;:::-;9740:17;9749:7;9740:8;:17::i;:::-;9711:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9697:62;;9511:256;;;:::o;23373:169::-;23447:39;23476:9;23447:10;:24;4074:10;23458:12;3994:98;23447:39;4074:10;23420:24;;;;:10;:24;;;;;;:66;;;;23502:32;;23524:9;;23502:32;;;23373:169::o;5649:235::-;5344:7;5371:12;;;;;;;;;;:22;;;5743:41;;5751:18;5278:123;5743:41;5735:102;;;;-1:-1:-1;;;5735:102:0;;14192:2:1;5735:102:0;;;14174:21:1;14231:2;14211:18;;;14204:30;14270:34;14250:18;;;14243:62;-1:-1:-1;;;14321:18:1;;;14314:46;14377:19;;5735:102:0;14164:238:1;18348:195:0;18414:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;18414:34::-;18406:94;;;;-1:-1:-1;;;18406:94:0;;13423:2:1;18406:94:0;;;13405:21:1;13462:2;13442:18;;;13435:30;13501:34;13481:18;;;13474:62;-1:-1:-1;;;13552:18:1;;;13545:45;13607:19;;18406:94:0;13395:237:1;18406:94:0;18511:14;:24;;;;;;;-1:-1:-1;;18511:24:0;;;;;;;;;18348:195::o;7861:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20830:1228::-;18066:4;;20893;;18066;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;;;;20918:14;::::1;18117:11:::0;20918:14:::1;20917:15;20909:24;;;::::0;::::1;;20952:16;20960:7;20952;:16::i;:::-;20944:53;;;::::0;-1:-1:-1;;;20944:53:0;;13839:2:1;20944:53:0::1;::::0;::::1;13821:21:1::0;13878:2;13858:18;;;13851:30;-1:-1:-1;;;13897:18:1;;;13890:54;13961:18;;20944:53:0::1;13811:174:1::0;20944:53:0::1;21008:20;21031:19:::0;;;:10:::1;:19;::::0;;;;;;;;21008:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;21008:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;21061:62:::1;;;::::0;-1:-1:-1;;;21061:62:0;;19346:2:1;21061:62:0::1;::::0;::::1;19328:21:1::0;19385:2;19365:18;;;19358:30;-1:-1:-1;;;19404:18:1;;;19397:55;19469:18;;21061:62:0::1;19318:175:1::0;21061:62:0::1;21142:41;4074:10:::0;21161:12:::1;3994:98:::0;21142:41:::1;21134:95;;;::::0;-1:-1:-1;;;21134:95:0;;18527:2:1;21134:95:0::1;::::0;::::1;18509:21:1::0;18566:2;18546:18;;;18539:30;18605:34;18585:18;;;18578:62;-1:-1:-1;;;18656:18:1;;;18649:39;18705:19;;21134:95:0::1;18499:231:1::0;21134:95:0::1;21276:16;::::0;::::1;::::0;21259:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21248:24:0::1;;::::0;;;:10:::1;:24;::::0;;;:44:::1;;21240:96;;;::::0;-1:-1:-1;;;21240:96:0;;18937:2:1;21240:96:0::1;::::0;::::1;18919:21:1::0;18976:2;18956:18;;;18949:30;19015:34;18995:18;;;18988:62;-1:-1:-1;;;19066:18:1;;;19059:38;19114:19;;21240:96:0::1;18909:230:1::0;21240:96:0::1;21354:19;::::0;;;:10:::1;:19;::::0;;;;21347:26;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;21347:26:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;21408:16:::1;::::0;::::1;::::0;:22:::1;::::0;21427:3:::1;::::0;21408:22:::1;:::i;:::-;:41;;;;:::i;:::-;21516:16;::::0;::::1;::::0;21498:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21487:24:0::1;;::::0;;;:10:::1;:24;::::0;;;21384:65;;-1:-1:-1;21487:46:0::1;::::0;:24;:28:::1;:46::i;:::-;21471:12;::::0;;::::1;::::0;-1:-1:-1;;;;;21460:24:0::1;;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21600:16:::1;::::0;::::1;::::0;21571:46:::1;::::0;21600:16;;21460:10;4074;21582:12:::1;3994:98:::0;21571:46:::1;4074:10:::0;21544:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21655:43:::1;::::0;21684:13;;21544:10;;:24;21666:12:::1;3994:98:::0;21655:43:::1;4074:10:::0;21628:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:70;;;;21728:7:::1;::::0;:37;;21628:24;;21728:7:::1;::::0;::::1;-1:-1:-1::0;;;;;21728:7:0::1;::::0;21747:13;;21628:24;21728:37;21628:24;21728:37;21747:13;21728:7;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21709:56;;;21784:7;21776:16;;;::::0;::::1;;21803:43;21813:5;:11;;;21825:5;:12;;;21838:7;21803:9;:43::i;:::-;21862:35;::::0;21889:7;;4074:10;;21862:35:::1;::::0;;;::::1;21945:16;::::0;::::1;::::0;21932:12:::1;::::0;::::1;::::0;-1:-1:-1;;;;;21913:57:0::1;4074:10:::0;-1:-1:-1;;;;;21913:57:0::1;;21962:7;21913:57;;;;8335:25:1::0;;8323:2;8308:18;;8290:76;21913:57:0::1;;;;;;;;22020:7;22007:5;:12;;;-1:-1:-1::0;;;;;21986:42:0::1;21995:5;:11;;;-1:-1:-1::0;;;;;21986:42:0::1;;;;;;;;;;;-1:-1:-1::0;;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;-1:-1:-1;22046:4:0::1;::::0;20830:1228;-1:-1:-1;;20830:1228:0:o;18783:247::-;18850:4;18874:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;18874:34::-;18866:98;;;;-1:-1:-1;;;18866:98:0;;10346:2:1;18866:98:0;;;10328:21:1;10385:2;10365:18;;;10358:30;10424:34;10404:18;;;10397:62;-1:-1:-1;;;10475:18:1;;;10468:49;10534:19;;18866:98:0;10318:241:1;18866:98:0;-1:-1:-1;18975:7:0;:25;;-1:-1:-1;;;;;18975:25:0;;;;;-1:-1:-1;;;;;;18975:25:0;;;;;;;;;:7;;18783:247::o;8414:307::-;8531:4;-1:-1:-1;;;;;;8555:40:0;;-1:-1:-1;;;8555:40:0;;:105;;-1:-1:-1;;;;;;;8612:48:0;;-1:-1:-1;;;8612:48:0;8555:105;:158;;;;8677:36;8701:11;8677:23;:36::i;11985:127::-;12050:4;12074:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12074:16:0;:30;;;11985:127::o;16325:174::-;16400:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16400:29:0;-1:-1:-1;;;;;16400:29:0;;;;;;;;:24;;16454:23;16400:24;16454:14;:23::i;:::-;-1:-1:-1;;;;;16445:46:0;;;;;;;;;;;16325:174;;:::o;12120:348::-;12213:4;12238:16;12246:7;12238;:16::i;:::-;12230:73;;;;-1:-1:-1;;;12230:73:0;;13010:2:1;12230:73:0;;;12992:21:1;13049:2;13029:18;;;13022:30;13088:34;13068:18;;;13061:62;-1:-1:-1;;;13139:18:1;;;13132:42;13191:19;;12230:73:0;12982:234:1;12230:73:0;12314:13;12330:23;12345:7;12330:14;:23::i;:::-;12314:39;;12383:5;-1:-1:-1;;;;;12372:16:0;:7;-1:-1:-1;;;;;12372:16:0;;:51;;;;12416:7;-1:-1:-1;;;;;12392:31:0;:20;12404:7;12392:11;:20::i;:::-;-1:-1:-1;;;;;12392:31:0;;12372:51;:87;;;-1:-1:-1;;;;;;10942:25:0;;;10918:4;10942:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;12427:32;12364:96;12120:348;-1:-1:-1;;;;12120:348:0:o;15780:537::-;15905:4;-1:-1:-1;;;;;15878:31:0;:23;15893:7;15878:14;:23::i;:::-;-1:-1:-1;;;;;15878:31:0;;15870:85;;;;-1:-1:-1;;;15870:85:0;;17341:2:1;15870:85:0;;;17323:21:1;17380:2;17360:18;;;17353:30;17419:34;17399:18;;;17392:62;-1:-1:-1;;;17470:18:1;;;17463:39;17519:19;;15870:85:0;17313:231:1;15870:85:0;-1:-1:-1;;;;;15974:16:0;;15966:65;;;;-1:-1:-1;;;15966:65:0;;11178:2:1;15966:65:0;;;11160:21:1;11217:2;11197:18;;;11190:30;11256:34;11236:18;;;11229:62;-1:-1:-1;;;11307:18:1;;;11300:34;11351:19;;15966:65:0;11150:226:1;15966:65:0;16096:29;16113:1;16117:7;16096:8;:29::i;:::-;16138;16153:4;16159:7;16138:14;:29::i;:::-;16178:24;16190:2;16194:7;16178:11;:24::i;:::-;-1:-1:-1;;;;;16215:15:0;;;;;;:9;:15;;;;;:20;;16234:1;;16215:15;:20;;16234:1;;16215:20;:::i;:::-;;;;-1:-1:-1;;;;;;;16246:13:0;;;;;;:9;:13;;;;;:18;;16263:1;;16246:13;:18;;16263:1;;16246:18;:::i;:::-;;;;-1:-1:-1;;16282:27:0;;16301:7;;-1:-1:-1;;;;;16282:27:0;;;;;;;;;;;;;15780:537;;;:::o;14507:485::-;-1:-1:-1;;;;;14587:16:0;;14579:61;;;;-1:-1:-1;;;14579:61:0;;16208:2:1;14579:61:0;;;16190:21:1;;;16227:18;;;16220:30;16286:34;16266:18;;;16259:62;16338:18;;14579:61:0;16180:182:1;14579:61:0;14660:16;14668:7;14660;:16::i;:::-;14659:17;14651:58;;;;-1:-1:-1;;;14651:58:0;;9989:2:1;14651:58:0;;;9971:21:1;10028:2;10008:18;;;10001:30;10067;10047:18;;;10040:58;10115:18;;14651:58:0;9961:178:1;14651:58:0;-1:-1:-1;;;;;14780:13:0;;;;;;:9;:13;;;;;:18;;14797:1;;14780:13;:18;;14797:1;;14780:18;:::i;:::-;;;;;;;;14823:1;14809:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14835:18:0;;;;;;:14;:18;;;;;;;:32;;;;;;;;;;;;;;;;14878:24;14850:2;14859:7;14878:11;:24::i;:::-;14918:17;;-1:-1:-1;;;;;14918:17:0;;;14923:7;;14918:17;;;;;14951:33;;14976:7;;-1:-1:-1;;;;;14951:33:0;;;14968:1;;14951:33;;14968:1;;14951:33;14507:485;;:::o;1087:124::-;1145:7;1178:1;1173;:6;;1165:15;;;;;;1198:5;1202:1;1198;:5;:::i;:::-;1191:12;1087:124;-1:-1:-1;;;1087:124:0:o;6441:229::-;6516:22;6524:4;6530:7;6516;:22::i;:::-;6511:152;;6555:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6555:29:0;;;;;;;;;:36;;-1:-1:-1;;6555:36:0;6587:4;6555:36;;;6638:12;4074:10;;3994:98;6638:12;-1:-1:-1;;;;;6611:40:0;6629:7;-1:-1:-1;;;;;6611:40:0;6623:4;6611:40;;;;;;;;;;6441:229;;:::o;6678:230::-;6753:22;6761:4;6767:7;6753;:22::i;:::-;6749:152;;;6824:5;6792:12;;;;;;;;;;;-1:-1:-1;;;;;6792:29:0;;;;;;;;;;:37;;-1:-1:-1;;6792:37:0;;;6849:40;4074:10;;6792:12;;6849:40;;6824:5;6849:40;6678:230;;:::o;1286:142::-;1344:9;1370:5;1374:1;1370;:5;:::i;:::-;1366:9;;1399:1;1394;:6;;1386:15;;;;;11705:272;11819:28;11829:4;11835:2;11839:7;11819:9;:28::i;:::-;11866:48;11889:4;11895:2;11899:7;11908:5;11866:22;:48::i;:::-;11858:111;;;;-1:-1:-1;;;11858:111:0;;;;;;;:::i;9775:99::-;9826:13;9859:7;9852:14;;;;;:::i;12852:534::-;12908:13;12940:10;12936:53;;-1:-1:-1;;12967:10:0;;;;;;;;;;;;-1:-1:-1;;;12967:10:0;;;;;12852:534::o;12936:53::-;13014:5;12999:12;13055:78;13062:9;;13055:78;;13088:8;;;;:::i;:::-;;-1:-1:-1;13111:10:0;;-1:-1:-1;13119:2:0;13111:10;;:::i;:::-;;;13055:78;;;13143:19;13175:6;13165:17;;;;;;-1:-1:-1;;;13165:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13165:17:0;;13143:39;;13193:154;13200:10;;13193:154;;13227:11;13237:1;13227:11;;:::i;:::-;;-1:-1:-1;13296:10:0;13304:2;13296:5;:10;:::i;:::-;13283:24;;:2;:24;:::i;:::-;13270:39;;13253:6;13260;13253:14;;;;;;-1:-1:-1;;;13253:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;13253:56:0;;;;;;;;-1:-1:-1;13324:11:0;13333:2;13324:11;;:::i;:::-;;;13193:154;;4906:217;4991:4;-1:-1:-1;;;;;;5015:47:0;;-1:-1:-1;;;5015:47:0;;:100;;-1:-1:-1;;;;;;;;;;4256:40:0;;;5079:36;4147:157;13698:691;13783:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;13783:26:0;;;:17;;:26;13775:55;;;;-1:-1:-1;;;13775:55:0;;19700:2:1;13775:55:0;;;19682:21:1;19739:2;19719:18;;;19712:30;-1:-1:-1;;;19758:18:1;;;19751:46;19814:18;;13775:55:0;19672:166:1;13775:55:0;13848:17;;;;:7;:17;;;;;;;;13841:24;;-1:-1:-1;;;;;;13841:24:0;;;;;;13883:10;:20;;;;;13876:27;;;13841:24;13876:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13943:14;:24;;;;;;-1:-1:-1;;;;;14003:17:0;;;;:10;:17;;;;;;:24;13943;;13848:17;14003:31;;:28;:31::i;:::-;13978:56;;14069:18;14051:14;:36;14047:247;;-1:-1:-1;;;;;14124:17:0;;14104;14124;;;:10;:17;;;;;:33;;14142:14;;14124:33;;;;-1:-1:-1;;;14124:33:0;;;;;;;;;;;;;;;;;14104:53;;14212:9;14172:10;:17;14183:5;-1:-1:-1;;;;;14172:17:0;-1:-1:-1;;;;;14172:17:0;;;;;;;;;;;;14190:18;14172:37;;;;;;-1:-1:-1;;;14172:37:0;;;;;;;;;;;;;;;;;;;;:49;;;;14236:25;;;:14;:25;;;;;:46;;;14047:247;-1:-1:-1;;;;;14306:17:0;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;14306:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;14372:8;14359:12;4074:10;;3994:98;14359:12;-1:-1:-1;;;;;14345:36:0;;;;;;;;;;;13698:691;;;;:::o;13396:294::-;13505:1;13476:17;;;:7;:17;;;;;;-1:-1:-1;;;;;13476:17:0;:31;13468:70;;;;-1:-1:-1;;;13468:70:0;;11937:2:1;13468:70:0;;;11919:21:1;11976:2;11956:18;;;11949:30;12015:28;11995:18;;;11988:56;12061:18;;13468:70:0;11909:176:1;13468:70:0;13549:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;13549:23:0;-1:-1:-1;;;;;13549:23:0;;;;;;;;13585:15;;;:10;:15;;;;;:30;;-1:-1:-1;13585:30:0;;;;;;;;;;;;;;;13653:15;;:22;;:29;;:26;:29::i;:::-;13626:24;;;;:14;:24;;;;;;:56;-1:-1:-1;13396:294:0:o;16507:843::-;16628:4;-1:-1:-1;;;;;16654:13:0;;208:20;247:8;16650:693;;16690:72;;-1:-1:-1;;;16690:72:0;;-1:-1:-1;;;;;16690:36:0;;;;;:72;;4074:10;;16741:4;;16747:7;;16756:5;;16690:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16690:72:0;;;;;;;;-1:-1:-1;;16690:72:0;;;;;;;;;;;;:::i;:::-;;;16686:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16936:13:0;;16932:341;;16979:60;;-1:-1:-1;;;16979:60:0;;;;;;;:::i;16932:341::-;17223:6;17217:13;17208:6;17204:2;17200:15;17193:38;16686:602;-1:-1:-1;;;;;;16813:55:0;-1:-1:-1;;;16813:55:0;;-1:-1:-1;16806:62:0;;16650:693;-1:-1:-1;17327:4:0;16507:843;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:264::-;3509:6;3517;3570:2;3558:9;3549:7;3545:23;3541:32;3538:2;;;3591:6;3583;3576:22;3538:2;3632:9;3619:23;3609:33;;3661:38;3695:2;3684:9;3680:18;3661:38;:::i;3710:255::-;3768:6;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;3842:6;3834;3827:22;3789:2;3886:9;3873:23;3905:30;3929:5;3905:30;:::i;3970:259::-;4039:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:2;;;4113:6;4105;4098:22;4060:2;4150:9;4144:16;4169:30;4193:5;4169:30;:::i;4234:480::-;4303:6;4356:2;4344:9;4335:7;4331:23;4327:32;4324:2;;;4377:6;4369;4362:22;4324:2;4422:9;4409:23;4455:18;4447:6;4444:30;4441:2;;;4492:6;4484;4477:22;4441:2;4520:22;;4573:4;4565:13;;4561:27;-1:-1:-1;4551:2:1;;4607:6;4599;4592:22;4551:2;4635:73;4700:7;4695:2;4682:16;4677:2;4673;4669:11;4635:73;:::i;5183:258::-;5251:6;5259;5312:2;5300:9;5291:7;5287:23;5283:32;5280:2;;;5333:6;5325;5318:22;5280:2;-1:-1:-1;;5361:23:1;;;5431:2;5416:18;;;5403:32;;-1:-1:-1;5270:171:1:o;5446:257::-;5487:3;5525:5;5519:12;5552:6;5547:3;5540:19;5568:63;5624:6;5617:4;5612:3;5608:14;5601:4;5594:5;5590:16;5568:63;:::i;:::-;5685:2;5664:15;-1:-1:-1;;5660:29:1;5651:39;;;;5692:4;5647:50;;5495:208;-1:-1:-1;;5495:208:1:o;5708:470::-;5887:3;5925:6;5919:13;5941:53;5987:6;5982:3;5975:4;5967:6;5963:17;5941:53;:::i;:::-;6057:13;;6016:16;;;;6079:57;6057:13;6016:16;6113:4;6101:17;;6079:57;:::i;:::-;6152:20;;5895:283;-1:-1:-1;;;;5895:283:1:o;6601:488::-;-1:-1:-1;;;;;6870:15:1;;;6852:34;;6922:15;;6917:2;6902:18;;6895:43;6969:2;6954:18;;6947:34;;;7017:3;7012:2;6997:18;;6990:31;;;6795:4;;7038:45;;7063:19;;7055:6;7038:45;:::i;:::-;7030:53;6804:285;-1:-1:-1;;;;;;6804:285:1:o;7094:635::-;7265:2;7317:21;;;7387:13;;7290:18;;;7409:22;;;7236:4;;7265:2;7488:15;;;;7462:2;7447:18;;;7236:4;7534:169;7548:6;7545:1;7542:13;7534:169;;;7609:13;;7597:26;;7678:15;;;;7643:12;;;;7570:1;7563:9;7534:169;;;-1:-1:-1;7720:3:1;;7245:484;-1:-1:-1;;;;;;7245:484:1:o;8371:219::-;8520:2;8509:9;8502:21;8483:4;8540:44;8580:2;8569:9;8565:18;8557:6;8540:44;:::i;9011:414::-;9213:2;9195:21;;;9252:2;9232:18;;;9225:30;9291:34;9286:2;9271:18;;9264:62;-1:-1:-1;;;9357:2:1;9342:18;;9335:48;9415:3;9400:19;;9185:240::o;10564:407::-;10766:2;10748:21;;;10805:2;10785:18;;;10778:30;10844:34;10839:2;10824:18;;10817:62;-1:-1:-1;;;10910:2:1;10895:18;;10888:41;10961:3;10946:19;;10738:233::o;19843:399::-;20045:2;20027:21;;;20084:2;20064:18;;;20057:30;20123:34;20118:2;20103:18;;20096:62;-1:-1:-1;;;20189:2:1;20174:18;;20167:33;20232:3;20217:19;;20017:225::o;20649:413::-;20851:2;20833:21;;;20890:2;20870:18;;;20863:30;20929:34;20924:2;20909:18;;20902:62;-1:-1:-1;;;20995:2:1;20980:18;;20973:47;21052:3;21037:19;;20823:239::o;21425:355::-;21627:2;21609:21;;;21666:2;21646:18;;;21639:30;21705:33;21700:2;21685:18;;21678:61;21771:2;21756:18;;21599:181::o;22907:128::-;22947:3;22978:1;22974:6;22971:1;22968:13;22965:2;;;22984:18;;:::i;:::-;-1:-1:-1;23020:9:1;;22955:80::o;23040:120::-;23080:1;23106;23096:2;;23111:18;;:::i;:::-;-1:-1:-1;23145:9:1;;23086:74::o;23165:168::-;23205:7;23271:1;23267;23263:6;23259:14;23256:1;23253:21;23248:1;23241:9;23234:17;23230:45;23227:2;;;23278:18;;:::i;:::-;-1:-1:-1;23318:9:1;;23217:116::o;23338:125::-;23378:4;23406:1;23403;23400:8;23397:2;;;23411:18;;:::i;:::-;-1:-1:-1;23448:9:1;;23387:76::o;23468:258::-;23540:1;23550:113;23564:6;23561:1;23558:13;23550:113;;;23640:11;;;23634:18;23621:11;;;23614:39;23586:2;23579:10;23550:113;;;23681:6;23678:1;23675:13;23672:2;;;-1:-1:-1;;23716:1:1;23698:16;;23691:27;23521:205::o;23731:380::-;23810:1;23806:12;;;;23853;;;23874:2;;23928:4;23920:6;23916:17;23906:27;;23874:2;23981;23973:6;23970:14;23950:18;23947:38;23944:2;;;24027:10;24022:3;24018:20;24015:1;24008:31;24062:4;24059:1;24052:15;24090:4;24087:1;24080:15;23944:2;;23786:325;;;:::o;24116:135::-;24155:3;-1:-1:-1;;24176:17:1;;24173:2;;;24196:18;;:::i;:::-;-1:-1:-1;24243:1:1;24232:13;;24163:88::o;24256:112::-;24288:1;24314;24304:2;;24319:18;;:::i;:::-;-1:-1:-1;24353:9:1;;24294:74::o;24373:127::-;24434:10;24429:3;24425:20;24422:1;24415:31;24465:4;24462:1;24455:15;24489:4;24486:1;24479:15;24505:127;24566:10;24561:3;24557:20;24554:1;24547:31;24597:4;24594:1;24587:15;24621:4;24618:1;24611:15;24637:127;24698:10;24693:3;24689:20;24686:1;24679:31;24729:4;24726:1;24719:15;24753:4;24750:1;24743:15;24769:131;-1:-1:-1;;;;;;24843:32:1;;24833:43;;24823:2;;24890:1;24887;24880:12;24823:2;24813:87;:::o

Swarm Source

ipfs://00fae5c4ec3ed844abf393f0ab122e1234ab93e13f1c75c2aa9095c7b8dff923

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.