ETH Price: $3,753.49 (-2.85%)
Gas: 12 Gwei

Contract

0x0E4245ccB9954eAd73F8Bab13607cD2d86eFC84c
 

Overview

ETH Balance

0.04 ETH

Eth Value

$150.14 (@ $3,753.49/ETH)

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Value
0x7d3b9781e4156dae5b6c992188523e21dc4abd74e39a55c83052ee2effb461adSet Approval For...(pending)2024-05-26 3:12:464 days ago1716693166IN
The Unstable Horses Yard: TUHY Token
0 ETH(Pending)(Pending)
Set Approval For...199723132024-05-29 1:42:4729 hrs ago1716946967IN
The Unstable Horses Yard: TUHY Token
0 ETH0.000408578.73998444
Set Approval For...199722932024-05-29 1:38:4729 hrs ago1716946727IN
The Unstable Horses Yard: TUHY Token
0 ETH0.000393018.40708693
Set Approval For...199512392024-05-26 3:02:474 days ago1716692567IN
The Unstable Horses Yard: TUHY Token
0 ETH0.000132852.84700239
Set Approval For...199189452024-05-21 14:42:118 days ago1716302531IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0007445527.75718105
Set Approval For...199189392024-05-21 14:40:598 days ago1716302459IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0007662630.86785489
Set Approval For...198888822024-05-17 9:45:3512 days ago1715939135IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0001877.53314079
Set Approval For...198888682024-05-17 9:42:4712 days ago1715938967IN
The Unstable Horses Yard: TUHY Token
0 ETH0.000254915.45426817
Set Approval For...197926612024-05-03 22:47:2326 days ago1714776443IN
The Unstable Horses Yard: TUHY Token
0 ETH0.000114674.63281373
Set Approval For...196877482024-04-19 6:37:3541 days ago1713508655IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0005154911.04703322
Set Approval For...196355962024-04-11 23:16:5948 days ago1712877419IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0005669212.14904777
Set Approval For...193294242024-02-28 23:51:5991 days ago1709164319IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0011671846.99574433
Set Approval For...192197922024-02-13 14:51:35106 days ago1707835895IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0011741247.27527024
Set Approval For...191801052024-02-08 1:13:35112 days ago1707354815IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0020228343.34903456
Set Approval For...191755662024-02-07 9:56:47112 days ago1707299807IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0013289828.47980308
Set Approval For...191280632024-01-31 17:51:59119 days ago1706723519IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0011528124.70452973
Set Approval For...190958752024-01-27 5:36:35124 days ago1706333795IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0005440711.65946095
Set Approval For...190861632024-01-25 20:58:11125 days ago1706216291IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0005540122.30686041
Set Approval For...190861532024-01-25 20:56:11125 days ago1706216171IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0005711322.99643148
Set Approval For...190606672024-01-22 7:03:47128 days ago1705907027IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0002674810.77024506
Set Approval For...190530992024-01-21 5:18:35130 days ago1705814315IN
The Unstable Horses Yard: TUHY Token
0 ETH0.000227539.16149558
Set Approval For...190501242024-01-20 19:19:47130 days ago1705778387IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0003030312.20129345
Set Approval For...190241602024-01-17 4:16:35134 days ago1705464995IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0009205137.06354152
Set Approval For...189478982024-01-06 11:30:35144 days ago1704540635IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0002903211.68983355
Set Approval For...189100382024-01-01 3:52:11150 days ago1704081131IN
The Unstable Horses Yard: TUHY Token
0 ETH0.0004817610.30824195
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
130460732021-08-18 0:41:301016 days ago1629247290
The Unstable Horses Yard: TUHY Token
361.3 ETH
130139442021-08-13 1:52:221021 days ago1628819542
The Unstable Horses Yard: TUHY Token
27.84 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TheUnstableHorsesYard

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-12
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


pragma solidity ^0.8.0;

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

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

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

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

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



pragma solidity ^0.8.0;

interface IERC721Receiver {

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


pragma solidity ^0.8.0;

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



pragma solidity ^0.8.0;

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

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

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


pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {

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

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

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

}



pragma solidity ^0.8.0;

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



pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping (uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping (address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;

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

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

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

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

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

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

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

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

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

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

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

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

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

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

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(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 { }
}


pragma solidity ^0.8.0;

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    mapping (uint256 => string) private _tokenURIs;

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}



// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

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

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

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

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


// File contracts/Musto.sol

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.8.0;


contract TheUnstableHorsesYard is ERC721URIStorage {
    using SafeMath for uint256;
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    // horse own; 
    address public owner;
    uint public total_No_Tokens = 1000;
    uint public total_No_TokensRemaining = total_No_Tokens;
    uint public total_No_Horses = 999;
    uint public total_No_HorsesRemaining = total_No_Horses;
    uint public owner_Horses = 1;
    uint public owner_HorsesRemaining = owner_Horses;
    uint public nextTokenId = 1;
    uint public maxHorsesMintInOnce = 3;
    uint public price = 30000000000000000;  // 0.03 ETH
    bool public sale  =  true;  // false
    uint256 public startingIpfsId = 0;
    uint256 private _lastIpfsId = 0;
    uint256 public start = 1;
    

    mapping(uint => bool) public exist;


    // farm juice own;
    mapping(address => uint) public farmJuices_Owner;
    mapping(address => bool) public farmJuices_Own;
    uint private FarmJuice_newTokenId = 1000001;
    uint public farmJuices = 1000;
    uint public farmJuicesRemaining = farmJuices;
    uint public farmJuicesTransfered = 0;



    // Breed section;
    uint public total_No_HorsesBreed = 0;
    uint public StartIndex_HorsesBreed = 100000000001;
    uint public NextIndex_HorsesBreed  = StartIndex_HorsesBreed;

    event Minted(address to, uint id, string uri);
    event PriceUpdated(uint newPrice);
    event OwnerUpdated(address newOwner);

    address payable fundWallet;
    string public baseUri ;
    string public FarmJuice_baseUri ;
    string public breed_baseUri ;


 
    constructor(address _fundWallet, string memory _baseUri, string memory _FarmJuice_baseUri, string memory _breed_baseUri) ERC721("The Unstable Horses Yard", "TUHY") {
        owner = msg.sender;
        fundWallet = payable(_fundWallet); 
        baseUri = _baseUri; 
        FarmJuice_baseUri = _FarmJuice_baseUri; 
        breed_baseUri = _breed_baseUri; 
    }

    function fundWalletView() public view returns(address){
        require(msg.sender == owner || msg.sender == fundWallet, "Only owner");
        return fundWallet;
    }  

    function fundWalletUpdate(address _fundWallet) public  returns(address){
        require(msg.sender == owner || msg.sender == fundWallet, "Only owner");
        fundWallet = payable(_fundWallet); 
    }  

    /* Mint Horses only OWNER */
    function mint_owner(address to) public {
        require(msg.sender == owner || msg.sender == fundWallet, "Only owner can transfer");
        require(owner_HorsesRemaining >= 0, "mint token limit exceeds");
        
        if(total_No_Tokens == total_No_TokensRemaining) {
            _lastIpfsId = random(1, total_No_Tokens, uint256(uint160(address(_msgSender()))) + 1);
            startingIpfsId = _lastIpfsId;
        } else {
            _lastIpfsId = getIpfsIdToMint();
        }
        total_No_TokensRemaining--;
        owner_HorsesRemaining--;
        
        require(exist[nextTokenId] == false, "Mint: Token already exist.");
        string memory tokenURI = string(abi.encodePacked(baseUri, uint2str(_lastIpfsId)));
        _mint(to, nextTokenId);
        _setTokenURI(nextTokenId, (tokenURI));
        
        exist[nextTokenId] = true;
        nextTokenId++;
        
    }
    
    /* Mint Horses */
    function mint(uint numberOfMints) public payable {
        require(sale == true, "sale is off");
        require(numberOfMints > 0, "minimum 1 token need to be minted");
        require(numberOfMints <= maxHorsesMintInOnce, "max horses mint limit exceeds");
        require(total_No_HorsesRemaining - numberOfMints >= 0, "mint token limit exceeds, check how many remaining to mint."); //10000 item cap (9900 public + 100 team mints)
        require(msg.value >= price * numberOfMints, "price is not correct.");  //User must pay set price.`
        
		for (uint256 i = 0; i < numberOfMints; i++) {
            if(total_No_Tokens == total_No_TokensRemaining) {
                _lastIpfsId = random(1, total_No_Tokens, uint256(uint160(address(_msgSender()))) + 1);
                startingIpfsId = _lastIpfsId;
            } else {
                _lastIpfsId = getIpfsIdToMint();
            }
            total_No_TokensRemaining--;
            total_No_HorsesRemaining--;
            
            require(exist[nextTokenId] == false, "Mint: Token already exist.");
            string memory tokenURI = string(abi.encodePacked(baseUri, uint2str(_lastIpfsId)));
            _mint(msg.sender, nextTokenId);
            _setTokenURI(nextTokenId, (tokenURI));
            
            exist[nextTokenId] = true;
            nextTokenId++;
        }
        // this(address).transfer(msg.value);
    }


    
    /* Farm Juice */
    function farmJuice_Mint(address player) public {  // there is no fund transfer because only  owner can mint FARM Juices. 
        require(msg.sender == owner || msg.sender == fundWallet, "Only owner can mint");
        require(farmJuicesRemaining > 0, "All farm juices  transfered."); 
        require(farmJuices_Own[player] == false, "User already own farmJuice"); 
        
        farmJuicesRemaining--;
        farmJuicesTransfered++;
        farmJuices_Owner[player] = FarmJuice_newTokenId;
        farmJuices_Own[player] = true;
        
        string memory FarmJuice_URI = string(abi.encodePacked(FarmJuice_baseUri));
            
        _mint(player, FarmJuice_newTokenId);
        _setTokenURI(FarmJuice_newTokenId, FarmJuice_URI);
        
        FarmJuice_newTokenId++;
    }

    /* Breed Horse */
    function Breed(address player, uint token1_ID, uint token2_ID) public {
        require(farmJuices_Own[msg.sender] == true, "User should own farm Juice for Breeding"); 
        require(ownerOf(token1_ID) == msg.sender, "User should own Token 1"); 
        require(ownerOf(token2_ID) == msg.sender, "User should own Token 2"); 
        
         string memory tokenURI = string(abi.encodePacked(breed_baseUri, uint2str(NextIndex_HorsesBreed)));
        _mint(player, NextIndex_HorsesBreed);
        _setTokenURI(NextIndex_HorsesBreed, tokenURI);
        
        NextIndex_HorsesBreed += 1;
        total_No_HorsesBreed +=  1;

        burn(token1_ID);
        burn(token2_ID);
    }
    
    

    //random number
	function random( uint256 from, uint256 to, uint256 salty ) private view returns (uint256) {
		uint256 seed =
			uint256(
				keccak256(
					abi.encodePacked(
						block.timestamp +
							block.difficulty +
							((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
							block.gaslimit +
							((uint256(keccak256(abi.encodePacked(_msgSender())))) / (block.timestamp)) +
							block.number +
							salty
					)
				)
			);
		
		uint randomData = 0;
		if( (seed.mod(to - from) + from) <= total_No_Horses ){
		    randomData = seed.mod(to - from) + from;
		} else {
		    randomData = total_No_Horses / 2;
		}
		return randomData;
	}
	
    function getIpfsIdToMint() public view returns(uint256 _nextIpfsId) {
        require(total_No_TokensRemaining > 0, "All tokens have been minted");
        
        if(_lastIpfsId == total_No_Tokens && nextTokenId < total_No_Tokens) {
            _nextIpfsId = start;   // 2
        } else if(nextTokenId <= total_No_Tokens) {
            _nextIpfsId = _lastIpfsId + 1;
        }
    }
	
    function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
		if (_i == 0) {
			return "0";
		}
		uint256 j = _i;
		uint256 len;
		while (j != 0) {
			len++;
			j /= 10;
		}
		bytes memory bstr = new bytes(len);
		uint256 k = len;
		while (_i != 0) {
			k = k - 1;
			uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
			bytes1 b1 = bytes1(temp);
			bstr[k] = b1;
			_i /= 10;
		}
		return string(bstr);
	}	
    
    function update_FarmJuice_URI(string memory newFarmJuice_URI) public{
      require(msg.sender == owner || msg.sender == fundWallet, "only owner");
      FarmJuice_baseUri = newFarmJuice_URI;
    }
    
    function update_FarmJuice_limit(uint  add_newTokens) public{
        require(msg.sender == owner || msg.sender == fundWallet, "Only owner");
        farmJuices += add_newTokens; 
        farmJuicesRemaining += add_newTokens;
    }
    
    function burn(uint256 _tokenId) public {
        require(_exists(_tokenId), "Burn: token does not exist.");
        require(ownerOf(_tokenId) == _msgSender(), "Burn: caller is not token owner.");
        _burn(_tokenId);
    }
        
    function balancer() public view returns (uint256){
        return address(this).balance;
    }
    
    function update_Tokens_Limit(uint add_newTokens) public{
      require(msg.sender == owner || msg.sender == fundWallet, "Only owner");
      
      start = total_No_Tokens + 1;
      _lastIpfsId = total_No_Tokens;
      total_No_Tokens += add_newTokens ;
      total_No_Horses += (add_newTokens - 99) ;
      total_No_TokensRemaining += add_newTokens;
      total_No_HorsesRemaining = (add_newTokens - 99);
      price = 40000000000000000;  // 0.04 ETH
      maxHorsesMintInOnce = 15;
      
      owner_Horses += 99;
      owner_HorsesRemaining += 99;
    }

    function update_Mint_per_Tx(uint _num) public{
      require(msg.sender == owner || msg.sender == fundWallet, "Only owner");
      maxHorsesMintInOnce = _num;
    }

    function update_Owner(address newOwner) public{
      require(msg.sender == owner || msg.sender == fundWallet);
      owner = newOwner;
      emit OwnerUpdated(newOwner);
    }

    function update_price(uint newprice) public{
      require(msg.sender == owner || msg.sender == fundWallet);
      price = newprice;
      emit PriceUpdated(newprice);
    }

    function changeSale() public{
      require(msg.sender == owner || msg.sender == fundWallet);
      sale = !sale;
    }

    function withdraw() public{
        require(msg.sender == owner || msg.sender == fundWallet, "Only owner");
        payable(fundWallet).transfer(address(this).balance);
    }
    function update_URI(string memory new_URI) public{ 
      require(msg.sender == owner || msg.sender == fundWallet, "only owner"); 
       baseUri = new_URI; 
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_fundWallet","type":"address"},{"internalType":"string","name":"_baseUri","type":"string"},{"internalType":"string","name":"_FarmJuice_baseUri","type":"string"},{"internalType":"string","name":"_breed_baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"token1_ID","type":"uint256"},{"internalType":"uint256","name":"token2_ID","type":"uint256"}],"name":"Breed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FarmJuice_baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NextIndex_HorsesBreed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StartIndex_HorsesBreed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balancer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breed_baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"exist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"farmJuice_Mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmJuices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmJuicesRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmJuicesTransfered","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"farmJuices_Own","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"farmJuices_Owner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fundWallet","type":"address"}],"name":"fundWalletUpdate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundWalletView","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIpfsIdToMint","outputs":[{"internalType":"uint256","name":"_nextIpfsId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHorsesMintInOnce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint_owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner_Horses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner_HorsesRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIpfsId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_No_Horses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_No_HorsesBreed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_No_HorsesRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_No_Tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_No_TokensRemaining","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":"string","name":"newFarmJuice_URI","type":"string"}],"name":"update_FarmJuice_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"add_newTokens","type":"uint256"}],"name":"update_FarmJuice_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"update_Mint_per_Tx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"update_Owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"add_newTokens","type":"uint256"}],"name":"update_Tokens_Limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"new_URI","type":"string"}],"name":"update_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newprice","type":"uint256"}],"name":"update_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526103e8600955600954600a556103e7600b55600b54600c556001600d55600d54600e556001600f556003601055666a94d74f4300006011556001601260006101000a81548160ff021916908315150217905550600060135560006014556001601555620f42416019556103e8601a55601a54601b556000601c556000601d5564174876e801601e55601e54601f553480156200009f57600080fd5b5060405162006541380380620065418339818101604052810190620000c5919062000375565b6040518060400160405280601881526020017f54686520556e737461626c6520486f72736573205961726400000000000000008152506040518060400160405280600481526020017f54554859000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001499291906200023c565b508060019080519060200190620001629291906200023c565b50505033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260219080519060200190620001ff9291906200023c565b508160229080519060200190620002189291906200023c565b508060239080519060200190620002319291906200023c565b5050505050620005ab565b8280546200024a90620004fd565b90600052602060002090601f0160209004810192826200026e5760008555620002ba565b82601f106200028957805160ff1916838001178555620002ba565b82800160010185558215620002ba579182015b82811115620002b95782518255916020019190600101906200029c565b5b509050620002c99190620002cd565b5090565b5b80821115620002e8576000816000905550600101620002ce565b5090565b600062000303620002fd8462000460565b6200042c565b9050828152602081018484840111156200031c57600080fd5b62000329848285620004c7565b509392505050565b600081519050620003428162000591565b92915050565b600082601f8301126200035a57600080fd5b81516200036c848260208601620002ec565b91505092915050565b600080600080608085870312156200038c57600080fd5b60006200039c8782880162000331565b945050602085015167ffffffffffffffff811115620003ba57600080fd5b620003c88782880162000348565b935050604085015167ffffffffffffffff811115620003e657600080fd5b620003f48782880162000348565b925050606085015167ffffffffffffffff8111156200041257600080fd5b620004208782880162000348565b91505092959194509250565b6000604051905081810181811067ffffffffffffffff8211171562000456576200045562000562565b5b8060405250919050565b600067ffffffffffffffff8211156200047e576200047d62000562565b5b601f19601f8301169050602081019050919050565b6000620004a082620004a7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620004e7578082015181840152602081019050620004ca565b83811115620004f7576000848401525b50505050565b600060028204905060018216806200051657607f821691505b602082108114156200052d576200052c62000533565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200059c8162000493565b8114620005a857600080fd5b50565b615f8680620005bb6000396000f3fe60806040526004361061036a5760003560e01c80638d44986f116101c6578063b88d4fde116100f7578063da43453e11610095578063e6f740eb1161006f578063e6f740eb14610c78578063e985e9c514610ca3578063f5b6559114610ce0578063fbc591a114610d095761036a565b8063da43453e14610bf9578063e3c05f5014610c24578063e563037e14610c4d5761036a565b8063be6b5088116100d1578063be6b508814610b3b578063be9a655514610b66578063c87b56dd14610b91578063cc6fa6eb14610bce5761036a565b8063b88d4fde14610ac0578063ba98b7f414610ae9578063bb08a61214610b125761036a565b8063a0712d6811610164578063b18d1e7c1161013e578063b18d1e7c14610a04578063b194283014610a2d578063b5f2f86a14610a6a578063b885a16e14610a955761036a565b8063a0712d6814610996578063a22cb465146109b2578063af572efb146109db5761036a565b806395d89b41116101a057806395d89b41146108ea5780639738513f146109155780639abc832014610940578063a035b1fe1461096b5761036a565b80638d44986f146108695780638da5cb5b146108945780638db02a5c146108bf5761036a565b80633898f956116102a05780636079206e1161023e57806370a082311161021857806370a08231146107ad57806373a4a7eb146107ea5780637444e41b1461081557806375794a3c1461083e5761036a565b80636079206e1461071a5780636352211e146107455780636ad1fe02146107825761036a565b806342966c681161027a57806342966c681461066257806344731da41461068b5780634ebbc92a146106b4578063578f76af146106f15761036a565b80633898f956146105f95780633ccfd60b1461062257806342842e0e146106395761036a565b80631ed43d241161030d5780632162fdad116102e75780632162fdad1461053f57806323b872dd1461057c57806323e42eef146105a55780632d82f44b146105e25761036a565b80631ed43d24146104be5780631f13659c146104e957806320a105ba146105145761036a565b8063081812fc11610349578063081812fc14610402578063095ea7b31461043f5780630edc49cf146104685780631e9b2d8c146104935761036a565b80623bc35d1461036f57806301ffc9a71461039a57806306fdde03146103d7575b600080fd5b34801561037b57600080fd5b50610384610d34565b604051610391919061555d565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc91906146bb565b610dc2565b6040516103ce9190615542565b60405180910390f35b3480156103e357600080fd5b506103ec610ea4565b6040516103f9919061555d565b60405180910390f35b34801561040e57600080fd5b506104296004803603810190610424919061474e565b610f36565b60405161043691906154db565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614630565b610fbb565b005b34801561047457600080fd5b5061047d6110d3565b60405161048a91906159df565b60405180910390f35b34801561049f57600080fd5b506104a86110d9565b6040516104b591906159df565b60405180910390f35b3480156104ca57600080fd5b506104d36110df565b6040516104e091906159df565b60405180910390f35b3480156104f557600080fd5b506104fe6110e5565b60405161050b91906159df565b60405180910390f35b34801561052057600080fd5b506105296110eb565b60405161053691906159df565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906144c5565b6110f1565b6040516105739190615542565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e919061452a565b611111565b005b3480156105b157600080fd5b506105cc60048036038101906105c791906144c5565b611171565b6040516105d991906159df565b60405180910390f35b3480156105ee57600080fd5b506105f7611189565b005b34801561060557600080fd5b50610620600480360381019061061b919061470d565b611267565b005b34801561062e57600080fd5b50610637611369565b005b34801561064557600080fd5b50610660600480360381019061065b919061452a565b6114bc565b005b34801561066e57600080fd5b506106896004803603810190610684919061474e565b6114dc565b005b34801561069757600080fd5b506106b260048036038101906106ad919061474e565b6115ad565b005b3480156106c057600080fd5b506106db60048036038101906106d6919061474e565b6116a0565b6040516106e89190615542565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061474e565b6116c0565b005b34801561072657600080fd5b5061072f6117b2565b60405161073c91906159df565b60405180910390f35b34801561075157600080fd5b5061076c6004803603810190610767919061474e565b6117b8565b60405161077991906154db565b60405180910390f35b34801561078e57600080fd5b5061079761186a565b6040516107a49190615542565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906144c5565b61187d565b6040516107e191906159df565b60405180910390f35b3480156107f657600080fd5b506107ff611935565b60405161080c91906159df565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906144c5565b61193b565b005b34801561084a57600080fd5b50610853611c22565b60405161086091906159df565b60405180910390f35b34801561087557600080fd5b5061087e611c28565b60405161088b91906154db565b60405180910390f35b3480156108a057600080fd5b506108a9611d3a565b6040516108b691906154db565b60405180910390f35b3480156108cb57600080fd5b506108d4611d60565b6040516108e191906159df565b60405180910390f35b3480156108f657600080fd5b506108ff611d66565b60405161090c919061555d565b60405180910390f35b34801561092157600080fd5b5061092a611df8565b60405161093791906159df565b60405180910390f35b34801561094c57600080fd5b50610955611dfe565b604051610962919061555d565b60405180910390f35b34801561097757600080fd5b50610980611e8c565b60405161098d91906159df565b60405180910390f35b6109b060048036038101906109ab919061474e565b611e92565b005b3480156109be57600080fd5b506109d960048036038101906109d491906145f4565b6121c2565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906144c5565b612343565b005b348015610a1057600080fd5b50610a2b6004803603810190610a2691906144c5565b612470565b005b348015610a3957600080fd5b50610a546004803603810190610a4f91906144c5565b612730565b604051610a6191906154db565b60405180910390f35b348015610a7657600080fd5b50610a7f612860565b604051610a8c91906159df565b60405180910390f35b348015610aa157600080fd5b50610aaa612866565b604051610ab791906159df565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614579565b61286c565b005b348015610af557600080fd5b50610b106004803603810190610b0b919061466c565b6128ce565b005b348015610b1e57600080fd5b50610b396004803603810190610b34919061474e565b612ae2565b005b348015610b4757600080fd5b50610b50612c9f565b604051610b5d91906159df565b60405180910390f35b348015610b7257600080fd5b50610b7b612d2b565b604051610b8891906159df565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb3919061474e565b612d31565b604051610bc5919061555d565b60405180910390f35b348015610bda57600080fd5b50610be3612e83565b604051610bf091906159df565b60405180910390f35b348015610c0557600080fd5b50610c0e612e89565b604051610c1b91906159df565b60405180910390f35b348015610c3057600080fd5b50610c4b6004803603810190610c46919061474e565b612e8f565b005b348015610c5957600080fd5b50610c62612fac565b604051610c6f91906159df565b60405180910390f35b348015610c8457600080fd5b50610c8d612fb4565b604051610c9a919061555d565b60405180910390f35b348015610caf57600080fd5b50610cca6004803603810190610cc591906144ee565b613042565b604051610cd79190615542565b60405180910390f35b348015610cec57600080fd5b50610d076004803603810190610d02919061470d565b6130d6565b005b348015610d1557600080fd5b50610d1e6131d8565b604051610d2b91906159df565b60405180910390f35b60228054610d4190615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6d90615d2e565b8015610dba5780601f10610d8f57610100808354040283529160200191610dba565b820191906000526020600020905b815481529060010190602001808311610d9d57829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e8d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e9d5750610e9c826131de565b5b9050919050565b606060008054610eb390615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610edf90615d2e565b8015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b5050505050905090565b6000610f4182613248565b610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f77906157df565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fc6826117b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e906158bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110566132b4565b73ffffffffffffffffffffffffffffffffffffffff16148061108557506110848161107f6132b4565b613042565b5b6110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906156bf565b60405180910390fd5b6110ce83836132bc565b505050565b601e5481565b601d5481565b601b5481565b601a5481565b60095481565b60186020528060005260406000206000915054906101000a900460ff1681565b61112261111c6132b4565b82613375565b611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906158ff565b60405180910390fd5b61116c838383613453565b505050565b60176020528060005260406000206000915090505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112325750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61123b57600080fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113105750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61134f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113469061587f565b60405180910390fd5b80602290805190602001906113659291906142a9565b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114125750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114489061557f565b60405180910390fd5b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156114b9573d6000803e3d6000fd5b50565b6114d78383836040518060200160405280600081525061286c565b505050565b6114e581613248565b611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b9061595f565b60405180910390fd5b61152c6132b4565b73ffffffffffffffffffffffffffffffffffffffff1661154b826117b8565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611598906158df565b60405180910390fd5b6115aa816136af565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116565750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61165f57600080fd5b806011819055507f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe08160405161169591906159df565b60405180910390a150565b60166020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117695750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f9061557f565b60405180910390fd5b8060108190555050565b601f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906156ff565b60405180910390fd5b80915050919050565b601260009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906156df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e45750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a9061573f565b60405180910390fd5b6000601b5411611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f9061561f565b60405180910390fd5b60001515601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906155ff565b60405180910390fd5b601b6000815480929190611b0e90615d04565b9190505550601c6000815480929190611b2690615d60565b9190505550601954601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006022604051602001611bdd9190615485565b6040516020818303038152906040529050611bfa82601954613702565b611c06601954826138d0565b60196000815480929190611c1990615d60565b91905055505050565b600f5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cd35750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d099061557f565b60405180910390fd5b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b606060018054611d7590615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611da190615d2e565b8015611dee5780601f10611dc357610100808354040283529160200191611dee565b820191906000526020600020905b815481529060010190602001808311611dd157829003601f168201915b5050505050905090565b601c5481565b60218054611e0b90615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3790615d2e565b8015611e845780601f10611e5957610100808354040283529160200191611e84565b820191906000526020600020905b815481529060010190602001808311611e6757829003601f168201915b505050505081565b60115481565b60011515601260009054906101000a900460ff16151514611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf906159bf565b60405180910390fd5b60008111611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f229061599f565b60405180910390fd5b601054811115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f679061593f565b60405180910390fd5b600081600c54611f809190615bfb565b1015611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb8906157ff565b60405180910390fd5b80601154611fcf9190615ba1565b341015612011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120089061591f565b60405180910390fd5b60005b818110156121be57600a5460095414156120735761205f6001600954600161203a6132b4565b73ffffffffffffffffffffffffffffffffffffffff1661205a9190615ae3565b613944565b601481905550601454601381905550612082565b61207b612c9f565b6014819055505b600a600081548092919061209590615d04565b9190505550600c60008154809291906120ad90615d04565b91905055506000151560166000600f54815260200190815260200160002060009054906101000a900460ff1615151461211b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612112906155bf565b60405180910390fd5b6000602161212a601454613aa5565b60405160200161213b92919061549c565b604051602081830303815290604052905061215833600f54613702565b612164600f54826138d0565b600160166000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600f60008154809291906121a590615d60565b91905055505080806121b690615d60565b915050612014565b5050565b6121ca6132b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f9061565f565b60405180910390fd5b80600560006122456132b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122f26132b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123379190615542565b60405180910390a35050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123ec5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6123f557600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b8160405161246591906154db565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806125195750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061589f565b60405180910390fd5b6000600e54101561259e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125959061577f565b60405180910390fd5b600a5460095414156125f5576125e1600160095460016125bc6132b4565b73ffffffffffffffffffffffffffffffffffffffff166125dc9190615ae3565b613944565b601481905550601454601381905550612604565b6125fd612c9f565b6014819055505b600a600081548092919061261790615d04565b9190505550600e600081548092919061262f90615d04565b91905055506000151560166000600f54815260200190815260200160002060009054906101000a900460ff1615151461269d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612694906155bf565b60405180910390fd5b600060216126ac601454613aa5565b6040516020016126bd92919061549c565b60405160208183030381529060405290506126da82600f54613702565b6126e6600f54826138d0565b600160166000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600f600081548092919061272790615d60565b91905055505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806127db5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61281a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128119061557f565b60405180910390fd5b81602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600d5481565b60105481565b61287d6128776132b4565b83613375565b6128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906158ff565b60405180910390fd5b6128c884848484613c7a565b50505050565b60011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061585f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16612981836117b8565b73ffffffffffffffffffffffffffffffffffffffff16146129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce9061575f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166129f7826117b8565b73ffffffffffffffffffffffffffffffffffffffff1614612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a449061567f565b60405180910390fd5b60006023612a5c601f54613aa5565b604051602001612a6d92919061549c565b6040516020818303038152906040529050612a8a84601f54613702565b612a96601f54826138d0565b6001601f6000828254612aa99190615ae3565b925050819055506001601d6000828254612ac39190615ae3565b92505081905550612ad3836114dc565b612adc826114dc565b50505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b8b5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc19061557f565b60405180910390fd5b6001600954612bd99190615ae3565b6015819055506009546014819055508060096000828254612bfa9190615ae3565b92505081905550606381612c0e9190615bfb565b600b6000828254612c1f9190615ae3565b9250508190555080600a6000828254612c389190615ae3565b92505081905550606381612c4c9190615bfb565b600c81905550668e1bc9bf040000601181905550600f6010819055506063600d6000828254612c7b9190615ae3565b925050819055506063600e6000828254612c959190615ae3565b9250508190555050565b600080600a5411612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061597f565b60405180910390fd5b600954601454148015612cfb5750600954600f54105b15612d0a576015549050612d28565b600954600f5411612d27576001601454612d249190615ae3565b90505b5b90565b60155481565b6060612d3c82613248565b612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d72906157bf565b60405180910390fd5b6000600660008481526020019081526020016000208054612d9b90615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612dc790615d2e565b8015612e145780601f10612de957610100808354040283529160200191612e14565b820191906000526020600020905b815481529060010190602001808311612df757829003601f168201915b505050505090506000612e25613cd6565b9050600081511415612e3b578192505050612e7e565b600082511115612e70578082604051602001612e58929190615461565b60405160208183030381529060405292505050612e7e565b612e7984613ced565b925050505b919050565b600e5481565b600b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612f385750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6e9061557f565b60405180910390fd5b80601a6000828254612f899190615ae3565b9250508190555080601b6000828254612fa29190615ae3565b9250508190555050565b600047905090565b60238054612fc190615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612fed90615d2e565b801561303a5780601f1061300f5761010080835404028352916020019161303a565b820191906000526020600020905b81548152906001019060200180831161301d57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061317f5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6131be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b59061587f565b60405180910390fd5b80602190805190602001906131d49291906142a9565b5050565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661332f836117b8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061338082613248565b6133bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b69061569f565b60405180910390fd5b60006133ca836117b8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061343957508373ffffffffffffffffffffffffffffffffffffffff1661342184610f36565b73ffffffffffffffffffffffffffffffffffffffff16145b8061344a57506134498185613042565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16613473826117b8565b73ffffffffffffffffffffffffffffffffffffffff16146134c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c09061581f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135309061563f565b60405180910390fd5b613544838383613d94565b61354f6000826132bc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359f9190615bfb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135f69190615ae3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6136b881613d99565b60006006600083815260200190815260200160002080546136d890615d2e565b9050146136ff576006600082815260200190815260200160002060006136fe919061432f565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137699061579f565b60405180910390fd5b61377b81613248565b156137bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b2906155df565b60405180910390fd5b6137c760008383613d94565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138179190615ae3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6138d982613248565b613918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390f9061571f565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019061393f9291906142a9565b505050565b6000808243426139526132b4565b604051602001613962919061542b565b6040516020818303038152906040528051906020012060001c6139859190615b70565b4542416040516020016139989190615446565b6040516020818303038152906040528051906020012060001c6139bb9190615b70565b44426139c79190615ae3565b6139d19190615ae3565b6139db9190615ae3565b6139e59190615ae3565b6139ef9190615ae3565b6139f99190615ae3565b604051602001613a0991906154c0565b6040516020818303038152906040528051906020012060001c90506000600b5486613a488888613a399190615bfb565b85613eaa90919063ffffffff16565b613a529190615ae3565b11613a875785613a768787613a679190615bfb565b84613eaa90919063ffffffff16565b613a809190615ae3565b9050613a99565b6002600b54613a969190615b70565b90505b80925050509392505050565b60606000821415613aed576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613c75565b600082905060005b60008214613b1f578080613b0890615d60565b915050600a82613b189190615b70565b9150613af5565b60008167ffffffffffffffff811115613b61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613b935781602001600182028036833780820191505090505b50905060008290505b60008614613c6d57600181613bb19190615bfb565b90506000600a8088613bc39190615b70565b613bcd9190615ba1565b87613bd89190615bfb565b6030613be49190615b39565b905060008160f81b905080848481518110613c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a88613c649190615b70565b97505050613b9c565b819450505050505b919050565b613c85848484613453565b613c9184848484613ef4565b613cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc79061559f565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060613cf882613248565b613d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2e9061583f565b60405180910390fd5b6000613d41613cd6565b90506000815111613d615760405180602001604052806000815250613d8c565b80613d6b8461408b565b604051602001613d7c929190615461565b6040516020818303038152906040525b915050919050565b505050565b6000613da4826117b8565b9050613db281600084613d94565b613dbd6000836132bc565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e0d9190615bfb565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613eec83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250614238565b905092915050565b6000613f158473ffffffffffffffffffffffffffffffffffffffff16614296565b1561407e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613f3e6132b4565b8786866040518563ffffffff1660e01b8152600401613f6094939291906154f6565b602060405180830381600087803b158015613f7a57600080fd5b505af1925050508015613fab57506040513d601f19601f82011682018060405250810190613fa891906146e4565b60015b61402e573d8060008114613fdb576040519150601f19603f3d011682016040523d82523d6000602084013e613fe0565b606091505b50600081511415614026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161401d9061559f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050614083565b600190505b949350505050565b606060008214156140d3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614233565b600082905060005b600082146141055780806140ee90615d60565b915050600a826140fe9190615b70565b91506140db565b60008167ffffffffffffffff811115614147577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156141795781602001600182028036833780820191505090505b5090505b6000851461422c576001826141929190615bfb565b9150600a856141a19190615de9565b60306141ad9190615ae3565b60f81b8183815181106141e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856142259190615b70565b945061417d565b8093505050505b919050565b6000808314158290614280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614277919061555d565b60405180910390fd5b50828461428d9190615de9565b90509392505050565b600080823b905060008111915050919050565b8280546142b590615d2e565b90600052602060002090601f0160209004810192826142d7576000855561431e565b82601f106142f057805160ff191683800117855561431e565b8280016001018555821561431e579182015b8281111561431d578251825591602001919060010190614302565b5b50905061432b919061436f565b5090565b50805461433b90615d2e565b6000825580601f1061434d575061436c565b601f01602090049060005260206000209081019061436b919061436f565b5b50565b5b80821115614388576000816000905550600101614370565b5090565b600061439f61439a84615a2b565b6159fa565b9050828152602081018484840111156143b757600080fd5b6143c2848285615cc2565b509392505050565b60006143dd6143d884615a5b565b6159fa565b9050828152602081018484840111156143f557600080fd5b614400848285615cc2565b509392505050565b60008135905061441781615ef4565b92915050565b60008135905061442c81615f0b565b92915050565b60008135905061444181615f22565b92915050565b60008151905061445681615f22565b92915050565b600082601f83011261446d57600080fd5b813561447d84826020860161438c565b91505092915050565b600082601f83011261449757600080fd5b81356144a78482602086016143ca565b91505092915050565b6000813590506144bf81615f39565b92915050565b6000602082840312156144d757600080fd5b60006144e584828501614408565b91505092915050565b6000806040838503121561450157600080fd5b600061450f85828601614408565b925050602061452085828601614408565b9150509250929050565b60008060006060848603121561453f57600080fd5b600061454d86828701614408565b935050602061455e86828701614408565b925050604061456f868287016144b0565b9150509250925092565b6000806000806080858703121561458f57600080fd5b600061459d87828801614408565b94505060206145ae87828801614408565b93505060406145bf878288016144b0565b925050606085013567ffffffffffffffff8111156145dc57600080fd5b6145e88782880161445c565b91505092959194509250565b6000806040838503121561460757600080fd5b600061461585828601614408565b92505060206146268582860161441d565b9150509250929050565b6000806040838503121561464357600080fd5b600061465185828601614408565b9250506020614662858286016144b0565b9150509250929050565b60008060006060848603121561468157600080fd5b600061468f86828701614408565b93505060206146a0868287016144b0565b92505060406146b1868287016144b0565b9150509250925092565b6000602082840312156146cd57600080fd5b60006146db84828501614432565b91505092915050565b6000602082840312156146f657600080fd5b600061470484828501614447565b91505092915050565b60006020828403121561471f57600080fd5b600082013567ffffffffffffffff81111561473957600080fd5b61474584828501614486565b91505092915050565b60006020828403121561476057600080fd5b600061476e848285016144b0565b91505092915050565b61478861478382615c41565b615dbb565b82525050565b61479781615c2f565b82525050565b6147ae6147a982615c2f565b615da9565b82525050565b6147bd81615c53565b82525050565b60006147ce82615aa0565b6147d88185615ab6565b93506147e8818560208601615cd1565b6147f181615ed6565b840191505092915050565b600061480782615aab565b6148118185615ac7565b9350614821818560208601615cd1565b61482a81615ed6565b840191505092915050565b600061484082615aab565b61484a8185615ad8565b935061485a818560208601615cd1565b80840191505092915050565b6000815461487381615d2e565b61487d8186615ad8565b9450600182166000811461489857600181146148a9576148dc565b60ff198316865281860193506148dc565b6148b285615a8b565b60005b838110156148d4578154818901526001820191506020810190506148b5565b838801955050505b50505092915050565b60006148f2600a83615ac7565b91507f4f6e6c79206f776e6572000000000000000000000000000000000000000000006000830152602082019050919050565b6000614932603283615ac7565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614998601a83615ac7565b91507f4d696e743a20546f6b656e20616c72656164792065786973742e0000000000006000830152602082019050919050565b60006149d8601c83615ac7565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614a18601a83615ac7565b91507f5573657220616c7265616479206f776e206661726d4a756963650000000000006000830152602082019050919050565b6000614a58601c83615ac7565b91507f416c6c206661726d206a756963657320207472616e7366657265642e000000006000830152602082019050919050565b6000614a98602483615ac7565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614afe601983615ac7565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614b3e601783615ac7565b91507f557365722073686f756c64206f776e20546f6b656e20320000000000000000006000830152602082019050919050565b6000614b7e602c83615ac7565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614be4603883615ac7565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614c4a602a83615ac7565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614cb0602983615ac7565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d16602e83615ac7565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b6000614d7c601383615ac7565b91507f4f6e6c79206f776e65722063616e206d696e74000000000000000000000000006000830152602082019050919050565b6000614dbc601783615ac7565b91507f557365722073686f756c64206f776e20546f6b656e20310000000000000000006000830152602082019050919050565b6000614dfc601883615ac7565b91507f6d696e7420746f6b656e206c696d6974206578636565647300000000000000006000830152602082019050919050565b6000614e3c602083615ac7565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614e7c603183615ac7565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b6000614ee2602c83615ac7565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614f48603b83615ac7565b91507f6d696e7420746f6b656e206c696d697420657863656564732c20636865636b2060008301527f686f77206d616e792072656d61696e696e6720746f206d696e742e00000000006020830152604082019050919050565b6000614fae602983615ac7565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000615014602f83615ac7565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061507a602783615ac7565b91507f557365722073686f756c64206f776e206661726d204a7569636520666f72204260008301527f72656564696e67000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150e0600a83615ac7565b91507f6f6e6c79206f776e6572000000000000000000000000000000000000000000006000830152602082019050919050565b6000615120601783615ac7565b91507f4f6e6c79206f776e65722063616e207472616e736665720000000000000000006000830152602082019050919050565b6000615160602183615ac7565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151c6602083615ac7565b91507f4275726e3a2063616c6c6572206973206e6f7420746f6b656e206f776e65722e6000830152602082019050919050565b6000615206603183615ac7565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061526c601583615ac7565b91507f7072696365206973206e6f7420636f72726563742e00000000000000000000006000830152602082019050919050565b60006152ac601d83615ac7565b91507f6d617820686f72736573206d696e74206c696d697420657863656564730000006000830152602082019050919050565b60006152ec601b83615ac7565b91507f4275726e3a20746f6b656e20646f6573206e6f742065786973742e00000000006000830152602082019050919050565b600061532c601b83615ac7565b91507f416c6c20746f6b656e732068617665206265656e206d696e74656400000000006000830152602082019050919050565b600061536c602183615ac7565b91507f6d696e696d756d203120746f6b656e206e65656420746f206265206d696e746560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153d2600b83615ac7565b91507f73616c65206973206f66660000000000000000000000000000000000000000006000830152602082019050919050565b61540e81615cab565b82525050565b61542561542082615cab565b615ddf565b82525050565b6000615437828461479d565b60148201915081905092915050565b60006154528284614777565b60148201915081905092915050565b600061546d8285614835565b91506154798284614835565b91508190509392505050565b60006154918284614866565b915081905092915050565b60006154a88285614866565b91506154b48284614835565b91508190509392505050565b60006154cc8284615414565b60208201915081905092915050565b60006020820190506154f0600083018461478e565b92915050565b600060808201905061550b600083018761478e565b615518602083018661478e565b6155256040830185615405565b818103606083015261553781846147c3565b905095945050505050565b600060208201905061555760008301846147b4565b92915050565b6000602082019050818103600083015261557781846147fc565b905092915050565b60006020820190508181036000830152615598816148e5565b9050919050565b600060208201905081810360008301526155b881614925565b9050919050565b600060208201905081810360008301526155d88161498b565b9050919050565b600060208201905081810360008301526155f8816149cb565b9050919050565b6000602082019050818103600083015261561881614a0b565b9050919050565b6000602082019050818103600083015261563881614a4b565b9050919050565b6000602082019050818103600083015261565881614a8b565b9050919050565b6000602082019050818103600083015261567881614af1565b9050919050565b6000602082019050818103600083015261569881614b31565b9050919050565b600060208201905081810360008301526156b881614b71565b9050919050565b600060208201905081810360008301526156d881614bd7565b9050919050565b600060208201905081810360008301526156f881614c3d565b9050919050565b6000602082019050818103600083015261571881614ca3565b9050919050565b6000602082019050818103600083015261573881614d09565b9050919050565b6000602082019050818103600083015261575881614d6f565b9050919050565b6000602082019050818103600083015261577881614daf565b9050919050565b6000602082019050818103600083015261579881614def565b9050919050565b600060208201905081810360008301526157b881614e2f565b9050919050565b600060208201905081810360008301526157d881614e6f565b9050919050565b600060208201905081810360008301526157f881614ed5565b9050919050565b6000602082019050818103600083015261581881614f3b565b9050919050565b6000602082019050818103600083015261583881614fa1565b9050919050565b6000602082019050818103600083015261585881615007565b9050919050565b600060208201905081810360008301526158788161506d565b9050919050565b60006020820190508181036000830152615898816150d3565b9050919050565b600060208201905081810360008301526158b881615113565b9050919050565b600060208201905081810360008301526158d881615153565b9050919050565b600060208201905081810360008301526158f8816151b9565b9050919050565b60006020820190508181036000830152615918816151f9565b9050919050565b600060208201905081810360008301526159388161525f565b9050919050565b600060208201905081810360008301526159588161529f565b9050919050565b60006020820190508181036000830152615978816152df565b9050919050565b600060208201905081810360008301526159988161531f565b9050919050565b600060208201905081810360008301526159b88161535f565b9050919050565b600060208201905081810360008301526159d8816153c5565b9050919050565b60006020820190506159f46000830184615405565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615a2157615a20615ea7565b5b8060405250919050565b600067ffffffffffffffff821115615a4657615a45615ea7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615a7657615a75615ea7565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615aee82615cab565b9150615af983615cab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615b2e57615b2d615e1a565b5b828201905092915050565b6000615b4482615cb5565b9150615b4f83615cb5565b92508260ff03821115615b6557615b64615e1a565b5b828201905092915050565b6000615b7b82615cab565b9150615b8683615cab565b925082615b9657615b95615e49565b5b828204905092915050565b6000615bac82615cab565b9150615bb783615cab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615bf057615bef615e1a565b5b828202905092915050565b6000615c0682615cab565b9150615c1183615cab565b925082821015615c2457615c23615e1a565b5b828203905092915050565b6000615c3a82615c8b565b9050919050565b6000615c4c82615c8b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615cef578082015181840152602081019050615cd4565b83811115615cfe576000848401525b50505050565b6000615d0f82615cab565b91506000821415615d2357615d22615e1a565b5b600182039050919050565b60006002820490506001821680615d4657607f821691505b60208210811415615d5a57615d59615e78565b5b50919050565b6000615d6b82615cab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615d9e57615d9d615e1a565b5b600182019050919050565b6000615db482615dcd565b9050919050565b6000615dc682615dcd565b9050919050565b6000615dd882615ee7565b9050919050565b6000819050919050565b6000615df482615cab565b9150615dff83615cab565b925082615e0f57615e0e615e49565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b615efd81615c2f565b8114615f0857600080fd5b50565b615f1481615c53565b8114615f1f57600080fd5b50565b615f2b81615c5f565b8114615f3657600080fd5b50565b615f4281615cab565b8114615f4d57600080fd5b5056fea2646970667358221220966c3261d32f171385b25bd26a3ee4118f0bb899c39ba796aabc2824c642ed0d64736f6c63430008000033000000000000000000000000a25d6e6e02d1fd7a886b83a906c91cde7ed8ddfc000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e746865756e737461626c65686f72736573796172642e636f6d2f686f7273652f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f6d657461646174612e746865756e737461626c65686f72736573796172642e636f6d2f6661726d4a75696365730000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e746865756e737461626c65686f72736573796172642e636f6d2f62726565642f000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061036a5760003560e01c80638d44986f116101c6578063b88d4fde116100f7578063da43453e11610095578063e6f740eb1161006f578063e6f740eb14610c78578063e985e9c514610ca3578063f5b6559114610ce0578063fbc591a114610d095761036a565b8063da43453e14610bf9578063e3c05f5014610c24578063e563037e14610c4d5761036a565b8063be6b5088116100d1578063be6b508814610b3b578063be9a655514610b66578063c87b56dd14610b91578063cc6fa6eb14610bce5761036a565b8063b88d4fde14610ac0578063ba98b7f414610ae9578063bb08a61214610b125761036a565b8063a0712d6811610164578063b18d1e7c1161013e578063b18d1e7c14610a04578063b194283014610a2d578063b5f2f86a14610a6a578063b885a16e14610a955761036a565b8063a0712d6814610996578063a22cb465146109b2578063af572efb146109db5761036a565b806395d89b41116101a057806395d89b41146108ea5780639738513f146109155780639abc832014610940578063a035b1fe1461096b5761036a565b80638d44986f146108695780638da5cb5b146108945780638db02a5c146108bf5761036a565b80633898f956116102a05780636079206e1161023e57806370a082311161021857806370a08231146107ad57806373a4a7eb146107ea5780637444e41b1461081557806375794a3c1461083e5761036a565b80636079206e1461071a5780636352211e146107455780636ad1fe02146107825761036a565b806342966c681161027a57806342966c681461066257806344731da41461068b5780634ebbc92a146106b4578063578f76af146106f15761036a565b80633898f956146105f95780633ccfd60b1461062257806342842e0e146106395761036a565b80631ed43d241161030d5780632162fdad116102e75780632162fdad1461053f57806323b872dd1461057c57806323e42eef146105a55780632d82f44b146105e25761036a565b80631ed43d24146104be5780631f13659c146104e957806320a105ba146105145761036a565b8063081812fc11610349578063081812fc14610402578063095ea7b31461043f5780630edc49cf146104685780631e9b2d8c146104935761036a565b80623bc35d1461036f57806301ffc9a71461039a57806306fdde03146103d7575b600080fd5b34801561037b57600080fd5b50610384610d34565b604051610391919061555d565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc91906146bb565b610dc2565b6040516103ce9190615542565b60405180910390f35b3480156103e357600080fd5b506103ec610ea4565b6040516103f9919061555d565b60405180910390f35b34801561040e57600080fd5b506104296004803603810190610424919061474e565b610f36565b60405161043691906154db565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614630565b610fbb565b005b34801561047457600080fd5b5061047d6110d3565b60405161048a91906159df565b60405180910390f35b34801561049f57600080fd5b506104a86110d9565b6040516104b591906159df565b60405180910390f35b3480156104ca57600080fd5b506104d36110df565b6040516104e091906159df565b60405180910390f35b3480156104f557600080fd5b506104fe6110e5565b60405161050b91906159df565b60405180910390f35b34801561052057600080fd5b506105296110eb565b60405161053691906159df565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906144c5565b6110f1565b6040516105739190615542565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e919061452a565b611111565b005b3480156105b157600080fd5b506105cc60048036038101906105c791906144c5565b611171565b6040516105d991906159df565b60405180910390f35b3480156105ee57600080fd5b506105f7611189565b005b34801561060557600080fd5b50610620600480360381019061061b919061470d565b611267565b005b34801561062e57600080fd5b50610637611369565b005b34801561064557600080fd5b50610660600480360381019061065b919061452a565b6114bc565b005b34801561066e57600080fd5b506106896004803603810190610684919061474e565b6114dc565b005b34801561069757600080fd5b506106b260048036038101906106ad919061474e565b6115ad565b005b3480156106c057600080fd5b506106db60048036038101906106d6919061474e565b6116a0565b6040516106e89190615542565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061474e565b6116c0565b005b34801561072657600080fd5b5061072f6117b2565b60405161073c91906159df565b60405180910390f35b34801561075157600080fd5b5061076c6004803603810190610767919061474e565b6117b8565b60405161077991906154db565b60405180910390f35b34801561078e57600080fd5b5061079761186a565b6040516107a49190615542565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906144c5565b61187d565b6040516107e191906159df565b60405180910390f35b3480156107f657600080fd5b506107ff611935565b60405161080c91906159df565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906144c5565b61193b565b005b34801561084a57600080fd5b50610853611c22565b60405161086091906159df565b60405180910390f35b34801561087557600080fd5b5061087e611c28565b60405161088b91906154db565b60405180910390f35b3480156108a057600080fd5b506108a9611d3a565b6040516108b691906154db565b60405180910390f35b3480156108cb57600080fd5b506108d4611d60565b6040516108e191906159df565b60405180910390f35b3480156108f657600080fd5b506108ff611d66565b60405161090c919061555d565b60405180910390f35b34801561092157600080fd5b5061092a611df8565b60405161093791906159df565b60405180910390f35b34801561094c57600080fd5b50610955611dfe565b604051610962919061555d565b60405180910390f35b34801561097757600080fd5b50610980611e8c565b60405161098d91906159df565b60405180910390f35b6109b060048036038101906109ab919061474e565b611e92565b005b3480156109be57600080fd5b506109d960048036038101906109d491906145f4565b6121c2565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906144c5565b612343565b005b348015610a1057600080fd5b50610a2b6004803603810190610a2691906144c5565b612470565b005b348015610a3957600080fd5b50610a546004803603810190610a4f91906144c5565b612730565b604051610a6191906154db565b60405180910390f35b348015610a7657600080fd5b50610a7f612860565b604051610a8c91906159df565b60405180910390f35b348015610aa157600080fd5b50610aaa612866565b604051610ab791906159df565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614579565b61286c565b005b348015610af557600080fd5b50610b106004803603810190610b0b919061466c565b6128ce565b005b348015610b1e57600080fd5b50610b396004803603810190610b34919061474e565b612ae2565b005b348015610b4757600080fd5b50610b50612c9f565b604051610b5d91906159df565b60405180910390f35b348015610b7257600080fd5b50610b7b612d2b565b604051610b8891906159df565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb3919061474e565b612d31565b604051610bc5919061555d565b60405180910390f35b348015610bda57600080fd5b50610be3612e83565b604051610bf091906159df565b60405180910390f35b348015610c0557600080fd5b50610c0e612e89565b604051610c1b91906159df565b60405180910390f35b348015610c3057600080fd5b50610c4b6004803603810190610c46919061474e565b612e8f565b005b348015610c5957600080fd5b50610c62612fac565b604051610c6f91906159df565b60405180910390f35b348015610c8457600080fd5b50610c8d612fb4565b604051610c9a919061555d565b60405180910390f35b348015610caf57600080fd5b50610cca6004803603810190610cc591906144ee565b613042565b604051610cd79190615542565b60405180910390f35b348015610cec57600080fd5b50610d076004803603810190610d02919061470d565b6130d6565b005b348015610d1557600080fd5b50610d1e6131d8565b604051610d2b91906159df565b60405180910390f35b60228054610d4190615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6d90615d2e565b8015610dba5780601f10610d8f57610100808354040283529160200191610dba565b820191906000526020600020905b815481529060010190602001808311610d9d57829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e8d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e9d5750610e9c826131de565b5b9050919050565b606060008054610eb390615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610edf90615d2e565b8015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b5050505050905090565b6000610f4182613248565b610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f77906157df565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fc6826117b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e906158bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110566132b4565b73ffffffffffffffffffffffffffffffffffffffff16148061108557506110848161107f6132b4565b613042565b5b6110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906156bf565b60405180910390fd5b6110ce83836132bc565b505050565b601e5481565b601d5481565b601b5481565b601a5481565b60095481565b60186020528060005260406000206000915054906101000a900460ff1681565b61112261111c6132b4565b82613375565b611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906158ff565b60405180910390fd5b61116c838383613453565b505050565b60176020528060005260406000206000915090505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112325750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61123b57600080fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113105750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61134f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113469061587f565b60405180910390fd5b80602290805190602001906113659291906142a9565b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114125750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114489061557f565b60405180910390fd5b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156114b9573d6000803e3d6000fd5b50565b6114d78383836040518060200160405280600081525061286c565b505050565b6114e581613248565b611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b9061595f565b60405180910390fd5b61152c6132b4565b73ffffffffffffffffffffffffffffffffffffffff1661154b826117b8565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611598906158df565b60405180910390fd5b6115aa816136af565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116565750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61165f57600080fd5b806011819055507f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe08160405161169591906159df565b60405180910390a150565b60166020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117695750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f9061557f565b60405180910390fd5b8060108190555050565b601f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906156ff565b60405180910390fd5b80915050919050565b601260009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906156df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e45750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a9061573f565b60405180910390fd5b6000601b5411611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f9061561f565b60405180910390fd5b60001515601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906155ff565b60405180910390fd5b601b6000815480929190611b0e90615d04565b9190505550601c6000815480929190611b2690615d60565b9190505550601954601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006022604051602001611bdd9190615485565b6040516020818303038152906040529050611bfa82601954613702565b611c06601954826138d0565b60196000815480929190611c1990615d60565b91905055505050565b600f5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cd35750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d099061557f565b60405180910390fd5b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b606060018054611d7590615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611da190615d2e565b8015611dee5780601f10611dc357610100808354040283529160200191611dee565b820191906000526020600020905b815481529060010190602001808311611dd157829003601f168201915b5050505050905090565b601c5481565b60218054611e0b90615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3790615d2e565b8015611e845780601f10611e5957610100808354040283529160200191611e84565b820191906000526020600020905b815481529060010190602001808311611e6757829003601f168201915b505050505081565b60115481565b60011515601260009054906101000a900460ff16151514611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf906159bf565b60405180910390fd5b60008111611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f229061599f565b60405180910390fd5b601054811115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f679061593f565b60405180910390fd5b600081600c54611f809190615bfb565b1015611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb8906157ff565b60405180910390fd5b80601154611fcf9190615ba1565b341015612011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120089061591f565b60405180910390fd5b60005b818110156121be57600a5460095414156120735761205f6001600954600161203a6132b4565b73ffffffffffffffffffffffffffffffffffffffff1661205a9190615ae3565b613944565b601481905550601454601381905550612082565b61207b612c9f565b6014819055505b600a600081548092919061209590615d04565b9190505550600c60008154809291906120ad90615d04565b91905055506000151560166000600f54815260200190815260200160002060009054906101000a900460ff1615151461211b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612112906155bf565b60405180910390fd5b6000602161212a601454613aa5565b60405160200161213b92919061549c565b604051602081830303815290604052905061215833600f54613702565b612164600f54826138d0565b600160166000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600f60008154809291906121a590615d60565b91905055505080806121b690615d60565b915050612014565b5050565b6121ca6132b4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f9061565f565b60405180910390fd5b80600560006122456132b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166122f26132b4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123379190615542565b60405180910390a35050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123ec5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6123f557600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b8160405161246591906154db565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806125195750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061589f565b60405180910390fd5b6000600e54101561259e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125959061577f565b60405180910390fd5b600a5460095414156125f5576125e1600160095460016125bc6132b4565b73ffffffffffffffffffffffffffffffffffffffff166125dc9190615ae3565b613944565b601481905550601454601381905550612604565b6125fd612c9f565b6014819055505b600a600081548092919061261790615d04565b9190505550600e600081548092919061262f90615d04565b91905055506000151560166000600f54815260200190815260200160002060009054906101000a900460ff1615151461269d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612694906155bf565b60405180910390fd5b600060216126ac601454613aa5565b6040516020016126bd92919061549c565b60405160208183030381529060405290506126da82600f54613702565b6126e6600f54826138d0565b600160166000600f54815260200190815260200160002060006101000a81548160ff021916908315150217905550600f600081548092919061272790615d60565b91905055505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806127db5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61281a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128119061557f565b60405180910390fd5b81602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600d5481565b60105481565b61287d6128776132b4565b83613375565b6128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906158ff565b60405180910390fd5b6128c884848484613c7a565b50505050565b60011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061585f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16612981836117b8565b73ffffffffffffffffffffffffffffffffffffffff16146129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce9061575f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166129f7826117b8565b73ffffffffffffffffffffffffffffffffffffffff1614612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a449061567f565b60405180910390fd5b60006023612a5c601f54613aa5565b604051602001612a6d92919061549c565b6040516020818303038152906040529050612a8a84601f54613702565b612a96601f54826138d0565b6001601f6000828254612aa99190615ae3565b925050819055506001601d6000828254612ac39190615ae3565b92505081905550612ad3836114dc565b612adc826114dc565b50505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b8b5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc19061557f565b60405180910390fd5b6001600954612bd99190615ae3565b6015819055506009546014819055508060096000828254612bfa9190615ae3565b92505081905550606381612c0e9190615bfb565b600b6000828254612c1f9190615ae3565b9250508190555080600a6000828254612c389190615ae3565b92505081905550606381612c4c9190615bfb565b600c81905550668e1bc9bf040000601181905550600f6010819055506063600d6000828254612c7b9190615ae3565b925050819055506063600e6000828254612c959190615ae3565b9250508190555050565b600080600a5411612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061597f565b60405180910390fd5b600954601454148015612cfb5750600954600f54105b15612d0a576015549050612d28565b600954600f5411612d27576001601454612d249190615ae3565b90505b5b90565b60155481565b6060612d3c82613248565b612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d72906157bf565b60405180910390fd5b6000600660008481526020019081526020016000208054612d9b90615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612dc790615d2e565b8015612e145780601f10612de957610100808354040283529160200191612e14565b820191906000526020600020905b815481529060010190602001808311612df757829003601f168201915b505050505090506000612e25613cd6565b9050600081511415612e3b578192505050612e7e565b600082511115612e70578082604051602001612e58929190615461565b60405160208183030381529060405292505050612e7e565b612e7984613ced565b925050505b919050565b600e5481565b600b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612f385750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6e9061557f565b60405180910390fd5b80601a6000828254612f899190615ae3565b9250508190555080601b6000828254612fa29190615ae3565b9250508190555050565b600047905090565b60238054612fc190615d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612fed90615d2e565b801561303a5780601f1061300f5761010080835404028352916020019161303a565b820191906000526020600020905b81548152906001019060200180831161301d57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061317f5750602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6131be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b59061587f565b60405180910390fd5b80602190805190602001906131d49291906142a9565b5050565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661332f836117b8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061338082613248565b6133bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b69061569f565b60405180910390fd5b60006133ca836117b8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061343957508373ffffffffffffffffffffffffffffffffffffffff1661342184610f36565b73ffffffffffffffffffffffffffffffffffffffff16145b8061344a57506134498185613042565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16613473826117b8565b73ffffffffffffffffffffffffffffffffffffffff16146134c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c09061581f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135309061563f565b60405180910390fd5b613544838383613d94565b61354f6000826132bc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359f9190615bfb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135f69190615ae3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6136b881613d99565b60006006600083815260200190815260200160002080546136d890615d2e565b9050146136ff576006600082815260200190815260200160002060006136fe919061432f565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137699061579f565b60405180910390fd5b61377b81613248565b156137bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b2906155df565b60405180910390fd5b6137c760008383613d94565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138179190615ae3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6138d982613248565b613918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390f9061571f565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019061393f9291906142a9565b505050565b6000808243426139526132b4565b604051602001613962919061542b565b6040516020818303038152906040528051906020012060001c6139859190615b70565b4542416040516020016139989190615446565b6040516020818303038152906040528051906020012060001c6139bb9190615b70565b44426139c79190615ae3565b6139d19190615ae3565b6139db9190615ae3565b6139e59190615ae3565b6139ef9190615ae3565b6139f99190615ae3565b604051602001613a0991906154c0565b6040516020818303038152906040528051906020012060001c90506000600b5486613a488888613a399190615bfb565b85613eaa90919063ffffffff16565b613a529190615ae3565b11613a875785613a768787613a679190615bfb565b84613eaa90919063ffffffff16565b613a809190615ae3565b9050613a99565b6002600b54613a969190615b70565b90505b80925050509392505050565b60606000821415613aed576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613c75565b600082905060005b60008214613b1f578080613b0890615d60565b915050600a82613b189190615b70565b9150613af5565b60008167ffffffffffffffff811115613b61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613b935781602001600182028036833780820191505090505b50905060008290505b60008614613c6d57600181613bb19190615bfb565b90506000600a8088613bc39190615b70565b613bcd9190615ba1565b87613bd89190615bfb565b6030613be49190615b39565b905060008160f81b905080848481518110613c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a88613c649190615b70565b97505050613b9c565b819450505050505b919050565b613c85848484613453565b613c9184848484613ef4565b613cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc79061559f565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060613cf882613248565b613d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2e9061583f565b60405180910390fd5b6000613d41613cd6565b90506000815111613d615760405180602001604052806000815250613d8c565b80613d6b8461408b565b604051602001613d7c929190615461565b6040516020818303038152906040525b915050919050565b505050565b6000613da4826117b8565b9050613db281600084613d94565b613dbd6000836132bc565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e0d9190615bfb565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613eec83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250614238565b905092915050565b6000613f158473ffffffffffffffffffffffffffffffffffffffff16614296565b1561407e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613f3e6132b4565b8786866040518563ffffffff1660e01b8152600401613f6094939291906154f6565b602060405180830381600087803b158015613f7a57600080fd5b505af1925050508015613fab57506040513d601f19601f82011682018060405250810190613fa891906146e4565b60015b61402e573d8060008114613fdb576040519150601f19603f3d011682016040523d82523d6000602084013e613fe0565b606091505b50600081511415614026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161401d9061559f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050614083565b600190505b949350505050565b606060008214156140d3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614233565b600082905060005b600082146141055780806140ee90615d60565b915050600a826140fe9190615b70565b91506140db565b60008167ffffffffffffffff811115614147577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156141795781602001600182028036833780820191505090505b5090505b6000851461422c576001826141929190615bfb565b9150600a856141a19190615de9565b60306141ad9190615ae3565b60f81b8183815181106141e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856142259190615b70565b945061417d565b8093505050505b919050565b6000808314158290614280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614277919061555d565b60405180910390fd5b50828461428d9190615de9565b90509392505050565b600080823b905060008111915050919050565b8280546142b590615d2e565b90600052602060002090601f0160209004810192826142d7576000855561431e565b82601f106142f057805160ff191683800117855561431e565b8280016001018555821561431e579182015b8281111561431d578251825591602001919060010190614302565b5b50905061432b919061436f565b5090565b50805461433b90615d2e565b6000825580601f1061434d575061436c565b601f01602090049060005260206000209081019061436b919061436f565b5b50565b5b80821115614388576000816000905550600101614370565b5090565b600061439f61439a84615a2b565b6159fa565b9050828152602081018484840111156143b757600080fd5b6143c2848285615cc2565b509392505050565b60006143dd6143d884615a5b565b6159fa565b9050828152602081018484840111156143f557600080fd5b614400848285615cc2565b509392505050565b60008135905061441781615ef4565b92915050565b60008135905061442c81615f0b565b92915050565b60008135905061444181615f22565b92915050565b60008151905061445681615f22565b92915050565b600082601f83011261446d57600080fd5b813561447d84826020860161438c565b91505092915050565b600082601f83011261449757600080fd5b81356144a78482602086016143ca565b91505092915050565b6000813590506144bf81615f39565b92915050565b6000602082840312156144d757600080fd5b60006144e584828501614408565b91505092915050565b6000806040838503121561450157600080fd5b600061450f85828601614408565b925050602061452085828601614408565b9150509250929050565b60008060006060848603121561453f57600080fd5b600061454d86828701614408565b935050602061455e86828701614408565b925050604061456f868287016144b0565b9150509250925092565b6000806000806080858703121561458f57600080fd5b600061459d87828801614408565b94505060206145ae87828801614408565b93505060406145bf878288016144b0565b925050606085013567ffffffffffffffff8111156145dc57600080fd5b6145e88782880161445c565b91505092959194509250565b6000806040838503121561460757600080fd5b600061461585828601614408565b92505060206146268582860161441d565b9150509250929050565b6000806040838503121561464357600080fd5b600061465185828601614408565b9250506020614662858286016144b0565b9150509250929050565b60008060006060848603121561468157600080fd5b600061468f86828701614408565b93505060206146a0868287016144b0565b92505060406146b1868287016144b0565b9150509250925092565b6000602082840312156146cd57600080fd5b60006146db84828501614432565b91505092915050565b6000602082840312156146f657600080fd5b600061470484828501614447565b91505092915050565b60006020828403121561471f57600080fd5b600082013567ffffffffffffffff81111561473957600080fd5b61474584828501614486565b91505092915050565b60006020828403121561476057600080fd5b600061476e848285016144b0565b91505092915050565b61478861478382615c41565b615dbb565b82525050565b61479781615c2f565b82525050565b6147ae6147a982615c2f565b615da9565b82525050565b6147bd81615c53565b82525050565b60006147ce82615aa0565b6147d88185615ab6565b93506147e8818560208601615cd1565b6147f181615ed6565b840191505092915050565b600061480782615aab565b6148118185615ac7565b9350614821818560208601615cd1565b61482a81615ed6565b840191505092915050565b600061484082615aab565b61484a8185615ad8565b935061485a818560208601615cd1565b80840191505092915050565b6000815461487381615d2e565b61487d8186615ad8565b9450600182166000811461489857600181146148a9576148dc565b60ff198316865281860193506148dc565b6148b285615a8b565b60005b838110156148d4578154818901526001820191506020810190506148b5565b838801955050505b50505092915050565b60006148f2600a83615ac7565b91507f4f6e6c79206f776e6572000000000000000000000000000000000000000000006000830152602082019050919050565b6000614932603283615ac7565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000614998601a83615ac7565b91507f4d696e743a20546f6b656e20616c72656164792065786973742e0000000000006000830152602082019050919050565b60006149d8601c83615ac7565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614a18601a83615ac7565b91507f5573657220616c7265616479206f776e206661726d4a756963650000000000006000830152602082019050919050565b6000614a58601c83615ac7565b91507f416c6c206661726d206a756963657320207472616e7366657265642e000000006000830152602082019050919050565b6000614a98602483615ac7565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614afe601983615ac7565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614b3e601783615ac7565b91507f557365722073686f756c64206f776e20546f6b656e20320000000000000000006000830152602082019050919050565b6000614b7e602c83615ac7565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614be4603883615ac7565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614c4a602a83615ac7565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614cb0602983615ac7565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d16602e83615ac7565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b6000614d7c601383615ac7565b91507f4f6e6c79206f776e65722063616e206d696e74000000000000000000000000006000830152602082019050919050565b6000614dbc601783615ac7565b91507f557365722073686f756c64206f776e20546f6b656e20310000000000000000006000830152602082019050919050565b6000614dfc601883615ac7565b91507f6d696e7420746f6b656e206c696d6974206578636565647300000000000000006000830152602082019050919050565b6000614e3c602083615ac7565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614e7c603183615ac7565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b6000614ee2602c83615ac7565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614f48603b83615ac7565b91507f6d696e7420746f6b656e206c696d697420657863656564732c20636865636b2060008301527f686f77206d616e792072656d61696e696e6720746f206d696e742e00000000006020830152604082019050919050565b6000614fae602983615ac7565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000615014602f83615ac7565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061507a602783615ac7565b91507f557365722073686f756c64206f776e206661726d204a7569636520666f72204260008301527f72656564696e67000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150e0600a83615ac7565b91507f6f6e6c79206f776e6572000000000000000000000000000000000000000000006000830152602082019050919050565b6000615120601783615ac7565b91507f4f6e6c79206f776e65722063616e207472616e736665720000000000000000006000830152602082019050919050565b6000615160602183615ac7565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151c6602083615ac7565b91507f4275726e3a2063616c6c6572206973206e6f7420746f6b656e206f776e65722e6000830152602082019050919050565b6000615206603183615ac7565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061526c601583615ac7565b91507f7072696365206973206e6f7420636f72726563742e00000000000000000000006000830152602082019050919050565b60006152ac601d83615ac7565b91507f6d617820686f72736573206d696e74206c696d697420657863656564730000006000830152602082019050919050565b60006152ec601b83615ac7565b91507f4275726e3a20746f6b656e20646f6573206e6f742065786973742e00000000006000830152602082019050919050565b600061532c601b83615ac7565b91507f416c6c20746f6b656e732068617665206265656e206d696e74656400000000006000830152602082019050919050565b600061536c602183615ac7565b91507f6d696e696d756d203120746f6b656e206e65656420746f206265206d696e746560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153d2600b83615ac7565b91507f73616c65206973206f66660000000000000000000000000000000000000000006000830152602082019050919050565b61540e81615cab565b82525050565b61542561542082615cab565b615ddf565b82525050565b6000615437828461479d565b60148201915081905092915050565b60006154528284614777565b60148201915081905092915050565b600061546d8285614835565b91506154798284614835565b91508190509392505050565b60006154918284614866565b915081905092915050565b60006154a88285614866565b91506154b48284614835565b91508190509392505050565b60006154cc8284615414565b60208201915081905092915050565b60006020820190506154f0600083018461478e565b92915050565b600060808201905061550b600083018761478e565b615518602083018661478e565b6155256040830185615405565b818103606083015261553781846147c3565b905095945050505050565b600060208201905061555760008301846147b4565b92915050565b6000602082019050818103600083015261557781846147fc565b905092915050565b60006020820190508181036000830152615598816148e5565b9050919050565b600060208201905081810360008301526155b881614925565b9050919050565b600060208201905081810360008301526155d88161498b565b9050919050565b600060208201905081810360008301526155f8816149cb565b9050919050565b6000602082019050818103600083015261561881614a0b565b9050919050565b6000602082019050818103600083015261563881614a4b565b9050919050565b6000602082019050818103600083015261565881614a8b565b9050919050565b6000602082019050818103600083015261567881614af1565b9050919050565b6000602082019050818103600083015261569881614b31565b9050919050565b600060208201905081810360008301526156b881614b71565b9050919050565b600060208201905081810360008301526156d881614bd7565b9050919050565b600060208201905081810360008301526156f881614c3d565b9050919050565b6000602082019050818103600083015261571881614ca3565b9050919050565b6000602082019050818103600083015261573881614d09565b9050919050565b6000602082019050818103600083015261575881614d6f565b9050919050565b6000602082019050818103600083015261577881614daf565b9050919050565b6000602082019050818103600083015261579881614def565b9050919050565b600060208201905081810360008301526157b881614e2f565b9050919050565b600060208201905081810360008301526157d881614e6f565b9050919050565b600060208201905081810360008301526157f881614ed5565b9050919050565b6000602082019050818103600083015261581881614f3b565b9050919050565b6000602082019050818103600083015261583881614fa1565b9050919050565b6000602082019050818103600083015261585881615007565b9050919050565b600060208201905081810360008301526158788161506d565b9050919050565b60006020820190508181036000830152615898816150d3565b9050919050565b600060208201905081810360008301526158b881615113565b9050919050565b600060208201905081810360008301526158d881615153565b9050919050565b600060208201905081810360008301526158f8816151b9565b9050919050565b60006020820190508181036000830152615918816151f9565b9050919050565b600060208201905081810360008301526159388161525f565b9050919050565b600060208201905081810360008301526159588161529f565b9050919050565b60006020820190508181036000830152615978816152df565b9050919050565b600060208201905081810360008301526159988161531f565b9050919050565b600060208201905081810360008301526159b88161535f565b9050919050565b600060208201905081810360008301526159d8816153c5565b9050919050565b60006020820190506159f46000830184615405565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615a2157615a20615ea7565b5b8060405250919050565b600067ffffffffffffffff821115615a4657615a45615ea7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115615a7657615a75615ea7565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615aee82615cab565b9150615af983615cab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615b2e57615b2d615e1a565b5b828201905092915050565b6000615b4482615cb5565b9150615b4f83615cb5565b92508260ff03821115615b6557615b64615e1a565b5b828201905092915050565b6000615b7b82615cab565b9150615b8683615cab565b925082615b9657615b95615e49565b5b828204905092915050565b6000615bac82615cab565b9150615bb783615cab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615bf057615bef615e1a565b5b828202905092915050565b6000615c0682615cab565b9150615c1183615cab565b925082821015615c2457615c23615e1a565b5b828203905092915050565b6000615c3a82615c8b565b9050919050565b6000615c4c82615c8b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615cef578082015181840152602081019050615cd4565b83811115615cfe576000848401525b50505050565b6000615d0f82615cab565b91506000821415615d2357615d22615e1a565b5b600182039050919050565b60006002820490506001821680615d4657607f821691505b60208210811415615d5a57615d59615e78565b5b50919050565b6000615d6b82615cab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615d9e57615d9d615e1a565b5b600182019050919050565b6000615db482615dcd565b9050919050565b6000615dc682615dcd565b9050919050565b6000615dd882615ee7565b9050919050565b6000819050919050565b6000615df482615cab565b9150615dff83615cab565b925082615e0f57615e0e615e49565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b615efd81615c2f565b8114615f0857600080fd5b50565b615f1481615c53565b8114615f1f57600080fd5b50565b615f2b81615c5f565b8114615f3657600080fd5b50565b615f4281615cab565b8114615f4d57600080fd5b5056fea2646970667358221220966c3261d32f171385b25bd26a3ee4118f0bb899c39ba796aabc2824c642ed0d64736f6c63430008000033

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

000000000000000000000000a25d6e6e02d1fd7a886b83a906c91cde7ed8ddfc000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e746865756e737461626c65686f72736573796172642e636f6d2f686f7273652f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f6d657461646174612e746865756e737461626c65686f72736573796172642e636f6d2f6661726d4a75696365730000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e746865756e737461626c65686f72736573796172642e636f6d2f62726565642f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _fundWallet (address): 0xA25D6e6E02D1fD7A886b83A906c91cde7eD8DdFC
Arg [1] : _baseUri (string): https://metadata.theunstablehorsesyard.com/horse/
Arg [2] : _FarmJuice_baseUri (string): https://metadata.theunstablehorsesyard.com/farmJuices
Arg [3] : _breed_baseUri (string): https://metadata.theunstablehorsesyard.com/breed/

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 000000000000000000000000a25d6e6e02d1fd7a886b83a906c91cde7ed8ddfc
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [5] : 68747470733a2f2f6d657461646174612e746865756e737461626c65686f7273
Arg [6] : 6573796172642e636f6d2f686f7273652f000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [8] : 68747470733a2f2f6d657461646174612e746865756e737461626c65686f7273
Arg [9] : 6573796172642e636f6d2f6661726d4a75696365730000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [11] : 68747470733a2f2f6d657461646174612e746865756e737461626c65686f7273
Arg [12] : 6573796172642e636f6d2f62726565642f000000000000000000000000000000


Deployed Bytecode Sourcemap

18618:10407:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20178:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8107:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8870:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9965:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9560:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19855:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19812:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19689:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19653:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18841:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19550:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10669:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19495:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28543:122;;;;;;;;;;;;;:::i;:::-;;26603:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28673:177;;;;;;;;;;;;;:::i;:::-;;10982:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27061:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28358:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19426:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27995:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19911:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8623:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19267:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8407:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18882:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23472:806;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19134:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20635:171;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18814:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19309:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8978:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19740:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20149:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19210:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22013:1421;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10194:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28170:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21065:913;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20816:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19044:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19168:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11141:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24309:696;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27415:572;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25740:393;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19387:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15194:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19079:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18943:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26815:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27307:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20217:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10497:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28856:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18983:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20178:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8107:292::-;8209:4;8248:25;8233:40;;;:11;:40;;;;:105;;;;8305:33;8290:48;;;:11;:48;;;;8233:105;:158;;;;8355:36;8379:11;8355:23;:36::i;:::-;8233:158;8226:165;;8107:292;;;:::o;8870:100::-;8924:13;8957:5;8950:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8870:100;:::o;9965:221::-;10041:7;10069:16;10077:7;10069;:16::i;:::-;10061:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10154:15;:24;10170:7;10154:24;;;;;;;;;;;;;;;;;;;;;10147:31;;9965:221;;;:::o;9560:397::-;9641:13;9657:23;9672:7;9657:14;:23::i;:::-;9641:39;;9705:5;9699:11;;:2;:11;;;;9691:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;9785:5;9769:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;9794:37;9811:5;9818:12;:10;:12::i;:::-;9794:16;:37::i;:::-;9769:62;9761:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;9928:21;9937:2;9941:7;9928:8;:21::i;:::-;9560:397;;;:::o;19855:49::-;;;;:::o;19812:36::-;;;;:::o;19689:44::-;;;;:::o;19653:29::-;;;;:::o;18841:34::-;;;;:::o;19550:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;10669:305::-;10830:41;10849:12;:10;:12::i;:::-;10863:7;10830:18;:41::i;:::-;10822:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;10938:28;10948:4;10954:2;10958:7;10938:9;:28::i;:::-;10669:305;;;:::o;19495:48::-;;;;;;;;;;;;;;;;;:::o;28543:122::-;28602:5;;;;;;;;;;;28588:19;;:10;:19;;;:47;;;;28625:10;;;;;;;;;;;28611:24;;:10;:24;;;28588:47;28580:56;;;;;;28653:4;;;;;;;;;;;28652:5;28645:4;;:12;;;;;;;;;;;;;;;;;;28543:122::o;26603:200::-;26702:5;;;;;;;;;;;26688:19;;:10;:19;;;:47;;;;26725:10;;;;;;;;;;;26711:24;;:10;:24;;;26688:47;26680:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26779:16;26759:17;:36;;;;;;;;;;;;:::i;:::-;;26603:200;:::o;28673:177::-;28732:5;;;;;;;;;;;28718:19;;:10;:19;;;:47;;;;28755:10;;;;;;;;;;;28741:24;;:10;:24;;;28718:47;28710:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28799:10;;;;;;;;;;;28791:28;;:51;28820:21;28791:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28673:177::o;10982:151::-;11086:39;11103:4;11109:2;11113:7;11086:39;;;;;;;;;;;;:16;:39::i;:::-;10982:151;;;:::o;27061:230::-;27119:17;27127:8;27119:7;:17::i;:::-;27111:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27208:12;:10;:12::i;:::-;27187:33;;:17;27195:8;27187:7;:17::i;:::-;:33;;;27179:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;27268:15;27274:8;27268:5;:15::i;:::-;27061:230;:::o;28358:177::-;28432:5;;;;;;;;;;;28418:19;;:10;:19;;;:47;;;;28455:10;;;;;;;;;;;28441:24;;:10;:24;;;28418:47;28410:56;;;;;;28483:8;28475:5;:16;;;;28505:22;28518:8;28505:22;;;;;;:::i;:::-;;;;;;;;28358:177;:::o;19426:34::-;;;;;;;;;;;;;;;;;;;;;;:::o;27995:167::-;28071:5;;;;;;;;;;;28057:19;;:10;:19;;;:47;;;;28094:10;;;;;;;;;;;28080:24;;:10;:24;;;28057:47;28049:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28150:4;28128:19;:26;;;;27995:167;:::o;19911:59::-;;;;:::o;8623:239::-;8695:7;8715:13;8731:7;:16;8739:7;8731:16;;;;;;;;;;;;;;;;;;;;;8715:32;;8783:1;8766:19;;:5;:19;;;;8758:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8849:5;8842:12;;;8623:239;;;:::o;19267:25::-;;;;;;;;;;;;;:::o;8407:208::-;8479:7;8524:1;8507:19;;:5;:19;;;;8499:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8591:9;:16;8601:5;8591:16;;;;;;;;;;;;;;;;8584:23;;8407:208;;;:::o;18882:54::-;;;;:::o;23472:806::-;23625:5;;;;;;;;;;;23611:19;;:10;:19;;;:47;;;;23648:10;;;;;;;;;;;23634:24;;:10;:24;;;23611:47;23603:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23723:1;23701:19;;:23;23693:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23803:5;23777:31;;:14;:22;23792:6;23777:22;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;23769:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23861:19;;:21;;;;;;;;;:::i;:::-;;;;;;23893:20;;:22;;;;;;;;;:::i;:::-;;;;;;23953:20;;23926:16;:24;23943:6;23926:24;;;;;;;;;;;;;;;:47;;;;24009:4;23984:14;:22;23999:6;23984:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24034:27;24088:17;24071:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;24034:73;;24132:35;24138:6;24146:20;;24132:5;:35::i;:::-;24178:49;24191:20;;24213:13;24178:12;:49::i;:::-;24248:20;;:22;;;;;;;;;:::i;:::-;;;;;;23472:806;;:::o;19134:27::-;;;;:::o;20635:171::-;20681:7;20722:5;;;;;;;;;;;20708:19;;:10;:19;;;:47;;;;20745:10;;;;;;;;;;;20731:24;;:10;:24;;;20708:47;20700:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20788:10;;;;;;;;;;;20781:17;;20635:171;:::o;18814:20::-;;;;;;;;;;;;;:::o;19309:33::-;;;;:::o;8978:104::-;9034:13;9067:7;9060:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:104;:::o;19740:36::-;;;;:::o;20149:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19210:37::-;;;;:::o;22013:1421::-;22089:4;22081:12;;:4;;;;;;;;;;;:12;;;22073:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;22144:1;22128:13;:17;22120:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22219:19;;22202:13;:36;;22194:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22335:1;22318:13;22291:24;;:40;;;;:::i;:::-;:45;;22283:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;22488:13;22480:5;;:21;;;;:::i;:::-;22467:9;:34;;22459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22576:9;22571:809;22595:13;22591:1;:17;22571:809;;;22652:24;;22633:15;;:43;22630:287;;;22711:71;22718:1;22721:15;;22780:1;22762:12;:10;:12::i;:::-;22738:39;;:43;;;;:::i;:::-;22711:6;:71::i;:::-;22697:11;:85;;;;22818:11;;22801:14;:28;;;;22630:287;;;22884:17;:15;:17::i;:::-;22870:11;:31;;;;22630:287;22931:24;;:26;;;;;;;;;:::i;:::-;;;;;;22972:24;;:26;;;;;;;;;:::i;:::-;;;;;;23057:5;23035:27;;:5;:18;23041:11;;23035:18;;;;;;;;;;;;;;;;;;;;;:27;;;23027:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23108:22;23157:7;23166:21;23175:11;;23166:8;:21::i;:::-;23140:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23108:81;;23204:30;23210:10;23222:11;;23204:5;:30::i;:::-;23249:37;23262:11;;23276:8;23249:12;:37::i;:::-;23336:4;23315:5;:18;23321:11;;23315:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;23355:11;;:13;;;;;;;;;:::i;:::-;;;;;;22571:809;22610:3;;;;;:::i;:::-;;;;22571:809;;;;22013:1421;:::o;10194:295::-;10309:12;:10;:12::i;:::-;10297:24;;:8;:24;;;;10289:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10409:8;10364:18;:32;10383:12;:10;:12::i;:::-;10364:32;;;;;;;;;;;;;;;:42;10397:8;10364:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;10462:8;10433:48;;10448:12;:10;:12::i;:::-;10433:48;;;10472:8;10433:48;;;;;;:::i;:::-;;;;;;;;10194:295;;:::o;28170:180::-;28247:5;;;;;;;;;;;28233:19;;:10;:19;;;:47;;;;28270:10;;;;;;;;;;;28256:24;;:10;:24;;;28233:47;28225:56;;;;;;28298:8;28290:5;;:16;;;;;;;;;;;;;;;;;;28320:22;28333:8;28320:22;;;;;;:::i;:::-;;;;;;;;28170:180;:::o;21065:913::-;21137:5;;;;;;;;;;;21123:19;;:10;:19;;;:47;;;;21160:10;;;;;;;;;;;21146:24;;:10;:24;;;21123:47;21115:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21242:1;21217:21;;:26;;21209:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21315:24;;21296:15;;:43;21293:267;;;21370:71;21377:1;21380:15;;21439:1;21421:12;:10;:12::i;:::-;21397:39;;:43;;;;:::i;:::-;21370:6;:71::i;:::-;21356:11;:85;;;;21473:11;;21456:14;:28;;;;21293:267;;;21531:17;:15;:17::i;:::-;21517:11;:31;;;;21293:267;21570:24;;:26;;;;;;;;;:::i;:::-;;;;;;21607:21;;:23;;;;;;;;;:::i;:::-;;;;;;21681:5;21659:27;;:5;:18;21665:11;;21659:18;;;;;;;;;;;;;;;;;;;;;:27;;;21651:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21728:22;21777:7;21786:21;21795:11;;21786:8;:21::i;:::-;21760:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21728:81;;21820:22;21826:2;21830:11;;21820:5;:22::i;:::-;21853:37;21866:11;;21880:8;21853:12;:37::i;:::-;21932:4;21911:5;:18;21917:11;;21911:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21947:11;;:13;;;;;;;;;:::i;:::-;;;;;;21065:913;;:::o;20816:205::-;20879:7;20920:5;;;;;;;;;;;20906:19;;:10;:19;;;:47;;;;20943:10;;;;;;;;;;;20929:24;;:10;:24;;;20906:47;20898:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21000:11;20979:10;;:33;;;;;;;;;;;;;;;;;;20816:205;;;:::o;19044:28::-;;;;:::o;19168:35::-;;;;:::o;11141:285::-;11273:41;11292:12;:10;:12::i;:::-;11306:7;11273:18;:41::i;:::-;11265:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;11379:39;11393:4;11399:2;11403:7;11412:5;11379:13;:39::i;:::-;11141:285;;;;:::o;24309:696::-;24428:4;24398:34;;:14;:26;24413:10;24398:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;24390:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;24518:10;24496:32;;:18;24504:9;24496:7;:18::i;:::-;:32;;;24488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24598:10;24576:32;;:18;24584:9;24576:7;:18::i;:::-;:32;;;24568:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24659:22;24708:13;24723:31;24732:21;;24723:8;:31::i;:::-;24691:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24659:97;;24767:36;24773:6;24781:21;;24767:5;:36::i;:::-;24814:45;24827:21;;24850:8;24814:12;:45::i;:::-;24905:1;24880:21;;:26;;;;;;;:::i;:::-;;;;;;;;24942:1;24917:20;;:26;;;;;;;:::i;:::-;;;;;;;;24956:15;24961:9;24956:4;:15::i;:::-;24982;24987:9;24982:4;:15::i;:::-;24309:696;;;;:::o;27415:572::-;27501:5;;;;;;;;;;;27487:19;;:10;:19;;;:47;;;;27524:10;;;;;;;;;;;27510:24;;:10;:24;;;27487:47;27479:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27592:1;27574:15;;:19;;;;:::i;:::-;27566:5;:27;;;;27616:15;;27602:11;:29;;;;27659:13;27640:15;;:32;;;;;;;:::i;:::-;;;;;;;;27718:2;27702:13;:18;;;;:::i;:::-;27682:15;;:39;;;;;;;:::i;:::-;;;;;;;;27759:13;27731:24;;:41;;;;;;;:::i;:::-;;;;;;;;27825:2;27809:13;:18;;;;:::i;:::-;27781:24;:47;;;;27845:17;27837:5;:25;;;;27906:2;27884:19;:24;;;;27941:2;27925:12;;:18;;;;;;;:::i;:::-;;;;;;;;27977:2;27952:21;;:27;;;;;;;:::i;:::-;;;;;;;;27415:572;:::o;25740:393::-;25787:19;25854:1;25827:24;;:28;25819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25926:15;;25911:11;;:30;:63;;;;;25959:15;;25945:11;;:29;25911:63;25908:218;;;26005:5;;25991:19;;25908:218;;;26053:15;;26038:11;;:30;26035:91;;26113:1;26099:11;;:15;;;;:::i;:::-;26085:29;;26035:91;25908:218;25740:393;:::o;19387:24::-;;;;:::o;15194:679::-;15267:13;15301:16;15309:7;15301;:16::i;:::-;15293:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;15384:23;15410:10;:19;15421:7;15410:19;;;;;;;;;;;15384:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15440:18;15461:10;:8;:10::i;:::-;15440:31;;15569:1;15553:4;15547:18;:23;15543:72;;;15594:9;15587:16;;;;;;15543:72;15745:1;15725:9;15719:23;:27;15715:108;;;15794:4;15800:9;15777:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15763:48;;;;;;15715:108;15842:23;15857:7;15842:14;:23::i;:::-;15835:30;;;;15194:679;;;;:::o;19079:48::-;;;;:::o;18943:33::-;;;;:::o;26815:234::-;26907:5;;;;;;;;;;;26893:19;;:10;:19;;;:47;;;;26930:10;;;;;;;;;;;26916:24;;:10;:24;;;26893:47;26885:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26980:13;26966:10;;:27;;;;;;;:::i;:::-;;;;;;;;27028:13;27005:19;;:36;;;;;;;:::i;:::-;;;;;;;;26815:234;:::o;27307:96::-;27348:7;27374:21;27367:28;;27307:96;:::o;20217:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10497:164::-;10594:4;10618:18;:25;10637:5;10618:25;;;;;;;;;;;;;;;:35;10644:8;10618:35;;;;;;;;;;;;;;;;;;;;;;;;;10611:42;;10497:164;;;;:::o;28856:166::-;28937:5;;;;;;;;;;;28923:19;;:10;:19;;;:47;;;;28960:10;;;;;;;;;;;28946:24;;:10;:24;;;28923:47;28915:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29006:7;28996;:17;;;;;;;;;;;;:::i;:::-;;28856:166;:::o;18983:54::-;;;;:::o;7111:157::-;7196:4;7235:25;7220:40;;;:11;:40;;;;7213:47;;7111:157;;;:::o;11714:127::-;11779:4;11831:1;11803:30;;:7;:16;11811:7;11803:16;;;;;;;;;;;;;;;;;;;;;:30;;;;11796:37;;11714:127;;;:::o;5228:98::-;5281:7;5308:10;5301:17;;5228:98;:::o;13891:174::-;13993:2;13966:15;:24;13982:7;13966:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;14049:7;14045:2;14011:46;;14020:23;14035:7;14020:14;:23::i;:::-;14011:46;;;;;;;;;;;;13891:174;;:::o;11849:348::-;11942:4;11967:16;11975:7;11967;:16::i;:::-;11959:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12043:13;12059:23;12074:7;12059:14;:23::i;:::-;12043:39;;12112:5;12101:16;;:7;:16;;;:51;;;;12145:7;12121:31;;:20;12133:7;12121:11;:20::i;:::-;:31;;;12101:51;:87;;;;12156:32;12173:5;12180:7;12156:16;:32::i;:::-;12101:87;12093:96;;;11849:348;;;;:::o;13339:544::-;13464:4;13437:31;;:23;13452:7;13437:14;:23::i;:::-;:31;;;13429:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13547:1;13533:16;;:2;:16;;;;13525:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13603:39;13624:4;13630:2;13634:7;13603:20;:39::i;:::-;13707:29;13724:1;13728:7;13707:8;:29::i;:::-;13768:1;13749:9;:15;13759:4;13749:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;13797:1;13780:9;:13;13790:2;13780:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;13828:2;13809:7;:16;13817:7;13809:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;13867:7;13863:2;13848:27;;13857:4;13848:27;;;;;;;;;;;;13339:544;;;:::o;16106:206::-;16175:20;16187:7;16175:11;:20::i;:::-;16249:1;16218:10;:19;16229:7;16218:19;;;;;;;;;;;16212:33;;;;;:::i;:::-;;;:38;16208:97;;16274:10;:19;16285:7;16274:19;;;;;;;;;;;;16267:26;;;;:::i;:::-;16208:97;16106:206;:::o;12581:382::-;12675:1;12661:16;;:2;:16;;;;12653:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;12734:16;12742:7;12734;:16::i;:::-;12733:17;12725:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;12796:45;12825:1;12829:2;12833:7;12796:20;:45::i;:::-;12871:1;12854:9;:13;12864:2;12854:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;12902:2;12883:7;:16;12891:7;12883:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12947:7;12943:2;12922:33;;12939:1;12922:33;;;;;;;;;;;;12581:382;;:::o;15881:217::-;15981:16;15989:7;15981;:16::i;:::-;15973:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16081:9;16059:10;:19;16070:7;16059:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;15881:217;;:::o;25043:688::-;25124:7;25138:12;25486:5;25463:12;25435:15;25415:12;:10;:12::i;:::-;25398:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;25388:41;;;;;;25380:50;;25379:72;;;;:::i;:::-;25353:14;25325:15;25303:14;25286:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;25276:43;;;;;;25268:52;;25267:74;;;;:::i;:::-;25239:16;25213:15;:42;;;;:::i;:::-;:129;;;;:::i;:::-;:154;;;;:::i;:::-;:239;;;;:::i;:::-;:262;;;;:::i;:::-;:278;;;;:::i;:::-;25188:311;;;;;;;;:::i;:::-;;;;;;;;;;;;;25171:335;;;;;;25157:355;;25138:374;;25521:15;25581;;25572:4;25550:19;25564:4;25559:2;:9;;;;:::i;:::-;25550:4;:8;;:19;;;;:::i;:::-;:26;;;;:::i;:::-;25549:47;25545:160;;25642:4;25620:19;25634:4;25629:2;:9;;;;:::i;:::-;25620:4;:8;;:19;;;;:::i;:::-;:26;;;;:::i;:::-;25607:39;;25545:160;;;25698:1;25680:15;;:19;;;;:::i;:::-;25667:32;;25545:160;25716:10;25709:17;;;;25043:688;;;;;:::o;26142:448::-;26195:27;26239:1;26233:2;:7;26229:35;;;26248:10;;;;;;;;;;;;;;;;;;;;;26229:35;26268:9;26280:2;26268:14;;26287:11;26303:45;26315:1;26310;:6;26303:45;;26324:5;;;;;:::i;:::-;;;;26340:2;26335:7;;;;;:::i;:::-;;;26303:45;;;26352:17;26382:3;26372:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26352:34;;26391:9;26403:3;26391:15;;26411:151;26424:1;26418:2;:7;26411:151;;26441:1;26437;:5;;;;:::i;:::-;26433:9;;26448:10;26490:2;26484;26479;:7;;;;:::i;:::-;26478:14;;;;:::i;:::-;26473:2;:19;;;;:::i;:::-;26462:2;:31;;;;:::i;:::-;26448:46;;26500:9;26519:4;26512:12;;26500:24;;26540:2;26530:4;26535:1;26530:7;;;;;;;;;;;;;;;;;;;:12;;;;;;;;;;;26554:2;26548:8;;;;;:::i;:::-;;;26411:151;;;;;26580:4;26566:19;;;;;;26142:448;;;;:::o;11434:272::-;11548:28;11558:4;11564:2;11568:7;11548:9;:28::i;:::-;11595:48;11618:4;11624:2;11628:7;11637:5;11595:22;:48::i;:::-;11587:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;11434:272;;;;:::o;9458:94::-;9509:13;9535:9;;;;;;;;;;;;;;9458:94;:::o;9090:360::-;9163:13;9197:16;9205:7;9197;:16::i;:::-;9189:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;9278:21;9302:10;:8;:10::i;:::-;9278:34;;9354:1;9336:7;9330:21;:25;:112;;;;;;;;;;;;;;;;;9395:7;9404:18;:7;:16;:18::i;:::-;9378:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9330:112;9323:119;;;9090:360;;;:::o;14924:93::-;;;;:::o;12971:360::-;13031:13;13047:23;13062:7;13047:14;:23::i;:::-;13031:39;;13083:48;13104:5;13119:1;13123:7;13083:20;:48::i;:::-;13172:29;13189:1;13193:7;13172:8;:29::i;:::-;13234:1;13214:9;:16;13224:5;13214:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;13253:7;:16;13261:7;13253:16;;;;;;;;;;;;13246:23;;;;;;;;;;;13315:7;13311:1;13287:36;;13296:5;13287:36;;;;;;;;;;;;12971:360;;:::o;18278:130::-;18336:7;18363:37;18367:1;18370;18363:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;18356:44;;18278:130;;;;:::o;14073:843::-;14194:4;14220:15;:2;:13;;;:15::i;:::-;14216:693;;;14272:2;14256:36;;;14293:12;:10;:12::i;:::-;14307:4;14313:7;14322:5;14256:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14252:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14519:1;14502:6;:13;:18;14498:341;;;14545:60;;;;;;;;;;:::i;:::-;;;;;;;;14498:341;14789:6;14783:13;14774:6;14770:2;14766:15;14759:38;14252:602;14389:45;;;14379:55;;;:6;:55;;;;14372:62;;;;;14216:693;14893:4;14886:11;;14073:843;;;;;;;:::o;5691:534::-;5747:13;5788:1;5779:5;:10;5775:53;;;5806:10;;;;;;;;;;;;;;;;;;;;;5775:53;5838:12;5853:5;5838:20;;5869:14;5894:78;5909:1;5901:4;:9;5894:78;;5927:8;;;;;:::i;:::-;;;;5958:2;5950:10;;;;;:::i;:::-;;;5894:78;;;5982:19;6014:6;6004:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5982:39;;6032:154;6048:1;6039:5;:10;6032:154;;6076:1;6066:11;;;;;:::i;:::-;;;6143:2;6135:5;:10;;;;:::i;:::-;6122:2;:24;;;;:::i;:::-;6109:39;;6092:6;6099;6092:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;6172:2;6163:11;;;;;:::i;:::-;;;6032:154;;;6210:6;6196:21;;;;;5691:534;;;;:::o;18416:166::-;18502:7;18535:1;18530;:6;;18538:12;18522:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18573:1;18569;:5;;;;:::i;:::-;18562:12;;18416:166;;;;;:::o;1801:176::-;1861:4;1880:12;1934:7;1922:20;1914:28;;1968:1;1961:4;:8;1954:15;;;1801:176;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:552::-;;;;5023:2;5011:9;5002:7;4998:23;4994:32;4991:2;;;5039:1;5036;5029:12;4991:2;5082:1;5107:53;5152:7;5143:6;5132:9;5128:22;5107:53;:::i;:::-;5097:63;;5053:117;5209:2;5235:53;5280:7;5271:6;5260:9;5256:22;5235:53;:::i;:::-;5225:63;;5180:118;5337:2;5363:53;5408:7;5399:6;5388:9;5384:22;5363:53;:::i;:::-;5353:63;;5308:118;4981:452;;;;;:::o;5439:260::-;;5546:2;5534:9;5525:7;5521:23;5517:32;5514:2;;;5562:1;5559;5552:12;5514:2;5605:1;5630:52;5674:7;5665:6;5654:9;5650:22;5630:52;:::i;:::-;5620:62;;5576:116;5504:195;;;;:::o;5705:282::-;;5823:2;5811:9;5802:7;5798:23;5794:32;5791:2;;;5839:1;5836;5829:12;5791:2;5882:1;5907:63;5962:7;5953:6;5942:9;5938:22;5907:63;:::i;:::-;5897:73;;5853:127;5781:206;;;;:::o;5993:375::-;;6111:2;6099:9;6090:7;6086:23;6082:32;6079:2;;;6127:1;6124;6117:12;6079:2;6198:1;6187:9;6183:17;6170:31;6228:18;6220:6;6217:30;6214:2;;;6260:1;6257;6250:12;6214:2;6288:63;6343:7;6334:6;6323:9;6319:22;6288:63;:::i;:::-;6278:73;;6141:220;6069:299;;;;:::o;6374:262::-;;6482:2;6470:9;6461:7;6457:23;6453:32;6450:2;;;6498:1;6495;6488:12;6450:2;6541:1;6566:53;6611:7;6602:6;6591:9;6587:22;6566:53;:::i;:::-;6556:63;;6512:117;6440:196;;;;:::o;6642:189::-;6763:61;6791:32;6817:5;6791:32;:::i;:::-;6763:61;:::i;:::-;6758:3;6751:74;6741:90;;:::o;6837:118::-;6924:24;6942:5;6924:24;:::i;:::-;6919:3;6912:37;6902:53;;:::o;6961:157::-;7066:45;7086:24;7104:5;7086:24;:::i;:::-;7066:45;:::i;:::-;7061:3;7054:58;7044:74;;:::o;7124:109::-;7205:21;7220:5;7205:21;:::i;:::-;7200:3;7193:34;7183:50;;:::o;7239:360::-;;7353:38;7385:5;7353:38;:::i;:::-;7407:70;7470:6;7465:3;7407:70;:::i;:::-;7400:77;;7486:52;7531:6;7526:3;7519:4;7512:5;7508:16;7486:52;:::i;:::-;7563:29;7585:6;7563:29;:::i;:::-;7558:3;7554:39;7547:46;;7329:270;;;;;:::o;7605:364::-;;7721:39;7754:5;7721:39;:::i;:::-;7776:71;7840:6;7835:3;7776:71;:::i;:::-;7769:78;;7856:52;7901:6;7896:3;7889:4;7882:5;7878:16;7856:52;:::i;:::-;7933:29;7955:6;7933:29;:::i;:::-;7928:3;7924:39;7917:46;;7697:272;;;;;:::o;7975:377::-;;8109:39;8142:5;8109:39;:::i;:::-;8164:89;8246:6;8241:3;8164:89;:::i;:::-;8157:96;;8262:52;8307:6;8302:3;8295:4;8288:5;8284:16;8262:52;:::i;:::-;8339:6;8334:3;8330:16;8323:23;;8085:267;;;;;:::o;8382:845::-;;8522:5;8516:12;8551:36;8577:9;8551:36;:::i;:::-;8603:89;8685:6;8680:3;8603:89;:::i;:::-;8596:96;;8723:1;8712:9;8708:17;8739:1;8734:137;;;;8885:1;8880:341;;;;8701:520;;8734:137;8818:4;8814:9;8803;8799:25;8794:3;8787:38;8854:6;8849:3;8845:16;8838:23;;8734:137;;8880:341;8947:38;8979:5;8947:38;:::i;:::-;9007:1;9021:154;9035:6;9032:1;9029:13;9021:154;;;9109:7;9103:14;9099:1;9094:3;9090:11;9083:35;9159:1;9150:7;9146:15;9135:26;;9057:4;9054:1;9050:12;9045:17;;9021:154;;;9204:6;9199:3;9195:16;9188:23;;8887:334;;8701:520;;8489:738;;;;;;:::o;9233:308::-;;9396:67;9460:2;9455:3;9396:67;:::i;:::-;9389:74;;9493:12;9489:1;9484:3;9480:11;9473:33;9532:2;9527:3;9523:12;9516:19;;9379:162;;;:::o;9547:382::-;;9710:67;9774:2;9769:3;9710:67;:::i;:::-;9703:74;;9807:34;9803:1;9798:3;9794:11;9787:55;9873:20;9868:2;9863:3;9859:12;9852:42;9920:2;9915:3;9911:12;9904:19;;9693:236;;;:::o;9935:324::-;;10098:67;10162:2;10157:3;10098:67;:::i;:::-;10091:74;;10195:28;10191:1;10186:3;10182:11;10175:49;10250:2;10245:3;10241:12;10234:19;;10081:178;;;:::o;10265:326::-;;10428:67;10492:2;10487:3;10428:67;:::i;:::-;10421:74;;10525:30;10521:1;10516:3;10512:11;10505:51;10582:2;10577:3;10573:12;10566:19;;10411:180;;;:::o;10597:324::-;;10760:67;10824:2;10819:3;10760:67;:::i;:::-;10753:74;;10857:28;10853:1;10848:3;10844:11;10837:49;10912:2;10907:3;10903:12;10896:19;;10743:178;;;:::o;10927:326::-;;11090:67;11154:2;11149:3;11090:67;:::i;:::-;11083:74;;11187:30;11183:1;11178:3;11174:11;11167:51;11244:2;11239:3;11235:12;11228:19;;11073:180;;;:::o;11259:368::-;;11422:67;11486:2;11481:3;11422:67;:::i;:::-;11415:74;;11519:34;11515:1;11510:3;11506:11;11499:55;11585:6;11580:2;11575:3;11571:12;11564:28;11618:2;11613:3;11609:12;11602:19;;11405:222;;;:::o;11633:323::-;;11796:67;11860:2;11855:3;11796:67;:::i;:::-;11789:74;;11893:27;11889:1;11884:3;11880:11;11873:48;11947:2;11942:3;11938:12;11931:19;;11779:177;;;:::o;11962:321::-;;12125:67;12189:2;12184:3;12125:67;:::i;:::-;12118:74;;12222:25;12218:1;12213:3;12209:11;12202:46;12274:2;12269:3;12265:12;12258:19;;12108:175;;;:::o;12289:376::-;;12452:67;12516:2;12511:3;12452:67;:::i;:::-;12445:74;;12549:34;12545:1;12540:3;12536:11;12529:55;12615:14;12610:2;12605:3;12601:12;12594:36;12656:2;12651:3;12647:12;12640:19;;12435:230;;;:::o;12671:388::-;;12834:67;12898:2;12893:3;12834:67;:::i;:::-;12827:74;;12931:34;12927:1;12922:3;12918:11;12911:55;12997:26;12992:2;12987:3;12983:12;12976:48;13050:2;13045:3;13041:12;13034:19;;12817:242;;;:::o;13065:374::-;;13228:67;13292:2;13287:3;13228:67;:::i;:::-;13221:74;;13325:34;13321:1;13316:3;13312:11;13305:55;13391:12;13386:2;13381:3;13377:12;13370:34;13430:2;13425:3;13421:12;13414:19;;13211:228;;;:::o;13445:373::-;;13608:67;13672:2;13667:3;13608:67;:::i;:::-;13601:74;;13705:34;13701:1;13696:3;13692:11;13685:55;13771:11;13766:2;13761:3;13757:12;13750:33;13809:2;13804:3;13800:12;13793:19;;13591:227;;;:::o;13824:378::-;;13987:67;14051:2;14046:3;13987:67;:::i;:::-;13980:74;;14084:34;14080:1;14075:3;14071:11;14064:55;14150:16;14145:2;14140:3;14136:12;14129:38;14193:2;14188:3;14184:12;14177:19;;13970:232;;;:::o;14208:317::-;;14371:67;14435:2;14430:3;14371:67;:::i;:::-;14364:74;;14468:21;14464:1;14459:3;14455:11;14448:42;14516:2;14511:3;14507:12;14500:19;;14354:171;;;:::o;14531:321::-;;14694:67;14758:2;14753:3;14694:67;:::i;:::-;14687:74;;14791:25;14787:1;14782:3;14778:11;14771:46;14843:2;14838:3;14834:12;14827:19;;14677:175;;;:::o;14858:322::-;;15021:67;15085:2;15080:3;15021:67;:::i;:::-;15014:74;;15118:26;15114:1;15109:3;15105:11;15098:47;15171:2;15166:3;15162:12;15155:19;;15004:176;;;:::o;15186:330::-;;15349:67;15413:2;15408:3;15349:67;:::i;:::-;15342:74;;15446:34;15442:1;15437:3;15433:11;15426:55;15507:2;15502:3;15498:12;15491:19;;15332:184;;;:::o;15522:381::-;;15685:67;15749:2;15744:3;15685:67;:::i;:::-;15678:74;;15782:34;15778:1;15773:3;15769:11;15762:55;15848:19;15843:2;15838:3;15834:12;15827:41;15894:2;15889:3;15885:12;15878:19;;15668:235;;;:::o;15909:376::-;;16072:67;16136:2;16131:3;16072:67;:::i;:::-;16065:74;;16169:34;16165:1;16160:3;16156:11;16149:55;16235:14;16230:2;16225:3;16221:12;16214:36;16276:2;16271:3;16267:12;16260:19;;16055:230;;;:::o;16291:391::-;;16454:67;16518:2;16513:3;16454:67;:::i;:::-;16447:74;;16551:34;16547:1;16542:3;16538:11;16531:55;16617:29;16612:2;16607:3;16603:12;16596:51;16673:2;16668:3;16664:12;16657:19;;16437:245;;;:::o;16688:373::-;;16851:67;16915:2;16910:3;16851:67;:::i;:::-;16844:74;;16948:34;16944:1;16939:3;16935:11;16928:55;17014:11;17009:2;17004:3;17000:12;16993:33;17052:2;17047:3;17043:12;17036:19;;16834:227;;;:::o;17067:379::-;;17230:67;17294:2;17289:3;17230:67;:::i;:::-;17223:74;;17327:34;17323:1;17318:3;17314:11;17307:55;17393:17;17388:2;17383:3;17379:12;17372:39;17437:2;17432:3;17428:12;17421:19;;17213:233;;;:::o;17452:371::-;;17615:67;17679:2;17674:3;17615:67;:::i;:::-;17608:74;;17712:34;17708:1;17703:3;17699:11;17692:55;17778:9;17773:2;17768:3;17764:12;17757:31;17814:2;17809:3;17805:12;17798:19;;17598:225;;;:::o;17829:308::-;;17992:67;18056:2;18051:3;17992:67;:::i;:::-;17985:74;;18089:12;18085:1;18080:3;18076:11;18069:33;18128:2;18123:3;18119:12;18112:19;;17975:162;;;:::o;18143:321::-;;18306:67;18370:2;18365:3;18306:67;:::i;:::-;18299:74;;18403:25;18399:1;18394:3;18390:11;18383:46;18455:2;18450:3;18446:12;18439:19;;18289:175;;;:::o;18470:365::-;;18633:67;18697:2;18692:3;18633:67;:::i;:::-;18626:74;;18730:34;18726:1;18721:3;18717:11;18710:55;18796:3;18791:2;18786:3;18782:12;18775:25;18826:2;18821:3;18817:12;18810:19;;18616:219;;;:::o;18841:330::-;;19004:67;19068:2;19063:3;19004:67;:::i;:::-;18997:74;;19101:34;19097:1;19092:3;19088:11;19081:55;19162:2;19157:3;19153:12;19146:19;;18987:184;;;:::o;19177:381::-;;19340:67;19404:2;19399:3;19340:67;:::i;:::-;19333:74;;19437:34;19433:1;19428:3;19424:11;19417:55;19503:19;19498:2;19493:3;19489:12;19482:41;19549:2;19544:3;19540:12;19533:19;;19323:235;;;:::o;19564:319::-;;19727:67;19791:2;19786:3;19727:67;:::i;:::-;19720:74;;19824:23;19820:1;19815:3;19811:11;19804:44;19874:2;19869:3;19865:12;19858:19;;19710:173;;;:::o;19889:327::-;;20052:67;20116:2;20111:3;20052:67;:::i;:::-;20045:74;;20149:31;20145:1;20140:3;20136:11;20129:52;20207:2;20202:3;20198:12;20191:19;;20035:181;;;:::o;20222:325::-;;20385:67;20449:2;20444:3;20385:67;:::i;:::-;20378:74;;20482:29;20478:1;20473:3;20469:11;20462:50;20538:2;20533:3;20529:12;20522:19;;20368:179;;;:::o;20553:325::-;;20716:67;20780:2;20775:3;20716:67;:::i;:::-;20709:74;;20813:29;20809:1;20804:3;20800:11;20793:50;20869:2;20864:3;20860:12;20853:19;;20699:179;;;:::o;20884:365::-;;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21144:34;21140:1;21135:3;21131:11;21124:55;21210:3;21205:2;21200:3;21196:12;21189:25;21240:2;21235:3;21231:12;21224:19;;21030:219;;;:::o;21255:309::-;;21418:67;21482:2;21477:3;21418:67;:::i;:::-;21411:74;;21515:13;21511:1;21506:3;21502:11;21495:34;21555:2;21550:3;21546:12;21539:19;;21401:163;;;:::o;21570:118::-;21657:24;21675:5;21657:24;:::i;:::-;21652:3;21645:37;21635:53;;:::o;21694:157::-;21799:45;21819:24;21837:5;21819:24;:::i;:::-;21799:45;:::i;:::-;21794:3;21787:58;21777:74;;:::o;21857:256::-;;21984:75;22055:3;22046:6;21984:75;:::i;:::-;22084:2;22079:3;22075:12;22068:19;;22104:3;22097:10;;21973:140;;;;:::o;22119:288::-;;22262:91;22349:3;22340:6;22262:91;:::i;:::-;22378:2;22373:3;22369:12;22362:19;;22398:3;22391:10;;22251:156;;;;:::o;22413:435::-;;22615:95;22706:3;22697:6;22615:95;:::i;:::-;22608:102;;22727:95;22818:3;22809:6;22727:95;:::i;:::-;22720:102;;22839:3;22832:10;;22597:251;;;;;:::o;22854:269::-;;23005:92;23093:3;23084:6;23005:92;:::i;:::-;22998:99;;23114:3;23107:10;;22987:136;;;;:::o;23129:429::-;;23328:92;23416:3;23407:6;23328:92;:::i;:::-;23321:99;;23437:95;23528:3;23519:6;23437:95;:::i;:::-;23430:102;;23549:3;23542:10;;23310:248;;;;;:::o;23564:256::-;;23691:75;23762:3;23753:6;23691:75;:::i;:::-;23791:2;23786:3;23782:12;23775:19;;23811:3;23804:10;;23680:140;;;;:::o;23826:222::-;;23957:2;23946:9;23942:18;23934:26;;23970:71;24038:1;24027:9;24023:17;24014:6;23970:71;:::i;:::-;23924:124;;;;:::o;24054:640::-;;24287:3;24276:9;24272:19;24264:27;;24301:71;24369:1;24358:9;24354:17;24345:6;24301:71;:::i;:::-;24382:72;24450:2;24439:9;24435:18;24426:6;24382:72;:::i;:::-;24464;24532:2;24521:9;24517:18;24508:6;24464:72;:::i;:::-;24583:9;24577:4;24573:20;24568:2;24557:9;24553:18;24546:48;24611:76;24682:4;24673:6;24611:76;:::i;:::-;24603:84;;24254:440;;;;;;;:::o;24700:210::-;;24825:2;24814:9;24810:18;24802:26;;24838:65;24900:1;24889:9;24885:17;24876:6;24838:65;:::i;:::-;24792:118;;;;:::o;24916:313::-;;25067:2;25056:9;25052:18;25044:26;;25116:9;25110:4;25106:20;25102:1;25091:9;25087:17;25080:47;25144:78;25217:4;25208:6;25144:78;:::i;:::-;25136:86;;25034:195;;;;:::o;25235:419::-;;25439:2;25428:9;25424:18;25416:26;;25488:9;25482:4;25478:20;25474:1;25463:9;25459:17;25452:47;25516:131;25642:4;25516:131;:::i;:::-;25508:139;;25406:248;;;:::o;25660:419::-;;25864:2;25853:9;25849:18;25841:26;;25913:9;25907:4;25903:20;25899:1;25888:9;25884:17;25877:47;25941:131;26067:4;25941:131;:::i;:::-;25933:139;;25831:248;;;:::o;26085:419::-;;26289:2;26278:9;26274:18;26266:26;;26338:9;26332:4;26328:20;26324:1;26313:9;26309:17;26302:47;26366:131;26492:4;26366:131;:::i;:::-;26358:139;;26256:248;;;:::o;26510:419::-;;26714:2;26703:9;26699:18;26691:26;;26763:9;26757:4;26753:20;26749:1;26738:9;26734:17;26727:47;26791:131;26917:4;26791:131;:::i;:::-;26783:139;;26681:248;;;:::o;26935:419::-;;27139:2;27128:9;27124:18;27116:26;;27188:9;27182:4;27178:20;27174:1;27163:9;27159:17;27152:47;27216:131;27342:4;27216:131;:::i;:::-;27208:139;;27106:248;;;:::o;27360:419::-;;27564:2;27553:9;27549:18;27541:26;;27613:9;27607:4;27603:20;27599:1;27588:9;27584:17;27577:47;27641:131;27767:4;27641:131;:::i;:::-;27633:139;;27531:248;;;:::o;27785:419::-;;27989:2;27978:9;27974:18;27966:26;;28038:9;28032:4;28028:20;28024:1;28013:9;28009:17;28002:47;28066:131;28192:4;28066:131;:::i;:::-;28058:139;;27956:248;;;:::o;28210:419::-;;28414:2;28403:9;28399:18;28391:26;;28463:9;28457:4;28453:20;28449:1;28438:9;28434:17;28427:47;28491:131;28617:4;28491:131;:::i;:::-;28483:139;;28381:248;;;:::o;28635:419::-;;28839:2;28828:9;28824:18;28816:26;;28888:9;28882:4;28878:20;28874:1;28863:9;28859:17;28852:47;28916:131;29042:4;28916:131;:::i;:::-;28908:139;;28806:248;;;:::o;29060:419::-;;29264:2;29253:9;29249:18;29241:26;;29313:9;29307:4;29303:20;29299:1;29288:9;29284:17;29277:47;29341:131;29467:4;29341:131;:::i;:::-;29333:139;;29231:248;;;:::o;29485:419::-;;29689:2;29678:9;29674:18;29666:26;;29738:9;29732:4;29728:20;29724:1;29713:9;29709:17;29702:47;29766:131;29892:4;29766:131;:::i;:::-;29758:139;;29656:248;;;:::o;29910:419::-;;30114:2;30103:9;30099:18;30091:26;;30163:9;30157:4;30153:20;30149:1;30138:9;30134:17;30127:47;30191:131;30317:4;30191:131;:::i;:::-;30183:139;;30081:248;;;:::o;30335:419::-;;30539:2;30528:9;30524:18;30516:26;;30588:9;30582:4;30578:20;30574:1;30563:9;30559:17;30552:47;30616:131;30742:4;30616:131;:::i;:::-;30608:139;;30506:248;;;:::o;30760:419::-;;30964:2;30953:9;30949:18;30941:26;;31013:9;31007:4;31003:20;30999:1;30988:9;30984:17;30977:47;31041:131;31167:4;31041:131;:::i;:::-;31033:139;;30931:248;;;:::o;31185:419::-;;31389:2;31378:9;31374:18;31366:26;;31438:9;31432:4;31428:20;31424:1;31413:9;31409:17;31402:47;31466:131;31592:4;31466:131;:::i;:::-;31458:139;;31356:248;;;:::o;31610:419::-;;31814:2;31803:9;31799:18;31791:26;;31863:9;31857:4;31853:20;31849:1;31838:9;31834:17;31827:47;31891:131;32017:4;31891:131;:::i;:::-;31883:139;;31781:248;;;:::o;32035:419::-;;32239:2;32228:9;32224:18;32216:26;;32288:9;32282:4;32278:20;32274:1;32263:9;32259:17;32252:47;32316:131;32442:4;32316:131;:::i;:::-;32308:139;;32206:248;;;:::o;32460:419::-;;32664:2;32653:9;32649:18;32641:26;;32713:9;32707:4;32703:20;32699:1;32688:9;32684:17;32677:47;32741:131;32867:4;32741:131;:::i;:::-;32733:139;;32631:248;;;:::o;32885:419::-;;33089:2;33078:9;33074:18;33066:26;;33138:9;33132:4;33128:20;33124:1;33113:9;33109:17;33102:47;33166:131;33292:4;33166:131;:::i;:::-;33158:139;;33056:248;;;:::o;33310:419::-;;33514:2;33503:9;33499:18;33491:26;;33563:9;33557:4;33553:20;33549:1;33538:9;33534:17;33527:47;33591:131;33717:4;33591:131;:::i;:::-;33583:139;;33481:248;;;:::o;33735:419::-;;33939:2;33928:9;33924:18;33916:26;;33988:9;33982:4;33978:20;33974:1;33963:9;33959:17;33952:47;34016:131;34142:4;34016:131;:::i;:::-;34008:139;;33906:248;;;:::o;34160:419::-;;34364:2;34353:9;34349:18;34341:26;;34413:9;34407:4;34403:20;34399:1;34388:9;34384:17;34377:47;34441:131;34567:4;34441:131;:::i;:::-;34433:139;;34331:248;;;:::o;34585:419::-;;34789:2;34778:9;34774:18;34766:26;;34838:9;34832:4;34828:20;34824:1;34813:9;34809:17;34802:47;34866:131;34992:4;34866:131;:::i;:::-;34858:139;;34756:248;;;:::o;35010:419::-;;35214:2;35203:9;35199:18;35191:26;;35263:9;35257:4;35253:20;35249:1;35238:9;35234:17;35227:47;35291:131;35417:4;35291:131;:::i;:::-;35283:139;;35181:248;;;:::o;35435:419::-;;35639:2;35628:9;35624:18;35616:26;;35688:9;35682:4;35678:20;35674:1;35663:9;35659:17;35652:47;35716:131;35842:4;35716:131;:::i;:::-;35708:139;;35606:248;;;:::o;35860:419::-;;36064:2;36053:9;36049:18;36041:26;;36113:9;36107:4;36103:20;36099:1;36088:9;36084:17;36077:47;36141:131;36267:4;36141:131;:::i;:::-;36133:139;;36031:248;;;:::o;36285:419::-;;36489:2;36478:9;36474:18;36466:26;;36538:9;36532:4;36528:20;36524:1;36513:9;36509:17;36502:47;36566:131;36692:4;36566:131;:::i;:::-;36558:139;;36456:248;;;:::o;36710:419::-;;36914:2;36903:9;36899:18;36891:26;;36963:9;36957:4;36953:20;36949:1;36938:9;36934:17;36927:47;36991:131;37117:4;36991:131;:::i;:::-;36983:139;;36881:248;;;:::o;37135:419::-;;37339:2;37328:9;37324:18;37316:26;;37388:9;37382:4;37378:20;37374:1;37363:9;37359:17;37352:47;37416:131;37542:4;37416:131;:::i;:::-;37408:139;;37306:248;;;:::o;37560:419::-;;37764:2;37753:9;37749:18;37741:26;;37813:9;37807:4;37803:20;37799:1;37788:9;37784:17;37777:47;37841:131;37967:4;37841:131;:::i;:::-;37833:139;;37731:248;;;:::o;37985:419::-;;38189:2;38178:9;38174:18;38166:26;;38238:9;38232:4;38228:20;38224:1;38213:9;38209:17;38202:47;38266:131;38392:4;38266:131;:::i;:::-;38258:139;;38156:248;;;:::o;38410:419::-;;38614:2;38603:9;38599:18;38591:26;;38663:9;38657:4;38653:20;38649:1;38638:9;38634:17;38627:47;38691:131;38817:4;38691:131;:::i;:::-;38683:139;;38581:248;;;:::o;38835:419::-;;39039:2;39028:9;39024:18;39016:26;;39088:9;39082:4;39078:20;39074:1;39063:9;39059:17;39052:47;39116:131;39242:4;39116:131;:::i;:::-;39108:139;;39006:248;;;:::o;39260:419::-;;39464:2;39453:9;39449:18;39441:26;;39513:9;39507:4;39503:20;39499:1;39488:9;39484:17;39477:47;39541:131;39667:4;39541:131;:::i;:::-;39533:139;;39431:248;;;:::o;39685:419::-;;39889:2;39878:9;39874:18;39866:26;;39938:9;39932:4;39928:20;39924:1;39913:9;39909:17;39902:47;39966:131;40092:4;39966:131;:::i;:::-;39958:139;;39856:248;;;:::o;40110:222::-;;40241:2;40230:9;40226:18;40218:26;;40254:71;40322:1;40311:9;40307:17;40298:6;40254:71;:::i;:::-;40208:124;;;;:::o;40338:283::-;;40404:2;40398:9;40388:19;;40446:4;40438:6;40434:17;40553:6;40541:10;40538:22;40517:18;40505:10;40502:34;40499:62;40496:2;;;40564:18;;:::i;:::-;40496:2;40604:10;40600:2;40593:22;40378:243;;;;:::o;40627:331::-;;40778:18;40770:6;40767:30;40764:2;;;40800:18;;:::i;:::-;40764:2;40885:4;40881:9;40874:4;40866:6;40862:17;40858:33;40850:41;;40946:4;40940;40936:15;40928:23;;40693:265;;;:::o;40964:332::-;;41116:18;41108:6;41105:30;41102:2;;;41138:18;;:::i;:::-;41102:2;41223:4;41219:9;41212:4;41204:6;41200:17;41196:33;41188:41;;41284:4;41278;41274:15;41266:23;;41031:265;;;:::o;41302:141::-;;41374:3;41366:11;;41397:3;41394:1;41387:14;41431:4;41428:1;41418:18;41410:26;;41356:87;;;:::o;41449:98::-;;41534:5;41528:12;41518:22;;41507:40;;;:::o;41553:99::-;;41639:5;41633:12;41623:22;;41612:40;;;:::o;41658:168::-;;41775:6;41770:3;41763:19;41815:4;41810:3;41806:14;41791:29;;41753:73;;;;:::o;41832:169::-;;41950:6;41945:3;41938:19;41990:4;41985:3;41981:14;41966:29;;41928:73;;;;:::o;42007:148::-;;42146:3;42131:18;;42121:34;;;;:::o;42161:305::-;;42220:20;42238:1;42220:20;:::i;:::-;42215:25;;42254:20;42272:1;42254:20;:::i;:::-;42249:25;;42408:1;42340:66;42336:74;42333:1;42330:81;42327:2;;;42414:18;;:::i;:::-;42327:2;42458:1;42455;42451:9;42444:16;;42205:261;;;;:::o;42472:237::-;;42529:18;42545:1;42529:18;:::i;:::-;42524:23;;42561:18;42577:1;42561:18;:::i;:::-;42556:23;;42651:1;42645:4;42641:12;42638:1;42635:19;42632:2;;;42657:18;;:::i;:::-;42632:2;42701:1;42698;42694:9;42687:16;;42514:195;;;;:::o;42715:185::-;;42772:20;42790:1;42772:20;:::i;:::-;42767:25;;42806:20;42824:1;42806:20;:::i;:::-;42801:25;;42845:1;42835:2;;42850:18;;:::i;:::-;42835:2;42892:1;42889;42885:9;42880:14;;42757:143;;;;:::o;42906:348::-;;42969:20;42987:1;42969:20;:::i;:::-;42964:25;;43003:20;43021:1;43003:20;:::i;:::-;42998:25;;43191:1;43123:66;43119:74;43116:1;43113:81;43108:1;43101:9;43094:17;43090:105;43087:2;;;43198:18;;:::i;:::-;43087:2;43246:1;43243;43239:9;43228:20;;42954:300;;;;:::o;43260:191::-;;43320:20;43338:1;43320:20;:::i;:::-;43315:25;;43354:20;43372:1;43354:20;:::i;:::-;43349:25;;43393:1;43390;43387:8;43384:2;;;43398:18;;:::i;:::-;43384:2;43443:1;43440;43436:9;43428:17;;43305:146;;;;:::o;43457:96::-;;43523:24;43541:5;43523:24;:::i;:::-;43512:35;;43502:51;;;:::o;43559:104::-;;43633:24;43651:5;43633:24;:::i;:::-;43622:35;;43612:51;;;:::o;43669:90::-;;43746:5;43739:13;43732:21;43721:32;;43711:48;;;:::o;43765:149::-;;43841:66;43834:5;43830:78;43819:89;;43809:105;;;:::o;43920:126::-;;43997:42;43990:5;43986:54;43975:65;;43965:81;;;:::o;44052:77::-;;44118:5;44107:16;;44097:32;;;:::o;44135:86::-;;44210:4;44203:5;44199:16;44188:27;;44178:43;;;:::o;44227:154::-;44311:6;44306:3;44301;44288:30;44373:1;44364:6;44359:3;44355:16;44348:27;44278:103;;;:::o;44387:307::-;44455:1;44465:113;44479:6;44476:1;44473:13;44465:113;;;44564:1;44559:3;44555:11;44549:18;44545:1;44540:3;44536:11;44529:39;44501:2;44498:1;44494:10;44489:15;;44465:113;;;44596:6;44593:1;44590:13;44587:2;;;44676:1;44667:6;44662:3;44658:16;44651:27;44587:2;44436:258;;;;:::o;44700:171::-;;44762:24;44780:5;44762:24;:::i;:::-;44753:33;;44808:4;44801:5;44798:15;44795:2;;;44816:18;;:::i;:::-;44795:2;44863:1;44856:5;44852:13;44845:20;;44743:128;;;:::o;44877:320::-;;44958:1;44952:4;44948:12;44938:22;;45005:1;44999:4;44995:12;45026:18;45016:2;;45082:4;45074:6;45070:17;45060:27;;45016:2;45144;45136:6;45133:14;45113:18;45110:38;45107:2;;;45163:18;;:::i;:::-;45107:2;44928:269;;;;:::o;45203:233::-;;45265:24;45283:5;45265:24;:::i;:::-;45256:33;;45311:66;45304:5;45301:77;45298:2;;;45381:18;;:::i;:::-;45298:2;45428:1;45421:5;45417:13;45410:20;;45246:190;;;:::o;45442:100::-;;45510:26;45530:5;45510:26;:::i;:::-;45499:37;;45489:53;;;:::o;45548:108::-;;45624:26;45644:5;45624:26;:::i;:::-;45613:37;;45603:53;;;:::o;45662:94::-;;45730:20;45744:5;45730:20;:::i;:::-;45719:31;;45709:47;;;:::o;45762:79::-;;45830:5;45819:16;;45809:32;;;:::o;45847:176::-;;45896:20;45914:1;45896:20;:::i;:::-;45891:25;;45930:20;45948:1;45930:20;:::i;:::-;45925:25;;45969:1;45959:2;;45974:18;;:::i;:::-;45959:2;46015:1;46012;46008:9;46003:14;;45881:142;;;;:::o;46029:180::-;46077:77;46074:1;46067:88;46174:4;46171:1;46164:15;46198:4;46195:1;46188:15;46215:180;46263:77;46260:1;46253:88;46360:4;46357:1;46350:15;46384:4;46381:1;46374:15;46401:180;46449:77;46446:1;46439:88;46546:4;46543:1;46536:15;46570:4;46567:1;46560:15;46587:180;46635:77;46632:1;46625:88;46732:4;46729:1;46722:15;46756:4;46753:1;46746:15;46773:102;;46865:2;46861:7;46856:2;46849:5;46845:14;46841:28;46831:38;;46821:54;;;:::o;46881:94::-;;46962:5;46958:2;46954:14;46933:35;;46923:52;;;:::o;46981:122::-;47054:24;47072:5;47054:24;:::i;:::-;47047:5;47044:35;47034:2;;47093:1;47090;47083:12;47034:2;47024:79;:::o;47109:116::-;47179:21;47194:5;47179:21;:::i;:::-;47172:5;47169:32;47159:2;;47215:1;47212;47205:12;47159:2;47149:76;:::o;47231:120::-;47303:23;47320:5;47303:23;:::i;:::-;47296:5;47293:34;47283:2;;47341:1;47338;47331:12;47283:2;47273:78;:::o;47357:122::-;47430:24;47448:5;47430:24;:::i;:::-;47423:5;47420:35;47410:2;;47469:1;47466;47459:12;47410:2;47400:79;:::o

Swarm Source

ipfs://966c3261d32f171385b25bd26a3ee4118f0bb899c39ba796aabc2824c642ed0d

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

The Unstable Horses Yard (TUHY) is the home of 10,000 original horses, living on Ethereum blockchain. Every Unstable Horse owner gets a free 3D horse representing their horse for our on-chain, 3D open-world game launching very soon.

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.