ETH Price: $3,299.07 (-3.70%)
Gas: 9 Gwei

Token

Calaveras (CALAVERA)
 

Overview

Max Total Supply

1,307 CALAVERA

Holders

276

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
11 CALAVERA
0x3a2ea5595098565e7362e04da30c5ec29435731f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoCalaveras

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 4 of 15: CryptoCalaveras.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

abstract contract MEMBERSHIP1 {
  function ownerOf(uint256 tokenId) public virtual view returns (address);
  function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256);
  function balanceOf(address owner) external virtual view returns (uint256 balance);
}


abstract contract MEMBERSHIP2 {
  function ownerOf(uint256 tokenId) public virtual view returns (address);
  function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256);
  function balanceOf(address owner) external virtual view returns (uint256 balance);
}

import './ERC721Enumerable.sol';
import './Ownable.sol';
import './Strings.sol';
import './CoreFunctions.sol';
import './Metadata.sol';

contract CryptoCalaveras is ERC721Enumerable, Ownable, Functions, Metadata {
  using Strings for uint256;
  
  MEMBERSHIP1 private membership1;
  MEMBERSHIP2 private membership2;

  //globallimits
  uint256 public constant NFT_MAX = 3333;
  uint public constant GENESIS = 293;
  uint256 public constant PUBLIC_INDEX = 850;

  //limitsperwallet
  uint256 public constant PURCHASE_LIMIT = 100;

  //pricepertype
  uint256 public pricemain = 0.06 ether;
  uint256 public pricemembership = 0.04 ether;

  //switches
  bool public isMasterActive = false;
  bool public isPublicActive = false;
  bool public isMembershipActive = false;
  bool public isPassActive = false;

  //supplycounters
  uint256 public totalMembershipSupply;
  uint256 public totalPublicSupply;
  uint256 public totalReserveSupply;

  //metadata
  string private _contractURI = '';
  string private _tokenBaseURI = '';
  string private _tokenRevealedBaseURI = '';
  
  //constructor
  constructor(
      string memory name, 
      string memory symbol, 
      address membershipcontract1,
            address membershipcontract2)
      
        ERC721(name, symbol) {
 
             membership1 = MEMBERSHIP1(membershipcontract1);
             membership2 = MEMBERSHIP2(membershipcontract2);

        }
 
   //membership1
  function membershipClaimGenesis(uint256 membershipTokenID) public {

    //check contract balance
    uint checkbalance1 = membership1.balanceOf(msg.sender);

    //check switches
    require(isMasterActive, 'Contract is not active');
    require(isPassActive, 'This portion of minting is not active');

    //supply check
    require(checkbalance1 >  0);
    require(totalSupply() < NFT_MAX, 'All tokens have been minted');
    require(membershipTokenID > 0, 'token index must be over 0');

    //check
    require(membership1.ownerOf(membershipTokenID) == msg.sender, "Must own the membership pass for requested tokenId to mint");

    //mint!
        totalMembershipSupply += 1;
      _safeMint(msg.sender, membershipTokenID);
 
  }

     //membership
  function membershipClaim(uint256 membershipTokenID) public {

    //check contract balance
    uint checkbalance2 = membership2.balanceOf(msg.sender);

    //check switches
    require(isMasterActive, 'Contract is not active');
    require(isPassActive, 'This portion of minting is not active');

    //supply check
    require(checkbalance2 >  0);
    require(totalSupply() < NFT_MAX, 'All tokens have been minted');
    require(membershipTokenID > 0, 'token index must be over 0');

    //check
    require(membership2.ownerOf(membershipTokenID) == msg.sender, "Must own the membership pass for requested tokenId to mint");

    //mint!
    uint256 membershipid = membershipTokenID + 293;
        totalMembershipSupply += 1;
      _safeMint(msg.sender, membershipid);
 
  }

//public
  function mintPublic(uint256 numberOfTokens) external payable {

      //check switches
    require(isMasterActive, 'Contract is not active');
    require(isPublicActive, 'This portion of minting is not active');
    
    //supply check
    require(totalSupply() < NFT_MAX, 'All tokens have been minted');
    require(numberOfTokens > 0, 'You must mint more than 1 token');
    require(numberOfTokens <= PURCHASE_LIMIT, 'Cannot purchase this many tokens');
    require(totalSupply() + numberOfTokens <= NFT_MAX, 'Purchase would exceed max supply');
   
    //calculate prices
    require(pricemain * numberOfTokens <= msg.value, 'ETH amount is not sufficient');

    //mint!
    
    for (uint256 i = 0; i < numberOfTokens; i++) {

      uint256 tokenId = PUBLIC_INDEX + totalPublicSupply + 1;
        totalPublicSupply += 1;

      _safeMint(msg.sender, tokenId);
    }
    
    }

//publicmembership
  function mintMembership(uint256 numberOfTokens) external payable {

  //check balances
    uint checkbalance1 = membership1.balanceOf(msg.sender);
    uint checkbalance2 = membership2.balanceOf(msg.sender);
    uint totalbalance = checkbalance1 + checkbalance2;
    require(totalbalance > 0);

      //check switches
    require(isMasterActive, 'Contract is not active');
    require(isPublicActive, 'This portion of minting is not active');
    
    //supply check
    require(totalSupply() < NFT_MAX, 'All tokens have been minted');
    require(numberOfTokens > 0, 'You must mint more than 1 token');
    require(numberOfTokens <= PURCHASE_LIMIT, 'Cannot purchase this many tokens');
    require(totalSupply() + numberOfTokens <= NFT_MAX, 'Purchase would exceed max supply');
   
    //calculate prices
    require(pricemembership * numberOfTokens <= msg.value, 'ETH amount is not sufficient');

    //mint!
    
    for (uint256 i = 0; i < numberOfTokens; i++) {

      uint256 tokenId = PUBLIC_INDEX + totalPublicSupply + 1;
        totalPublicSupply += 1;

      _safeMint(msg.sender, tokenId);
    }
    }
    
    //reserve
   // no limit due to to airdrop going directly to addresses
  function reserve(address[] calldata to) external  onlyOwner {
    require(totalSupply() < NFT_MAX, 'All tokens have been minted');

    for(uint256 i = 0; i < to.length; i++) {
      uint256 tokenId = PUBLIC_INDEX + totalPublicSupply + 1;
        totalReserveSupply += 1;

      _safeMint(to[i], tokenId);
    }
  }


  //switches
  function MasterActive(bool _isMasterActive) external override onlyOwner {
    isMasterActive = _isMasterActive;
  }
  
    function PublicActive(bool _isPublicActive) external override onlyOwner {
    isPublicActive = _isPublicActive;
  }
  
    function MembershipActive(bool _isMembershipActive) external onlyOwner {
    isMembershipActive = _isMembershipActive;
  }

     function PassActive(bool _isPassActive) external onlyOwner {
    isPassActive = _isPassActive;
  } 

  //withdraw    
 address Address1 = 0xB304bf6bAaE65Ac9A3B1CdBB4E48e5589a3ff9A2; //team1
    address Address2 = 0xCAa63F2f8571Eae0163C0C26ECcF2872589eA170; //team2
    address Address3 = 0xF4A12bC4596E1c3e19D512F76325B52D72D375CF; //team3
    address Address4 = 0xdA00A06Ab3BbD3544B79C1350C463CAb9f196880; //team4
    address Address5 = 0x65a112b4604eb4B946D14E8EFbcc39f6968F49bE; //team5
    address Address6 = 0x96C2A8e9437dE19215121b7137650eC6A032DF5B; //team6
    address Address7 = 0x01c3f58FaaEbf4B9a3eaD760Fb8A7bb0C3168467; //team7
    address Address8 = 0x75e06a34c1Ef068fC43ad56A1a5193f3778bF0B2; //team8
    address Address9 = 0xf38c60143b655A5d7b68B49C189Da7CB2b0604A1; //team9
    address Address10 = 0xa3f070BAEf828f712f38c360221B5250284891D7; //team10
    address Address11 = 0xEcc03efB7C0A7BD09A5cC7e954Ac42E8f949A0B5; //niftylabs
    address Address12 = 0xdFD02b83062edb018FfF3dA3C3151bFb2681E3aE; //treasury

    function withdraw() onlyOwner public {
        uint balance = address(this).balance;
        payable(Address1).transfer(balance*791/10000);
        payable(Address2).transfer(balance*791/10000);       
        payable(Address3).transfer(balance*791/10000);      
        payable(Address4).transfer(balance*791/10000);      
        payable(Address5).transfer(balance*791/10000);
        payable(Address6).transfer(balance*791/10000);
        payable(Address7).transfer(balance*791/10000);
        payable(Address8).transfer(balance*791/10000);
        payable(Address9).transfer(balance*791/10000);       
        payable(Address10).transfer(balance*791/10000);      
        payable(Address11).transfer(balance*1590/10000);      
        payable(Address12).transfer(balance*500/10000);
        payable(msg.sender).transfer(address(this).balance);
    }
    
  //metadata
  function setContractURI(string calldata URI) external override onlyOwner {
    _contractURI = URI;
  }

  function setBaseURI(string calldata URI) external override onlyOwner {
    _tokenBaseURI = URI;
  }

  function setRevealedBaseURI(string calldata revealedBaseURI) external override onlyOwner {
    _tokenRevealedBaseURI = revealedBaseURI;
  }

  function contractURI() public view override returns (string memory) {
    return _contractURI;
  }

  function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) {
    require(_exists(tokenId), 'Token does not exist');

    /// @dev Convert string to bytes so we can check if it's empty or not.
    string memory revealedBaseURI = _tokenRevealedBaseURI;
    return bytes(revealedBaseURI).length > 0 ?
      string(abi.encodePacked(revealedBaseURI, tokenId.toString())) :
      _tokenBaseURI;
  }
}

File 1 of 15: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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 {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 2 of 15: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 3 of 15: CoreFunctions.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface Functions {
 
  function membershipClaimGenesis(uint256 membershipTokenID) external;

  function membershipClaim(uint256 membershipTokenID) external;

  function mintPublic(uint256 numberOfTokens) external payable;

  function mintMembership(uint256 numberOfTokens) external payable;

  function MasterActive(bool isMasterActive) external;

  function MembershipActive(bool isMembershipActive) external;

  function PassActive(bool isPassActive) external;

  function PublicActive(bool isPublicActive) external;

  function withdraw() external;
  
  function reserve(address[] calldata to) external;

}

File 5 of 15: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 6 of 15: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
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;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    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;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    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())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    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);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    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);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    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);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    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);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    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");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    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));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    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"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    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);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    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);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    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);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 7 of 15: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

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

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

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

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 8 of 15: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 9 of 15: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 10 of 15: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 11 of 15: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 12 of 15: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 13 of 15: Metadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface Metadata {
  function setContractURI(string calldata URI) external;

  function setBaseURI(string calldata URI) external;

  function setRevealedBaseURI(string calldata revealedBaseURI) external;

  function contractURI() external view returns(string memory);
}

File 14 of 15: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

File 15 of 15: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"membershipcontract1","type":"address"},{"internalType":"address","name":"membershipcontract2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GENESIS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isMasterActive","type":"bool"}],"name":"MasterActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isMembershipActive","type":"bool"}],"name":"MembershipActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"NFT_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PURCHASE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPassActive","type":"bool"}],"name":"PassActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPublicActive","type":"bool"}],"name":"PublicActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMasterActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMembershipActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPassActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"membershipTokenID","type":"uint256"}],"name":"membershipClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"membershipTokenID","type":"uint256"}],"name":"membershipClaimGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintMembership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricemain","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricemembership","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"revealedBaseURI","type":"string"}],"name":"setRevealedBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMembershipSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPublicSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserveSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266d529ae9e860000600d55668e1bc9bf040000600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff0219169083151502179055506000600f60036101000a81548160ff0219169083151502179055506040518060200160405280600081525060139080519060200190620000ad929190620006dd565b506040518060200160405280600081525060149080519060200190620000d5929190620006dd565b506040518060200160405280600081525060159080519060200190620000fd929190620006dd565b5073b304bf6baae65ac9a3b1cdbb4e48e5589a3ff9a2601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073caa63f2f8571eae0163c0c26eccf2872589ea170601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f4a12bc4596e1c3e19d512f76325b52d72d375cf601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073da00a06ab3bbd3544b79c1350c463cab9f196880601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507365a112b4604eb4b946d14e8efbcc39f6968f49be601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507396c2a8e9437de19215121b7137650ec6a032df5b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507301c3f58faaebf4b9a3ead760fb8a7bb0c3168467601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507375e06a34c1ef068fc43ad56a1a5193f3778bf0b2601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f38c60143b655a5d7b68b49c189da7cb2b0604a1601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a3f070baef828f712f38c360221b5250284891d7601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ecc03efb7c0a7bd09a5cc7e954ac42e8f949a0b5602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dfd02b83062edb018fff3da3c3151bfb2681e3ae602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200050757600080fd5b50604051620065ea380380620065ea83398181016040528101906200052d91906200098f565b8383816000908051906020019062000547929190620006dd565b50806001908051906020019062000560929190620006dd565b50505062000583620005776200060f60201b60201c565b6200061760201b60201c565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000aa4565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620006eb9062000a6e565b90600052602060002090601f0160209004810192826200070f57600085556200075b565b82601f106200072a57805160ff19168380011785556200075b565b828001600101855582156200075b579182015b828111156200075a5782518255916020019190600101906200073d565b5b5090506200076a91906200076e565b5090565b5b80821115620007895760008160009055506001016200076f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620007f682620007ab565b810181811067ffffffffffffffff82111715620008185762000817620007bc565b5b80604052505050565b60006200082d6200078d565b90506200083b8282620007eb565b919050565b600067ffffffffffffffff8211156200085e576200085d620007bc565b5b6200086982620007ab565b9050602081019050919050565b60005b838110156200089657808201518184015260208101905062000879565b83811115620008a6576000848401525b50505050565b6000620008c3620008bd8462000840565b62000821565b905082815260208101848484011115620008e257620008e1620007a6565b5b620008ef84828562000876565b509392505050565b600082601f8301126200090f576200090e620007a1565b5b815162000921848260208601620008ac565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000957826200092a565b9050919050565b62000969816200094a565b81146200097557600080fd5b50565b60008151905062000989816200095e565b92915050565b60008060008060808587031215620009ac57620009ab62000797565b5b600085015167ffffffffffffffff811115620009cd57620009cc6200079c565b5b620009db87828801620008f7565b945050602085015167ffffffffffffffff811115620009ff57620009fe6200079c565b5b62000a0d87828801620008f7565b935050604062000a208782880162000978565b925050606062000a338782880162000978565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a8757607f821691505b6020821081141562000a9e5762000a9d62000a3f565b5b50919050565b615b368062000ab46000396000f3fe60806040526004361061027d5760003560e01c80638da5cb5b1161014f578063b7dec1b7116100c1578063d75e61101161007a578063d75e611014610963578063e6a5931e1461098e578063e8a3d485146109b9578063e985e9c5146109e4578063efd0cbf914610a21578063f2fde38b14610a3d5761027d565b8063b7dec1b714610855578063b88d4fde14610880578063c30e7684146108a9578063c5360a33146108d4578063c87b56dd146108fd578063d682ed861461093a5761027d565b8063a217437311610113578063a217437314610759578063a22cb46514610784578063a3330d25146107ad578063a73d8ca7146107d8578063aa8cddb014610801578063b0d2eb091461082c5761027d565b80638da5cb5b146106845780639123468a146106af57806391f4f96c146106da578063938e3d7b1461070557806395d89b411461072e5761027d565b8063392486b8116101f35780636352211e116101ac5780636352211e146105765780636dc74859146105b35780636e83843a146105dc57806370a0823114610605578063715018a614610642578063762c0f6a146106595761027d565b8063392486b81461047e5780633ccfd60b146104a757806342842e0e146104be57806348e6770c146104e75780634f6ccce71461051057806355f804b31461054d5761027d565b8063095ea7b311610245578063095ea7b31461037d5780630d78d0c1146103a657806318160ddd146103c257806323b872dd146103ed5780632f745c591461041657806332cdbcdf146104535761027d565b806301ffc9a71461028257806304267069146102bf57806306fdde03146102ea578063081812fc14610315578063092ab00d14610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a4919061421b565b610a66565b6040516102b69190614263565b60405180910390f35b3480156102cb57600080fd5b506102d4610ae0565b6040516102e19190614263565b60405180910390f35b3480156102f657600080fd5b506102ff610af3565b60405161030c9190614317565b60405180910390f35b34801561032157600080fd5b5061033c6004803603810190610337919061436f565b610b85565b60405161034991906143dd565b60405180910390f35b34801561035e57600080fd5b50610367610c0a565b6040516103749190614407565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f919061444e565b610c10565b005b6103c060048036038101906103bb919061436f565b610d28565b005b3480156103ce57600080fd5b506103d7611124565b6040516103e49190614407565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061448e565b611131565b005b34801561042257600080fd5b5061043d6004803603810190610438919061444e565b611191565b60405161044a9190614407565b60405180910390f35b34801561045f57600080fd5b50610468611236565b6040516104759190614263565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a0919061450d565b611249565b005b3480156104b357600080fd5b506104bc6112e2565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061448e565b6119d1565b005b3480156104f357600080fd5b5061050e6004803603810190610509919061450d565b6119f1565b005b34801561051c57600080fd5b506105376004803603810190610532919061436f565b611a8a565b6040516105449190614407565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f919061459f565b611afb565b005b34801561058257600080fd5b5061059d6004803603810190610598919061436f565b611b8d565b6040516105aa91906143dd565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d5919061436f565b611c3f565b005b3480156105e857600080fd5b5061060360048036038101906105fe919061459f565b611f67565b005b34801561061157600080fd5b5061062c600480360381019061062791906145ec565b611ff9565b6040516106399190614407565b60405180910390f35b34801561064e57600080fd5b506106576120b1565b005b34801561066557600080fd5b5061066e612139565b60405161067b9190614407565b60405180910390f35b34801561069057600080fd5b5061069961213f565b6040516106a691906143dd565b60405180910390f35b3480156106bb57600080fd5b506106c4612169565b6040516106d19190614263565b60405180910390f35b3480156106e657600080fd5b506106ef61217c565b6040516106fc9190614407565b60405180910390f35b34801561071157600080fd5b5061072c6004803603810190610727919061459f565b612182565b005b34801561073a57600080fd5b50610743612214565b6040516107509190614317565b60405180910390f35b34801561076557600080fd5b5061076e6122a6565b60405161077b9190614407565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190614619565b6122ac565b005b3480156107b957600080fd5b506107c261242d565b6040516107cf9190614263565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa919061450d565b612440565b005b34801561080d57600080fd5b506108166124d9565b6040516108239190614407565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e919061450d565b6124df565b005b34801561086157600080fd5b5061086a612578565b6040516108779190614407565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a29190614789565b61257e565b005b3480156108b557600080fd5b506108be6125e0565b6040516108cb9190614407565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f6919061436f565b6125e6565b005b34801561090957600080fd5b50610924600480360381019061091f919061436f565b612921565b6040516109319190614317565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190614862565b612ac6565b005b34801561096f57600080fd5b50610978612c1f565b6040516109859190614407565b60405180910390f35b34801561099a57600080fd5b506109a3612c24565b6040516109b09190614407565b60405180910390f35b3480156109c557600080fd5b506109ce612c2a565b6040516109db9190614317565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a0691906148af565b612cbc565b604051610a189190614263565b60405180910390f35b610a3b6004803603810190610a36919061436f565b612d50565b005b348015610a4957600080fd5b50610a646004803603810190610a5f91906145ec565b612fce565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad95750610ad8826130c6565b5b9050919050565b600f60029054906101000a900460ff1681565b606060008054610b029061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e9061491e565b8015610b7b5780601f10610b5057610100808354040283529160200191610b7b565b820191906000526020600020905b815481529060010190602001808311610b5e57829003601f168201915b5050505050905090565b6000610b90826131a8565b610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906149c2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e5481565b6000610c1b82611b8d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390614a54565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cab613214565b73ffffffffffffffffffffffffffffffffffffffff161480610cda5750610cd981610cd4613214565b612cbc565b5b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614ae6565b60405180910390fd5b610d23838361321c565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d8591906143dd565b60206040518083038186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd59190614b1b565b90506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e3491906143dd565b60206040518083038186803b158015610e4c57600080fd5b505afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e849190614b1b565b905060008183610e949190614b77565b905060008111610ea357600080fd5b600f60009054906101000a900460ff16610ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee990614c19565b60405180910390fd5b600f60019054906101000a900460ff16610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890614cab565b60405180910390fd5b610d05610f4c611124565b10610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614d17565b60405180910390fd5b60008411610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690614d83565b60405180910390fd5b6064841115611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90614def565b60405180910390fd5b610d058461101f611124565b6110299190614b77565b111561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190614e5b565b60405180910390fd5b3484600e546110799190614e7b565b11156110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190614f21565b60405180910390fd5b60005b8481101561111d57600060016011546103526110d99190614b77565b6110e39190614b77565b90506001601160008282546110f89190614b77565b9250508190555061110933826132d5565b50808061111590614f41565b9150506110bd565b5050505050565b6000600880549050905090565b61114261113c613214565b826132f3565b611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890614ffc565b60405180910390fd5b61118c8383836133d1565b505050565b600061119c83611ff9565b82106111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061508e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f60039054906101000a900460ff1681565b611251613214565b73ffffffffffffffffffffffffffffffffffffffff1661126f61213f565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906150fa565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6112ea613214565b73ffffffffffffffffffffffffffffffffffffffff1661130861213f565b73ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611355906150fa565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846113b09190614e7b565b6113ba9190615149565b9081150290604051600060405180830381858888f193505050501580156113e5573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846114339190614e7b565b61143d9190615149565b9081150290604051600060405180830381858888f19350505050158015611468573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846114b69190614e7b565b6114c09190615149565b9081150290604051600060405180830381858888f193505050501580156114eb573d6000803e3d6000fd5b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846115399190614e7b565b6115439190615149565b9081150290604051600060405180830381858888f1935050505015801561156e573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846115bc9190614e7b565b6115c69190615149565b9081150290604051600060405180830381858888f193505050501580156115f1573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6127106103178461163f9190614e7b565b6116499190615149565b9081150290604051600060405180830381858888f19350505050158015611674573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846116c29190614e7b565b6116cc9190615149565b9081150290604051600060405180830381858888f193505050501580156116f7573d6000803e3d6000fd5b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846117459190614e7b565b61174f9190615149565b9081150290604051600060405180830381858888f1935050505015801561177a573d6000803e3d6000fd5b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846117c89190614e7b565b6117d29190615149565b9081150290604051600060405180830381858888f193505050501580156117fd573d6000803e3d6000fd5b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6127106103178461184b9190614e7b565b6118559190615149565b9081150290604051600060405180830381858888f19350505050158015611880573d6000803e3d6000fd5b50602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610636846118ce9190614e7b565b6118d89190615149565b9081150290604051600060405180830381858888f19350505050158015611903573d6000803e3d6000fd5b50602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6127106101f4846119519190614e7b565b61195b9190615149565b9081150290604051600060405180830381858888f19350505050158015611986573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119cd573d6000803e3d6000fd5b5050565b6119ec8383836040518060200160405280600081525061257e565b505050565b6119f9613214565b73ffffffffffffffffffffffffffffffffffffffff16611a1761213f565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a64906150fa565b60405180910390fd5b80600f60036101000a81548160ff02191690831515021790555050565b6000611a94611124565b8210611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906151ec565b60405180910390fd5b60088281548110611ae957611ae861520c565b5b90600052602060002001549050919050565b611b03613214565b73ffffffffffffffffffffffffffffffffffffffff16611b2161213f565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e906150fa565b60405180910390fd5b818160149190611b8892919061410c565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906152ad565b60405180910390fd5b80915050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c9c91906143dd565b60206040518083038186803b158015611cb457600080fd5b505afa158015611cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cec9190614b1b565b9050600f60009054906101000a900460ff16611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490614c19565b60405180910390fd5b600f60039054906101000a900460ff16611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614cab565b60405180910390fd5b60008111611d9957600080fd5b610d05611da4611124565b10611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90614d17565b60405180910390fd5b60008211611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90615319565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611e999190614407565b60206040518083038186803b158015611eb157600080fd5b505afa158015611ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee9919061534e565b73ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36906153ed565b60405180910390fd5b600160106000828254611f529190614b77565b92505081905550611f6333836132d5565b5050565b611f6f613214565b73ffffffffffffffffffffffffffffffffffffffff16611f8d61213f565b73ffffffffffffffffffffffffffffffffffffffff1614611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda906150fa565b60405180910390fd5b818160159190611ff492919061410c565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120619061547f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6120b9613214565b73ffffffffffffffffffffffffffffffffffffffff166120d761213f565b73ffffffffffffffffffffffffffffffffffffffff161461212d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612124906150fa565b60405180910390fd5b612137600061362d565b565b61035281565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900460ff1681565b60125481565b61218a613214565b73ffffffffffffffffffffffffffffffffffffffff166121a861213f565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f5906150fa565b60405180910390fd5b81816013919061220f92919061410c565b505050565b6060600180546122239061491e565b80601f016020809104026020016040519081016040528092919081815260200182805461224f9061491e565b801561229c5780601f106122715761010080835404028352916020019161229c565b820191906000526020600020905b81548152906001019060200180831161227f57829003601f168201915b5050505050905090565b60105481565b6122b4613214565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612322576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612319906154eb565b60405180910390fd5b806005600061232f613214565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123dc613214565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124219190614263565b60405180910390a35050565b600f60019054906101000a900460ff1681565b612448613214565b73ffffffffffffffffffffffffffffffffffffffff1661246661213f565b73ffffffffffffffffffffffffffffffffffffffff16146124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b3906150fa565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600d5481565b6124e7613214565b73ffffffffffffffffffffffffffffffffffffffff1661250561213f565b73ffffffffffffffffffffffffffffffffffffffff161461255b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612552906150fa565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b61012581565b61258f612589613214565b836132f3565b6125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590614ffc565b60405180910390fd5b6125da848484846136f3565b50505050565b610d0581565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161264391906143dd565b60206040518083038186803b15801561265b57600080fd5b505afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614b1b565b9050600f60009054906101000a900460ff166126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614c19565b60405180910390fd5b600f60039054906101000a900460ff16612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614cab565b60405180910390fd5b6000811161274057600080fd5b610d0561274b611124565b1061278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290614d17565b60405180910390fd5b600082116127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c590615319565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016128409190614407565b60206040518083038186803b15801561285857600080fd5b505afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612890919061534e565b73ffffffffffffffffffffffffffffffffffffffff16146128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd906153ed565b60405180910390fd5b6000610125836128f69190614b77565b905060016010600082825461290b9190614b77565b9250508190555061291c33826132d5565b505050565b606061292c826131a8565b61296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290615557565b60405180910390fd5b60006015805461297a9061491e565b80601f01602080910402602001604051908101604052809291908181526020018280546129a69061491e565b80156129f35780601f106129c8576101008083540402835291602001916129f3565b820191906000526020600020905b8154815290600101906020018083116129d657829003601f168201915b505050505090506000815111612a935760148054612a109061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054612a3c9061491e565b8015612a895780601f10612a5e57610100808354040283529160200191612a89565b820191906000526020600020905b815481529060010190602001808311612a6c57829003601f168201915b5050505050612abe565b80612a9d8461374f565b604051602001612aae9291906155b3565b6040516020818303038152906040525b915050919050565b612ace613214565b73ffffffffffffffffffffffffffffffffffffffff16612aec61213f565b73ffffffffffffffffffffffffffffffffffffffff1614612b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b39906150fa565b60405180910390fd5b610d05612b4d611124565b10612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8490614d17565b60405180910390fd5b60005b82829050811015612c1a5760006001601154610352612baf9190614b77565b612bb99190614b77565b9050600160126000828254612bce9190614b77565b92505081905550612c06848484818110612beb57612bea61520c565b5b9050602002016020810190612c0091906145ec565b826132d5565b508080612c1290614f41565b915050612b90565b505050565b606481565b60115481565b606060138054612c399061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054612c659061491e565b8015612cb25780601f10612c8757610100808354040283529160200191612cb2565b820191906000526020600020905b815481529060010190602001808311612c9557829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff16612d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9690614c19565b60405180910390fd5b600f60019054906101000a900460ff16612dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de590614cab565b60405180910390fd5b610d05612df9611124565b10612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614d17565b60405180910390fd5b60008111612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7390614d83565b60405180910390fd5b6064811115612ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb790614def565b60405180910390fd5b610d0581612ecc611124565b612ed69190614b77565b1115612f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0e90614e5b565b60405180910390fd5b3481600d54612f269190614e7b565b1115612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614f21565b60405180910390fd5b60005b81811015612fca5760006001601154610352612f869190614b77565b612f909190614b77565b9050600160116000828254612fa59190614b77565b92505081905550612fb633826132d5565b508080612fc290614f41565b915050612f6a565b5050565b612fd6613214565b73ffffffffffffffffffffffffffffffffffffffff16612ff461213f565b73ffffffffffffffffffffffffffffffffffffffff161461304a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613041906150fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b190615649565b60405180910390fd5b6130c38161362d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061319157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131a157506131a0826138b0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661328f83611b8d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6132ef82826040518060200160405280600081525061391a565b5050565b60006132fe826131a8565b61333d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613334906156db565b60405180910390fd5b600061334883611b8d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133b757508373ffffffffffffffffffffffffffffffffffffffff1661339f84610b85565b73ffffffffffffffffffffffffffffffffffffffff16145b806133c857506133c78185612cbc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133f182611b8d565b73ffffffffffffffffffffffffffffffffffffffff1614613447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343e9061576d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae906157ff565b60405180910390fd5b6134c2838383613975565b6134cd60008261321c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461351d919061581f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135749190614b77565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6136fe8484846133d1565b61370a84848484613a89565b613749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613740906158c5565b60405180910390fd5b50505050565b60606000821415613797576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506138ab565b600082905060005b600082146137c95780806137b290614f41565b915050600a826137c29190615149565b915061379f565b60008167ffffffffffffffff8111156137e5576137e461465e565b5b6040519080825280601f01601f1916602001820160405280156138175781602001600182028036833780820191505090505b5090505b600085146138a457600182613830919061581f565b9150600a8561383f91906158e5565b603061384b9190614b77565b60f81b8183815181106138615761386061520c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561389d9190615149565b945061381b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6139248383613c20565b6139316000848484613a89565b613970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613967906158c5565b60405180910390fd5b505050565b613980838383613dee565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139c3576139be81613df3565b613a02565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a0157613a008382613e3c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a4557613a4081613fa9565b613a84565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613a8357613a82828261407a565b5b5b505050565b6000613aaa8473ffffffffffffffffffffffffffffffffffffffff166140f9565b15613c13578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613ad3613214565b8786866040518563ffffffff1660e01b8152600401613af5949392919061596b565b602060405180830381600087803b158015613b0f57600080fd5b505af1925050508015613b4057506040513d601f19601f82011682018060405250810190613b3d91906159cc565b60015b613bc3573d8060008114613b70576040519150601f19603f3d011682016040523d82523d6000602084013e613b75565b606091505b50600081511415613bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb2906158c5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c18565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8790615a45565b60405180910390fd5b613c99816131a8565b15613cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd090615ab1565b60405180910390fd5b613ce560008383613975565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d359190614b77565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613e4984611ff9565b613e53919061581f565b9050600060076000848152602001908152602001600020549050818114613f38576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613fbd919061581f565b9050600060096000848152602001908152602001600020549050600060088381548110613fed57613fec61520c565b5b90600052602060002001549050806008838154811061400f5761400e61520c565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061405e5761405d615ad1565b5b6001900381819060005260206000200160009055905550505050565b600061408583611ff9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546141189061491e565b90600052602060002090601f01602090048101928261413a5760008555614181565b82601f1061415357803560ff1916838001178555614181565b82800160010185558215614181579182015b82811115614180578235825591602001919060010190614165565b5b50905061418e9190614192565b5090565b5b808211156141ab576000816000905550600101614193565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141f8816141c3565b811461420357600080fd5b50565b600081359050614215816141ef565b92915050565b600060208284031215614231576142306141b9565b5b600061423f84828501614206565b91505092915050565b60008115159050919050565b61425d81614248565b82525050565b60006020820190506142786000830184614254565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142b857808201518184015260208101905061429d565b838111156142c7576000848401525b50505050565b6000601f19601f8301169050919050565b60006142e98261427e565b6142f38185614289565b935061430381856020860161429a565b61430c816142cd565b840191505092915050565b6000602082019050818103600083015261433181846142de565b905092915050565b6000819050919050565b61434c81614339565b811461435757600080fd5b50565b60008135905061436981614343565b92915050565b600060208284031215614385576143846141b9565b5b60006143938482850161435a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143c78261439c565b9050919050565b6143d7816143bc565b82525050565b60006020820190506143f260008301846143ce565b92915050565b61440181614339565b82525050565b600060208201905061441c60008301846143f8565b92915050565b61442b816143bc565b811461443657600080fd5b50565b60008135905061444881614422565b92915050565b60008060408385031215614465576144646141b9565b5b600061447385828601614439565b92505060206144848582860161435a565b9150509250929050565b6000806000606084860312156144a7576144a66141b9565b5b60006144b586828701614439565b93505060206144c686828701614439565b92505060406144d78682870161435a565b9150509250925092565b6144ea81614248565b81146144f557600080fd5b50565b600081359050614507816144e1565b92915050565b600060208284031215614523576145226141b9565b5b6000614531848285016144f8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261455f5761455e61453a565b5b8235905067ffffffffffffffff81111561457c5761457b61453f565b5b60208301915083600182028301111561459857614597614544565b5b9250929050565b600080602083850312156145b6576145b56141b9565b5b600083013567ffffffffffffffff8111156145d4576145d36141be565b5b6145e085828601614549565b92509250509250929050565b600060208284031215614602576146016141b9565b5b600061461084828501614439565b91505092915050565b600080604083850312156146305761462f6141b9565b5b600061463e85828601614439565b925050602061464f858286016144f8565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614696826142cd565b810181811067ffffffffffffffff821117156146b5576146b461465e565b5b80604052505050565b60006146c86141af565b90506146d4828261468d565b919050565b600067ffffffffffffffff8211156146f4576146f361465e565b5b6146fd826142cd565b9050602081019050919050565b82818337600083830152505050565b600061472c614727846146d9565b6146be565b90508281526020810184848401111561474857614747614659565b5b61475384828561470a565b509392505050565b600082601f8301126147705761476f61453a565b5b8135614780848260208601614719565b91505092915050565b600080600080608085870312156147a3576147a26141b9565b5b60006147b187828801614439565b94505060206147c287828801614439565b93505060406147d38782880161435a565b925050606085013567ffffffffffffffff8111156147f4576147f36141be565b5b6148008782880161475b565b91505092959194509250565b60008083601f8401126148225761482161453a565b5b8235905067ffffffffffffffff81111561483f5761483e61453f565b5b60208301915083602082028301111561485b5761485a614544565b5b9250929050565b60008060208385031215614879576148786141b9565b5b600083013567ffffffffffffffff811115614897576148966141be565b5b6148a38582860161480c565b92509250509250929050565b600080604083850312156148c6576148c56141b9565b5b60006148d485828601614439565b92505060206148e585828601614439565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061493657607f821691505b6020821081141561494a576149496148ef565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149ac602c83614289565b91506149b782614950565b604082019050919050565b600060208201905081810360008301526149db8161499f565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a3e602183614289565b9150614a49826149e2565b604082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614ad0603883614289565b9150614adb82614a74565b604082019050919050565b60006020820190508181036000830152614aff81614ac3565b9050919050565b600081519050614b1581614343565b92915050565b600060208284031215614b3157614b306141b9565b5b6000614b3f84828501614b06565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b8282614339565b9150614b8d83614339565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bc257614bc1614b48565b5b828201905092915050565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b6000614c03601683614289565b9150614c0e82614bcd565b602082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b7f5468697320706f7274696f6e206f66206d696e74696e67206973206e6f74206160008201527f6374697665000000000000000000000000000000000000000000000000000000602082015250565b6000614c95602583614289565b9150614ca082614c39565b604082019050919050565b60006020820190508181036000830152614cc481614c88565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000614d01601b83614289565b9150614d0c82614ccb565b602082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f596f75206d757374206d696e74206d6f7265207468616e203120746f6b656e00600082015250565b6000614d6d601f83614289565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e73600082015250565b6000614dd9602083614289565b9150614de482614da3565b602082019050919050565b60006020820190508181036000830152614e0881614dcc565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b6000614e45602083614289565b9150614e5082614e0f565b602082019050919050565b60006020820190508181036000830152614e7481614e38565b9050919050565b6000614e8682614339565b9150614e9183614339565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eca57614ec9614b48565b5b828202905092915050565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b6000614f0b601c83614289565b9150614f1682614ed5565b602082019050919050565b60006020820190508181036000830152614f3a81614efe565b9050919050565b6000614f4c82614339565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f7f57614f7e614b48565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614fe6603183614289565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000615078602b83614289565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150e4602083614289565b91506150ef826150ae565b602082019050919050565b60006020820190508181036000830152615113816150d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515482614339565b915061515f83614339565b92508261516f5761516e61511a565b5b828204905092915050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006151d6602c83614289565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000615297602983614289565b91506152a28261523b565b604082019050919050565b600060208201905081810360008301526152c68161528a565b9050919050565b7f746f6b656e20696e646578206d757374206265206f7665722030000000000000600082015250565b6000615303601a83614289565b915061530e826152cd565b602082019050919050565b60006020820190508181036000830152615332816152f6565b9050919050565b60008151905061534881614422565b92915050565b600060208284031215615364576153636141b9565b5b600061537284828501615339565b91505092915050565b7f4d757374206f776e20746865206d656d62657273686970207061737320666f7260008201527f2072657175657374656420746f6b656e496420746f206d696e74000000000000602082015250565b60006153d7603a83614289565b91506153e28261537b565b604082019050919050565b60006020820190508181036000830152615406816153ca565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000615469602a83614289565b91506154748261540d565b604082019050919050565b600060208201905081810360008301526154988161545c565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006154d5601983614289565b91506154e08261549f565b602082019050919050565b60006020820190508181036000830152615504816154c8565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b6000615541601483614289565b915061554c8261550b565b602082019050919050565b6000602082019050818103600083015261557081615534565b9050919050565b600081905092915050565b600061558d8261427e565b6155978185615577565b93506155a781856020860161429a565b80840191505092915050565b60006155bf8285615582565b91506155cb8284615582565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615633602683614289565b915061563e826155d7565b604082019050919050565b6000602082019050818103600083015261566281615626565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006156c5602c83614289565b91506156d082615669565b604082019050919050565b600060208201905081810360008301526156f4816156b8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615757602983614289565b9150615762826156fb565b604082019050919050565b600060208201905081810360008301526157868161574a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006157e9602483614289565b91506157f48261578d565b604082019050919050565b60006020820190508181036000830152615818816157dc565b9050919050565b600061582a82614339565b915061583583614339565b92508282101561584857615847614b48565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006158af603283614289565b91506158ba82615853565b604082019050919050565b600060208201905081810360008301526158de816158a2565b9050919050565b60006158f082614339565b91506158fb83614339565b92508261590b5761590a61511a565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061593d82615916565b6159478185615921565b935061595781856020860161429a565b615960816142cd565b840191505092915050565b600060808201905061598060008301876143ce565b61598d60208301866143ce565b61599a60408301856143f8565b81810360608301526159ac8184615932565b905095945050505050565b6000815190506159c6816141ef565b92915050565b6000602082840312156159e2576159e16141b9565b5b60006159f0848285016159b7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615a2f602083614289565b9150615a3a826159f9565b602082019050919050565b60006020820190508181036000830152615a5e81615a22565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615a9b601c83614289565b9150615aa682615a65565b602082019050919050565b60006020820190508181036000830152615aca81615a8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122053be4146b3d58f28d6f28d45d14dd87fe4f24e47dab5db64a0c8bbeb1e78ba3a64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000cf67349cd2dbc798e8fc7cec5fa5082d2c6f4186000000000000000000000000430ee450c3c45a16fb18fda265c0021ebfdbb588000000000000000000000000000000000000000000000000000000000000000943616c6176657261730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000843414c4156455241000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c80638da5cb5b1161014f578063b7dec1b7116100c1578063d75e61101161007a578063d75e611014610963578063e6a5931e1461098e578063e8a3d485146109b9578063e985e9c5146109e4578063efd0cbf914610a21578063f2fde38b14610a3d5761027d565b8063b7dec1b714610855578063b88d4fde14610880578063c30e7684146108a9578063c5360a33146108d4578063c87b56dd146108fd578063d682ed861461093a5761027d565b8063a217437311610113578063a217437314610759578063a22cb46514610784578063a3330d25146107ad578063a73d8ca7146107d8578063aa8cddb014610801578063b0d2eb091461082c5761027d565b80638da5cb5b146106845780639123468a146106af57806391f4f96c146106da578063938e3d7b1461070557806395d89b411461072e5761027d565b8063392486b8116101f35780636352211e116101ac5780636352211e146105765780636dc74859146105b35780636e83843a146105dc57806370a0823114610605578063715018a614610642578063762c0f6a146106595761027d565b8063392486b81461047e5780633ccfd60b146104a757806342842e0e146104be57806348e6770c146104e75780634f6ccce71461051057806355f804b31461054d5761027d565b8063095ea7b311610245578063095ea7b31461037d5780630d78d0c1146103a657806318160ddd146103c257806323b872dd146103ed5780632f745c591461041657806332cdbcdf146104535761027d565b806301ffc9a71461028257806304267069146102bf57806306fdde03146102ea578063081812fc14610315578063092ab00d14610352575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a4919061421b565b610a66565b6040516102b69190614263565b60405180910390f35b3480156102cb57600080fd5b506102d4610ae0565b6040516102e19190614263565b60405180910390f35b3480156102f657600080fd5b506102ff610af3565b60405161030c9190614317565b60405180910390f35b34801561032157600080fd5b5061033c6004803603810190610337919061436f565b610b85565b60405161034991906143dd565b60405180910390f35b34801561035e57600080fd5b50610367610c0a565b6040516103749190614407565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f919061444e565b610c10565b005b6103c060048036038101906103bb919061436f565b610d28565b005b3480156103ce57600080fd5b506103d7611124565b6040516103e49190614407565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f919061448e565b611131565b005b34801561042257600080fd5b5061043d6004803603810190610438919061444e565b611191565b60405161044a9190614407565b60405180910390f35b34801561045f57600080fd5b50610468611236565b6040516104759190614263565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a0919061450d565b611249565b005b3480156104b357600080fd5b506104bc6112e2565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061448e565b6119d1565b005b3480156104f357600080fd5b5061050e6004803603810190610509919061450d565b6119f1565b005b34801561051c57600080fd5b506105376004803603810190610532919061436f565b611a8a565b6040516105449190614407565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f919061459f565b611afb565b005b34801561058257600080fd5b5061059d6004803603810190610598919061436f565b611b8d565b6040516105aa91906143dd565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d5919061436f565b611c3f565b005b3480156105e857600080fd5b5061060360048036038101906105fe919061459f565b611f67565b005b34801561061157600080fd5b5061062c600480360381019061062791906145ec565b611ff9565b6040516106399190614407565b60405180910390f35b34801561064e57600080fd5b506106576120b1565b005b34801561066557600080fd5b5061066e612139565b60405161067b9190614407565b60405180910390f35b34801561069057600080fd5b5061069961213f565b6040516106a691906143dd565b60405180910390f35b3480156106bb57600080fd5b506106c4612169565b6040516106d19190614263565b60405180910390f35b3480156106e657600080fd5b506106ef61217c565b6040516106fc9190614407565b60405180910390f35b34801561071157600080fd5b5061072c6004803603810190610727919061459f565b612182565b005b34801561073a57600080fd5b50610743612214565b6040516107509190614317565b60405180910390f35b34801561076557600080fd5b5061076e6122a6565b60405161077b9190614407565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190614619565b6122ac565b005b3480156107b957600080fd5b506107c261242d565b6040516107cf9190614263565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa919061450d565b612440565b005b34801561080d57600080fd5b506108166124d9565b6040516108239190614407565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e919061450d565b6124df565b005b34801561086157600080fd5b5061086a612578565b6040516108779190614407565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a29190614789565b61257e565b005b3480156108b557600080fd5b506108be6125e0565b6040516108cb9190614407565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f6919061436f565b6125e6565b005b34801561090957600080fd5b50610924600480360381019061091f919061436f565b612921565b6040516109319190614317565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190614862565b612ac6565b005b34801561096f57600080fd5b50610978612c1f565b6040516109859190614407565b60405180910390f35b34801561099a57600080fd5b506109a3612c24565b6040516109b09190614407565b60405180910390f35b3480156109c557600080fd5b506109ce612c2a565b6040516109db9190614317565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a0691906148af565b612cbc565b604051610a189190614263565b60405180910390f35b610a3b6004803603810190610a36919061436f565b612d50565b005b348015610a4957600080fd5b50610a646004803603810190610a5f91906145ec565b612fce565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad95750610ad8826130c6565b5b9050919050565b600f60029054906101000a900460ff1681565b606060008054610b029061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e9061491e565b8015610b7b5780601f10610b5057610100808354040283529160200191610b7b565b820191906000526020600020905b815481529060010190602001808311610b5e57829003601f168201915b5050505050905090565b6000610b90826131a8565b610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906149c2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e5481565b6000610c1b82611b8d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390614a54565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cab613214565b73ffffffffffffffffffffffffffffffffffffffff161480610cda5750610cd981610cd4613214565b612cbc565b5b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614ae6565b60405180910390fd5b610d23838361321c565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d8591906143dd565b60206040518083038186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd59190614b1b565b90506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e3491906143dd565b60206040518083038186803b158015610e4c57600080fd5b505afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e849190614b1b565b905060008183610e949190614b77565b905060008111610ea357600080fd5b600f60009054906101000a900460ff16610ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee990614c19565b60405180910390fd5b600f60019054906101000a900460ff16610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890614cab565b60405180910390fd5b610d05610f4c611124565b10610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614d17565b60405180910390fd5b60008411610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690614d83565b60405180910390fd5b6064841115611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90614def565b60405180910390fd5b610d058461101f611124565b6110299190614b77565b111561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190614e5b565b60405180910390fd5b3484600e546110799190614e7b565b11156110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190614f21565b60405180910390fd5b60005b8481101561111d57600060016011546103526110d99190614b77565b6110e39190614b77565b90506001601160008282546110f89190614b77565b9250508190555061110933826132d5565b50808061111590614f41565b9150506110bd565b5050505050565b6000600880549050905090565b61114261113c613214565b826132f3565b611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890614ffc565b60405180910390fd5b61118c8383836133d1565b505050565b600061119c83611ff9565b82106111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061508e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f60039054906101000a900460ff1681565b611251613214565b73ffffffffffffffffffffffffffffffffffffffff1661126f61213f565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906150fa565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6112ea613214565b73ffffffffffffffffffffffffffffffffffffffff1661130861213f565b73ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611355906150fa565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846113b09190614e7b565b6113ba9190615149565b9081150290604051600060405180830381858888f193505050501580156113e5573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846114339190614e7b565b61143d9190615149565b9081150290604051600060405180830381858888f19350505050158015611468573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846114b69190614e7b565b6114c09190615149565b9081150290604051600060405180830381858888f193505050501580156114eb573d6000803e3d6000fd5b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846115399190614e7b565b6115439190615149565b9081150290604051600060405180830381858888f1935050505015801561156e573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846115bc9190614e7b565b6115c69190615149565b9081150290604051600060405180830381858888f193505050501580156115f1573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6127106103178461163f9190614e7b565b6116499190615149565b9081150290604051600060405180830381858888f19350505050158015611674573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846116c29190614e7b565b6116cc9190615149565b9081150290604051600060405180830381858888f193505050501580156116f7573d6000803e3d6000fd5b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846117459190614e7b565b61174f9190615149565b9081150290604051600060405180830381858888f1935050505015801561177a573d6000803e3d6000fd5b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610317846117c89190614e7b565b6117d29190615149565b9081150290604051600060405180830381858888f193505050501580156117fd573d6000803e3d6000fd5b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6127106103178461184b9190614e7b565b6118559190615149565b9081150290604051600060405180830381858888f19350505050158015611880573d6000803e3d6000fd5b50602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612710610636846118ce9190614e7b565b6118d89190615149565b9081150290604051600060405180830381858888f19350505050158015611903573d6000803e3d6000fd5b50602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6127106101f4846119519190614e7b565b61195b9190615149565b9081150290604051600060405180830381858888f19350505050158015611986573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119cd573d6000803e3d6000fd5b5050565b6119ec8383836040518060200160405280600081525061257e565b505050565b6119f9613214565b73ffffffffffffffffffffffffffffffffffffffff16611a1761213f565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a64906150fa565b60405180910390fd5b80600f60036101000a81548160ff02191690831515021790555050565b6000611a94611124565b8210611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906151ec565b60405180910390fd5b60088281548110611ae957611ae861520c565b5b90600052602060002001549050919050565b611b03613214565b73ffffffffffffffffffffffffffffffffffffffff16611b2161213f565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e906150fa565b60405180910390fd5b818160149190611b8892919061410c565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906152ad565b60405180910390fd5b80915050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c9c91906143dd565b60206040518083038186803b158015611cb457600080fd5b505afa158015611cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cec9190614b1b565b9050600f60009054906101000a900460ff16611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490614c19565b60405180910390fd5b600f60039054906101000a900460ff16611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614cab565b60405180910390fd5b60008111611d9957600080fd5b610d05611da4611124565b10611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90614d17565b60405180910390fd5b60008211611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90615319565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611e999190614407565b60206040518083038186803b158015611eb157600080fd5b505afa158015611ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee9919061534e565b73ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36906153ed565b60405180910390fd5b600160106000828254611f529190614b77565b92505081905550611f6333836132d5565b5050565b611f6f613214565b73ffffffffffffffffffffffffffffffffffffffff16611f8d61213f565b73ffffffffffffffffffffffffffffffffffffffff1614611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda906150fa565b60405180910390fd5b818160159190611ff492919061410c565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120619061547f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6120b9613214565b73ffffffffffffffffffffffffffffffffffffffff166120d761213f565b73ffffffffffffffffffffffffffffffffffffffff161461212d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612124906150fa565b60405180910390fd5b612137600061362d565b565b61035281565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900460ff1681565b60125481565b61218a613214565b73ffffffffffffffffffffffffffffffffffffffff166121a861213f565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f5906150fa565b60405180910390fd5b81816013919061220f92919061410c565b505050565b6060600180546122239061491e565b80601f016020809104026020016040519081016040528092919081815260200182805461224f9061491e565b801561229c5780601f106122715761010080835404028352916020019161229c565b820191906000526020600020905b81548152906001019060200180831161227f57829003601f168201915b5050505050905090565b60105481565b6122b4613214565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612322576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612319906154eb565b60405180910390fd5b806005600061232f613214565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123dc613214565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124219190614263565b60405180910390a35050565b600f60019054906101000a900460ff1681565b612448613214565b73ffffffffffffffffffffffffffffffffffffffff1661246661213f565b73ffffffffffffffffffffffffffffffffffffffff16146124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b3906150fa565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600d5481565b6124e7613214565b73ffffffffffffffffffffffffffffffffffffffff1661250561213f565b73ffffffffffffffffffffffffffffffffffffffff161461255b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612552906150fa565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b61012581565b61258f612589613214565b836132f3565b6125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590614ffc565b60405180910390fd5b6125da848484846136f3565b50505050565b610d0581565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161264391906143dd565b60206040518083038186803b15801561265b57600080fd5b505afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614b1b565b9050600f60009054906101000a900460ff166126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614c19565b60405180910390fd5b600f60039054906101000a900460ff16612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614cab565b60405180910390fd5b6000811161274057600080fd5b610d0561274b611124565b1061278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290614d17565b60405180910390fd5b600082116127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c590615319565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016128409190614407565b60206040518083038186803b15801561285857600080fd5b505afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612890919061534e565b73ffffffffffffffffffffffffffffffffffffffff16146128e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dd906153ed565b60405180910390fd5b6000610125836128f69190614b77565b905060016010600082825461290b9190614b77565b9250508190555061291c33826132d5565b505050565b606061292c826131a8565b61296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290615557565b60405180910390fd5b60006015805461297a9061491e565b80601f01602080910402602001604051908101604052809291908181526020018280546129a69061491e565b80156129f35780601f106129c8576101008083540402835291602001916129f3565b820191906000526020600020905b8154815290600101906020018083116129d657829003601f168201915b505050505090506000815111612a935760148054612a109061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054612a3c9061491e565b8015612a895780601f10612a5e57610100808354040283529160200191612a89565b820191906000526020600020905b815481529060010190602001808311612a6c57829003601f168201915b5050505050612abe565b80612a9d8461374f565b604051602001612aae9291906155b3565b6040516020818303038152906040525b915050919050565b612ace613214565b73ffffffffffffffffffffffffffffffffffffffff16612aec61213f565b73ffffffffffffffffffffffffffffffffffffffff1614612b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b39906150fa565b60405180910390fd5b610d05612b4d611124565b10612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8490614d17565b60405180910390fd5b60005b82829050811015612c1a5760006001601154610352612baf9190614b77565b612bb99190614b77565b9050600160126000828254612bce9190614b77565b92505081905550612c06848484818110612beb57612bea61520c565b5b9050602002016020810190612c0091906145ec565b826132d5565b508080612c1290614f41565b915050612b90565b505050565b606481565b60115481565b606060138054612c399061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054612c659061491e565b8015612cb25780601f10612c8757610100808354040283529160200191612cb2565b820191906000526020600020905b815481529060010190602001808311612c9557829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff16612d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9690614c19565b60405180910390fd5b600f60019054906101000a900460ff16612dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de590614cab565b60405180910390fd5b610d05612df9611124565b10612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614d17565b60405180910390fd5b60008111612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7390614d83565b60405180910390fd5b6064811115612ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb790614def565b60405180910390fd5b610d0581612ecc611124565b612ed69190614b77565b1115612f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0e90614e5b565b60405180910390fd5b3481600d54612f269190614e7b565b1115612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614f21565b60405180910390fd5b60005b81811015612fca5760006001601154610352612f869190614b77565b612f909190614b77565b9050600160116000828254612fa59190614b77565b92505081905550612fb633826132d5565b508080612fc290614f41565b915050612f6a565b5050565b612fd6613214565b73ffffffffffffffffffffffffffffffffffffffff16612ff461213f565b73ffffffffffffffffffffffffffffffffffffffff161461304a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613041906150fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b190615649565b60405180910390fd5b6130c38161362d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061319157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131a157506131a0826138b0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661328f83611b8d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6132ef82826040518060200160405280600081525061391a565b5050565b60006132fe826131a8565b61333d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613334906156db565b60405180910390fd5b600061334883611b8d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133b757508373ffffffffffffffffffffffffffffffffffffffff1661339f84610b85565b73ffffffffffffffffffffffffffffffffffffffff16145b806133c857506133c78185612cbc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133f182611b8d565b73ffffffffffffffffffffffffffffffffffffffff1614613447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343e9061576d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae906157ff565b60405180910390fd5b6134c2838383613975565b6134cd60008261321c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461351d919061581f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135749190614b77565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6136fe8484846133d1565b61370a84848484613a89565b613749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613740906158c5565b60405180910390fd5b50505050565b60606000821415613797576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506138ab565b600082905060005b600082146137c95780806137b290614f41565b915050600a826137c29190615149565b915061379f565b60008167ffffffffffffffff8111156137e5576137e461465e565b5b6040519080825280601f01601f1916602001820160405280156138175781602001600182028036833780820191505090505b5090505b600085146138a457600182613830919061581f565b9150600a8561383f91906158e5565b603061384b9190614b77565b60f81b8183815181106138615761386061520c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561389d9190615149565b945061381b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6139248383613c20565b6139316000848484613a89565b613970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613967906158c5565b60405180910390fd5b505050565b613980838383613dee565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139c3576139be81613df3565b613a02565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a0157613a008382613e3c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a4557613a4081613fa9565b613a84565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613a8357613a82828261407a565b5b5b505050565b6000613aaa8473ffffffffffffffffffffffffffffffffffffffff166140f9565b15613c13578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613ad3613214565b8786866040518563ffffffff1660e01b8152600401613af5949392919061596b565b602060405180830381600087803b158015613b0f57600080fd5b505af1925050508015613b4057506040513d601f19601f82011682018060405250810190613b3d91906159cc565b60015b613bc3573d8060008114613b70576040519150601f19603f3d011682016040523d82523d6000602084013e613b75565b606091505b50600081511415613bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb2906158c5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c18565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8790615a45565b60405180910390fd5b613c99816131a8565b15613cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd090615ab1565b60405180910390fd5b613ce560008383613975565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d359190614b77565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613e4984611ff9565b613e53919061581f565b9050600060076000848152602001908152602001600020549050818114613f38576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613fbd919061581f565b9050600060096000848152602001908152602001600020549050600060088381548110613fed57613fec61520c565b5b90600052602060002001549050806008838154811061400f5761400e61520c565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061405e5761405d615ad1565b5b6001900381819060005260206000200160009055905550505050565b600061408583611ff9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546141189061491e565b90600052602060002090601f01602090048101928261413a5760008555614181565b82601f1061415357803560ff1916838001178555614181565b82800160010185558215614181579182015b82811115614180578235825591602001919060010190614165565b5b50905061418e9190614192565b5090565b5b808211156141ab576000816000905550600101614193565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141f8816141c3565b811461420357600080fd5b50565b600081359050614215816141ef565b92915050565b600060208284031215614231576142306141b9565b5b600061423f84828501614206565b91505092915050565b60008115159050919050565b61425d81614248565b82525050565b60006020820190506142786000830184614254565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142b857808201518184015260208101905061429d565b838111156142c7576000848401525b50505050565b6000601f19601f8301169050919050565b60006142e98261427e565b6142f38185614289565b935061430381856020860161429a565b61430c816142cd565b840191505092915050565b6000602082019050818103600083015261433181846142de565b905092915050565b6000819050919050565b61434c81614339565b811461435757600080fd5b50565b60008135905061436981614343565b92915050565b600060208284031215614385576143846141b9565b5b60006143938482850161435a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143c78261439c565b9050919050565b6143d7816143bc565b82525050565b60006020820190506143f260008301846143ce565b92915050565b61440181614339565b82525050565b600060208201905061441c60008301846143f8565b92915050565b61442b816143bc565b811461443657600080fd5b50565b60008135905061444881614422565b92915050565b60008060408385031215614465576144646141b9565b5b600061447385828601614439565b92505060206144848582860161435a565b9150509250929050565b6000806000606084860312156144a7576144a66141b9565b5b60006144b586828701614439565b93505060206144c686828701614439565b92505060406144d78682870161435a565b9150509250925092565b6144ea81614248565b81146144f557600080fd5b50565b600081359050614507816144e1565b92915050565b600060208284031215614523576145226141b9565b5b6000614531848285016144f8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261455f5761455e61453a565b5b8235905067ffffffffffffffff81111561457c5761457b61453f565b5b60208301915083600182028301111561459857614597614544565b5b9250929050565b600080602083850312156145b6576145b56141b9565b5b600083013567ffffffffffffffff8111156145d4576145d36141be565b5b6145e085828601614549565b92509250509250929050565b600060208284031215614602576146016141b9565b5b600061461084828501614439565b91505092915050565b600080604083850312156146305761462f6141b9565b5b600061463e85828601614439565b925050602061464f858286016144f8565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614696826142cd565b810181811067ffffffffffffffff821117156146b5576146b461465e565b5b80604052505050565b60006146c86141af565b90506146d4828261468d565b919050565b600067ffffffffffffffff8211156146f4576146f361465e565b5b6146fd826142cd565b9050602081019050919050565b82818337600083830152505050565b600061472c614727846146d9565b6146be565b90508281526020810184848401111561474857614747614659565b5b61475384828561470a565b509392505050565b600082601f8301126147705761476f61453a565b5b8135614780848260208601614719565b91505092915050565b600080600080608085870312156147a3576147a26141b9565b5b60006147b187828801614439565b94505060206147c287828801614439565b93505060406147d38782880161435a565b925050606085013567ffffffffffffffff8111156147f4576147f36141be565b5b6148008782880161475b565b91505092959194509250565b60008083601f8401126148225761482161453a565b5b8235905067ffffffffffffffff81111561483f5761483e61453f565b5b60208301915083602082028301111561485b5761485a614544565b5b9250929050565b60008060208385031215614879576148786141b9565b5b600083013567ffffffffffffffff811115614897576148966141be565b5b6148a38582860161480c565b92509250509250929050565b600080604083850312156148c6576148c56141b9565b5b60006148d485828601614439565b92505060206148e585828601614439565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061493657607f821691505b6020821081141561494a576149496148ef565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149ac602c83614289565b91506149b782614950565b604082019050919050565b600060208201905081810360008301526149db8161499f565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a3e602183614289565b9150614a49826149e2565b604082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614ad0603883614289565b9150614adb82614a74565b604082019050919050565b60006020820190508181036000830152614aff81614ac3565b9050919050565b600081519050614b1581614343565b92915050565b600060208284031215614b3157614b306141b9565b5b6000614b3f84828501614b06565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b8282614339565b9150614b8d83614339565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bc257614bc1614b48565b5b828201905092915050565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b6000614c03601683614289565b9150614c0e82614bcd565b602082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b7f5468697320706f7274696f6e206f66206d696e74696e67206973206e6f74206160008201527f6374697665000000000000000000000000000000000000000000000000000000602082015250565b6000614c95602583614289565b9150614ca082614c39565b604082019050919050565b60006020820190508181036000830152614cc481614c88565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000614d01601b83614289565b9150614d0c82614ccb565b602082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f596f75206d757374206d696e74206d6f7265207468616e203120746f6b656e00600082015250565b6000614d6d601f83614289565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e73600082015250565b6000614dd9602083614289565b9150614de482614da3565b602082019050919050565b60006020820190508181036000830152614e0881614dcc565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b6000614e45602083614289565b9150614e5082614e0f565b602082019050919050565b60006020820190508181036000830152614e7481614e38565b9050919050565b6000614e8682614339565b9150614e9183614339565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eca57614ec9614b48565b5b828202905092915050565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b6000614f0b601c83614289565b9150614f1682614ed5565b602082019050919050565b60006020820190508181036000830152614f3a81614efe565b9050919050565b6000614f4c82614339565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f7f57614f7e614b48565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614fe6603183614289565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000615078602b83614289565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150e4602083614289565b91506150ef826150ae565b602082019050919050565b60006020820190508181036000830152615113816150d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515482614339565b915061515f83614339565b92508261516f5761516e61511a565b5b828204905092915050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006151d6602c83614289565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000615297602983614289565b91506152a28261523b565b604082019050919050565b600060208201905081810360008301526152c68161528a565b9050919050565b7f746f6b656e20696e646578206d757374206265206f7665722030000000000000600082015250565b6000615303601a83614289565b915061530e826152cd565b602082019050919050565b60006020820190508181036000830152615332816152f6565b9050919050565b60008151905061534881614422565b92915050565b600060208284031215615364576153636141b9565b5b600061537284828501615339565b91505092915050565b7f4d757374206f776e20746865206d656d62657273686970207061737320666f7260008201527f2072657175657374656420746f6b656e496420746f206d696e74000000000000602082015250565b60006153d7603a83614289565b91506153e28261537b565b604082019050919050565b60006020820190508181036000830152615406816153ca565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000615469602a83614289565b91506154748261540d565b604082019050919050565b600060208201905081810360008301526154988161545c565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006154d5601983614289565b91506154e08261549f565b602082019050919050565b60006020820190508181036000830152615504816154c8565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b6000615541601483614289565b915061554c8261550b565b602082019050919050565b6000602082019050818103600083015261557081615534565b9050919050565b600081905092915050565b600061558d8261427e565b6155978185615577565b93506155a781856020860161429a565b80840191505092915050565b60006155bf8285615582565b91506155cb8284615582565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615633602683614289565b915061563e826155d7565b604082019050919050565b6000602082019050818103600083015261566281615626565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006156c5602c83614289565b91506156d082615669565b604082019050919050565b600060208201905081810360008301526156f4816156b8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615757602983614289565b9150615762826156fb565b604082019050919050565b600060208201905081810360008301526157868161574a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006157e9602483614289565b91506157f48261578d565b604082019050919050565b60006020820190508181036000830152615818816157dc565b9050919050565b600061582a82614339565b915061583583614339565b92508282101561584857615847614b48565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006158af603283614289565b91506158ba82615853565b604082019050919050565b600060208201905081810360008301526158de816158a2565b9050919050565b60006158f082614339565b91506158fb83614339565b92508261590b5761590a61511a565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061593d82615916565b6159478185615921565b935061595781856020860161429a565b615960816142cd565b840191505092915050565b600060808201905061598060008301876143ce565b61598d60208301866143ce565b61599a60408301856143f8565b81810360608301526159ac8184615932565b905095945050505050565b6000815190506159c6816141ef565b92915050565b6000602082840312156159e2576159e16141b9565b5b60006159f0848285016159b7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615a2f602083614289565b9150615a3a826159f9565b602082019050919050565b60006020820190508181036000830152615a5e81615a22565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615a9b601c83614289565b9150615aa682615a65565b602082019050919050565b60006020820190508181036000830152615aca81615a8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122053be4146b3d58f28d6f28d45d14dd87fe4f24e47dab5db64a0c8bbeb1e78ba3a64736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000cf67349cd2dbc798e8fc7cec5fa5082d2c6f4186000000000000000000000000430ee450c3c45a16fb18fda265c0021ebfdbb588000000000000000000000000000000000000000000000000000000000000000943616c6176657261730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000843414c4156455241000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Calaveras
Arg [1] : symbol (string): CALAVERA
Arg [2] : membershipcontract1 (address): 0xCF67349cD2Dbc798E8Fc7CeC5Fa5082D2C6F4186
Arg [3] : membershipcontract2 (address): 0x430ee450C3C45A16Fb18fDa265c0021EBfDbB588

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000cf67349cd2dbc798e8fc7cec5fa5082d2c6f4186
Arg [3] : 000000000000000000000000430ee450c3c45a16fb18fda265c0021ebfdbb588
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 43616c6176657261730000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 43414c4156455241000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

807:8669:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:224:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1418:38:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2426:100:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3985:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1276:43:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3508:411:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4672:1141:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1577:113:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4875:339:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1245:256:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1461:32:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6500:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7682:868;;;;;;;;;;;;;:::i;:::-;;5285:185:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6633:100:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1767:233:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8684:101:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2120:239:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2147:756:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8791:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1850:208:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:13;;;;;;;;;;;;;:::i;:::-;;1095:42:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:87:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1340:34:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8574:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2595::5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1520:36:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4278:295:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1379:34:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6246:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1234:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6373:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1056:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5541:328:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1013:38:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2928:797;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9044:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5900:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1165:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1561:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8938:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4644:164:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3741:905:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1899:192:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;937:224:6;1039:4;1078:35;1063:50;;;:11;:50;;;;:90;;;;1117:36;1141:11;1117:23;:36::i;:::-;1063:90;1056:97;;937:224;;;:::o;1418:38:3:-;;;;;;;;;;;;;:::o;2426:100:5:-;2480:13;2513:5;2506:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2426:100;:::o;3985:221::-;4061:7;4089:16;4097:7;4089;:16::i;:::-;4081:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4174:15;:24;4190:7;4174:24;;;;;;;;;;;;;;;;;;;;;4167:31;;3985:221;;;:::o;1276:43:3:-;;;;:::o;3508:411:5:-;3589:13;3605:23;3620:7;3605:14;:23::i;:::-;3589:39;;3653:5;3647:11;;:2;:11;;;;3639:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3747:5;3731:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3756:37;3773:5;3780:12;:10;:12::i;:::-;3756:16;:37::i;:::-;3731:62;3709:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3890:21;3899:2;3903:7;3890:8;:21::i;:::-;3578:341;3508:411;;:::o;4672:1141:3:-;4766:18;4787:11;;;;;;;;;;;:21;;;4809:10;4787:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4766:54;;4827:18;4848:11;;;;;;;;;;;:21;;;4870:10;4848:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4827:54;;4888:17;4924:13;4908;:29;;;;:::i;:::-;4888:49;;4967:1;4952:12;:16;4944:25;;;;;;5010:14;;;;;;;;;;;5002:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;5066:14;;;;;;;;;;;5058:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;1047:4;5163:13;:11;:13::i;:::-;:23;5155:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5250:1;5233:14;:18;5225:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;1206:3;5302:14;:32;;5294:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;1047:4;5402:14;5386:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:41;;5378:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;5544:9;5526:14;5508:15;;:32;;;;:::i;:::-;:45;;5500:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;5619:9;5614:192;5638:14;5634:1;:18;5614:192;;;5670:15;5723:1;5703:17;;1134:3;5688:32;;;;:::i;:::-;:36;;;;:::i;:::-;5670:54;;5756:1;5735:17;;:22;;;;;;;:::i;:::-;;;;;;;;5768:30;5778:10;5790:7;5768:9;:30::i;:::-;5659:147;5654:3;;;;;:::i;:::-;;;;5614:192;;;;4737:1076;;;4672:1141;:::o;1577:113:6:-;1638:7;1665:10;:17;;;;1658:24;;1577:113;:::o;4875:339:5:-;5070:41;5089:12;:10;:12::i;:::-;5103:7;5070:18;:41::i;:::-;5062:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5178:28;5188:4;5194:2;5198:7;5178:9;:28::i;:::-;4875:339;;;:::o;1245:256:6:-;1342:7;1378:23;1395:5;1378:16;:23::i;:::-;1370:5;:31;1362:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1467:12;:19;1480:5;1467:19;;;;;;;;;;;;;;;:26;1487:5;1467:26;;;;;;;;;;;;1460:33;;1245:256;;;;:::o;1461:32:3:-;;;;;;;;;;;;;:::o;6500:124::-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6599:19:3::1;6578:18;;:40;;;;;;;;;;;;;;;;;;6500:124:::0;:::o;7682:868::-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7730:12:3::1;7745:21;7730:36;;7785:8;;;;;;;;;;;7777:26;;:45;7816:5;7812:3;7804:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;7777:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;7841:8;;;;;;;;;;;7833:26;;:45;7872:5;7868:3;7860:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;7833:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;7904:8;;;;;;;;;;;7896:26;;:45;7935:5;7931:3;7923:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;7896:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;7966:8;;;;;;;;;;;7958:26;;:45;7997:5;7993:3;7985:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;7958:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8028:8;;;;;;;;;;;8020:26;;:45;8059:5;8055:3;8047:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;8020:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8084:8;;;;;;;;;;;8076:26;;:45;8115:5;8111:3;8103:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;8076:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8140:8;;;;;;;;;;;8132:26;;:45;8171:5;8167:3;8159:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;8132:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8196:8;;;;;;;;;;;8188:26;;:45;8227:5;8223:3;8215:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;8188:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8252:8;;;;;;;;;;;8244:26;;:45;8283:5;8279:3;8271:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;8244:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8315:9;;;;;;;;;;;8307:27;;:46;8347:5;8343:3;8335:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;8307:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8378:9;;;;;;;;;;;8370:27;;:47;8411:5;8406:4;8398:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;8370:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8442:9;;;;;;;;;;;8434:27;;:46;8474:5;8470:3;8462:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;8434:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8499:10;8491:28;;:51;8520:21;8491:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;7719:831;7682:868::o:0;5285:185:5:-;5423:39;5440:4;5446:2;5450:7;5423:39;;;;;;;;;;;;:16;:39::i;:::-;5285:185;;;:::o;6633:100:3:-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6714:13:3::1;6699:12;;:28;;;;;;;;;;;;;;;;;;6633:100:::0;:::o;1767:233:6:-;1842:7;1878:30;:28;:30::i;:::-;1870:5;:38;1862:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1975:10;1986:5;1975:17;;;;;;;;:::i;:::-;;;;;;;;;;1968:24;;1767:233;;;:::o;8684:101:3:-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8776:3:3::1;;8760:13;:19;;;;;;;:::i;:::-;;8684:101:::0;;:::o;2120:239:5:-;2192:7;2212:13;2228:7;:16;2236:7;2228:16;;;;;;;;;;;;;;;;;;;;;2212:32;;2280:1;2263:19;;:5;:19;;;;2255:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2346:5;2339:12;;;2120:239;;;:::o;2147:756:3:-;2252:18;2273:11;;;;;;;;;;;:21;;;2295:10;2273:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2252:54;;2345:14;;;;;;;;;;;2337:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2401:12;;;;;;;;;;;2393:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2509:1;2492:13;:18;2484:27;;;;;;1047:4;2526:13;:11;:13::i;:::-;:23;2518:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2616:1;2596:17;:21;2588:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2720:10;2678:52;;:11;;;;;;;;;;;:19;;;2698:17;2678:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;2670:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;2844:1;2819:21;;:26;;;;;;;:::i;:::-;;;;;;;;2854:40;2864:10;2876:17;2854:9;:40::i;:::-;2213:690;2147:756;:::o;8791:141::-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8911:15:3::1;;8887:21;:39;;;;;;;:::i;:::-;;8791:141:::0;;:::o;1850:208:5:-;1922:7;1967:1;1950:19;;:5;:19;;;;1942:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2034:9;:16;2044:5;2034:16;;;;;;;;;;;;;;;;2027:23;;1850:208;;;:::o;1650:94:13:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;1095:42:3:-;1134:3;1095:42;:::o;999:87:13:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;1340:34:3:-;;;;;;;;;;;;;:::o;1598:33::-;;;;:::o;8574:104::-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8669:3:3::1;;8654:12;:18;;;;;;;:::i;:::-;;8574:104:::0;;:::o;2595::5:-;2651:13;2684:7;2677:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2595:104;:::o;1520:36:3:-;;;;:::o;4278:295:5:-;4393:12;:10;:12::i;:::-;4381:24;;:8;:24;;;;4373:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4493:8;4448:18;:32;4467:12;:10;:12::i;:::-;4448:32;;;;;;;;;;;;;;;:42;4481:8;4448:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4546:8;4517:48;;4532:12;:10;:12::i;:::-;4517:48;;;4556:8;4517:48;;;;;;:::i;:::-;;;;;;;;4278:295;;:::o;1379:34:3:-;;;;;;;;;;;;;:::o;6246:117::-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6342:15:3::1;6325:14;;:32;;;;;;;;;;;;;;;;;;6246:117:::0;:::o;1234:37::-;;;;:::o;6373:117::-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:15:3::1;6452:14;;:32;;;;;;;;;;;;;;;;;;6373:117:::0;:::o;1056:34::-;1087:3;1056:34;:::o;5541:328:5:-;5716:41;5735:12;:10;:12::i;:::-;5749:7;5716:18;:41::i;:::-;5708:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5822:39;5836:4;5842:2;5846:7;5855:5;5822:13;:39::i;:::-;5541:328;;;;:::o;1013:38:3:-;1047:4;1013:38;:::o;2928:797::-;3026:18;3047:11;;;;;;;;;;;:21;;;3069:10;3047:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3026:54;;3119:14;;;;;;;;;;;3111:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3175:12;;;;;;;;;;;3167:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;3283:1;3266:13;:18;3258:27;;;;;;1047:4;3300:13;:11;:13::i;:::-;:23;3292:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3390:1;3370:17;:21;3362:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;3494:10;3452:52;;:11;;;;;;;;;;;:19;;;3472:17;3452:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;3444:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;3589:20;3632:3;3612:17;:23;;;;:::i;:::-;3589:46;;3671:1;3646:21;;:26;;;;;;;:::i;:::-;;;;;;;;3681:35;3691:10;3703:12;3681:9;:35::i;:::-;2987:738;;2928:797;:::o;9044:429::-;9117:13;9147:16;9155:7;9147;:16::i;:::-;9139:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;9273:29;9305:21;9273:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9372:1;9346:15;9340:29;:33;:127;;9454:13;9340:127;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9407:15;9424:18;:7;:16;:18::i;:::-;9390:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9340:127;9333:134;;;9044:429;;;:::o;5900:324::-;1230:12:13;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1047:4:3::1;5975:13;:11;:13::i;:::-;:23;5967:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6043:9;6039:180;6062:2;;:9;;6058:1;:13;6039:180;;;6087:15;6140:1;6120:17;;1134:3;6105:32;;;;:::i;:::-;:36;;;;:::i;:::-;6087:54;;6174:1;6152:18;;:23;;;;;;;:::i;:::-;;;;;;;;6186:25;6196:2;;6199:1;6196:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6203:7;6186:9;:25::i;:::-;6078:141;6073:3;;;;;:::i;:::-;;;;6039:180;;;;5900:324:::0;;:::o;1165:44::-;1206:3;1165:44;:::o;1561:32::-;;;;:::o;8938:100::-;8991:13;9020:12;9013:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8938:100;:::o;4644:164:5:-;4741:4;4765:18;:25;4784:5;4765:25;;;;;;;;;;;;;;;:35;4791:8;4765:35;;;;;;;;;;;;;;;;;;;;;;;;;4758:42;;4644:164;;;;:::o;3741:905:3:-;3843:14;;;;;;;;;;;3835:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3899:14;;;;;;;;;;;3891:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;1047:4;3996:13;:11;:13::i;:::-;:23;3988:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4083:1;4066:14;:18;4058:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;1206:3;4135:14;:32;;4127:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;1047:4;4235:14;4219:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:41;;4211:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;4371:9;4353:14;4341:9;;:26;;;;:::i;:::-;:39;;4333:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;4446:9;4441:192;4465:14;4461:1;:18;4441:192;;;4497:15;4550:1;4530:17;;1134:3;4515:32;;;;:::i;:::-;:36;;;;:::i;:::-;4497:54;;4583:1;4562:17;;:22;;;;;;;:::i;:::-;;;;;;;;4595:30;4605:10;4617:7;4595:9;:30::i;:::-;4486:147;4481:3;;;;;:::i;:::-;;;;4441:192;;;;3741:905;:::o;1899:192:13:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;1481:305:5:-;1583:4;1635:25;1620:40;;;:11;:40;;;;:105;;;;1692:33;1677:48;;;:11;:48;;;;1620:105;:158;;;;1742:36;1766:11;1742:23;:36::i;:::-;1620:158;1600:178;;1481:305;;;:::o;7379:127::-;7444:4;7496:1;7468:30;;:7;:16;7476:7;7468:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7461:37;;7379:127;;;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;11361:174:5:-;11463:2;11436:15;:24;11452:7;11436:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11519:7;11515:2;11481:46;;11490:23;11505:7;11490:14;:23::i;:::-;11481:46;;;;;;;;;;;;11361:174;;:::o;8363:110::-;8439:26;8449:2;8453:7;8439:26;;;;;;;;;;;;:9;:26::i;:::-;8363:110;;:::o;7673:348::-;7766:4;7791:16;7799:7;7791;:16::i;:::-;7783:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7867:13;7883:23;7898:7;7883:14;:23::i;:::-;7867:39;;7936:5;7925:16;;:7;:16;;;:51;;;;7969:7;7945:31;;:20;7957:7;7945:11;:20::i;:::-;:31;;;7925:51;:87;;;;7980:32;7997:5;8004:7;7980:16;:32::i;:::-;7925:87;7917:96;;;7673:348;;;;:::o;10665:578::-;10824:4;10797:31;;:23;10812:7;10797:14;:23::i;:::-;:31;;;10789:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10907:1;10893:16;;:2;:16;;;;10885:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10963:39;10984:4;10990:2;10994:7;10963:20;:39::i;:::-;11067:29;11084:1;11088:7;11067:8;:29::i;:::-;11128:1;11109:9;:15;11119:4;11109:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11157:1;11140:9;:13;11150:2;11140:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11188:2;11169:7;:16;11177:7;11169:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11227:7;11223:2;11208:27;;11217:4;11208:27;;;;;;;;;;;;10665:578;;;:::o;2099:173:13:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;6751:315:5:-;6908:28;6918:4;6924:2;6928:7;6908:9;:28::i;:::-;6955:48;6978:4;6984:2;6988:7;6997:5;6955:22;:48::i;:::-;6947:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6751:315;;;;:::o;288:723:14:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;787:157:4:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;8700:321:5:-;8830:18;8836:2;8840:7;8830:5;:18::i;:::-;8881:54;8912:1;8916:2;8920:7;8929:5;8881:22;:54::i;:::-;8859:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;8700:321;;;:::o;2613:589:6:-;2757:45;2784:4;2790:2;2794:7;2757:26;:45::i;:::-;2835:1;2819:18;;:4;:18;;;2815:187;;;2854:40;2886:7;2854:31;:40::i;:::-;2815:187;;;2924:2;2916:10;;:4;:10;;;2912:90;;2943:47;2976:4;2982:7;2943:32;:47::i;:::-;2912:90;2815:187;3030:1;3016:16;;:2;:16;;;3012:183;;;3049:45;3086:7;3049:36;:45::i;:::-;3012:183;;;3122:4;3116:10;;:2;:10;;;3112:83;;3143:40;3171:2;3175:7;3143:27;:40::i;:::-;3112:83;3012:183;2613:589;;;:::o;12100:803:5:-;12255:4;12276:15;:2;:13;;;:15::i;:::-;12272:624;;;12328:2;12312:36;;;12349:12;:10;:12::i;:::-;12363:4;12369:7;12378:5;12312:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12308:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12575:1;12558:6;:13;:18;12554:272;;;12601:60;;;;;;;;;;:::i;:::-;;;;;;;;12554:272;12776:6;12770:13;12761:6;12757:2;12753:15;12746:38;12308:533;12445:45;;;12435:55;;;:6;:55;;;;12428:62;;;;;12272:624;12880:4;12873:11;;12100:803;;;;;;;:::o;9357:382::-;9451:1;9437:16;;:2;:16;;;;9429:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9510:16;9518:7;9510;:16::i;:::-;9509:17;9501:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9572:45;9601:1;9605:2;9609:7;9572:20;:45::i;:::-;9647:1;9630:9;:13;9640:2;9630:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9678:2;9659:7;:16;9667:7;9659:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9723:7;9719:2;9698:33;;9715:1;9698:33;;;;;;;;;;;;9357:382;;:::o;13475:126::-;;;;:::o;3925:164:6:-;4029:10;:17;;;;4002:15;:24;4018:7;4002:24;;;;;;;;;;;:44;;;;4057:10;4073:7;4057:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3925:164;:::o;4716:988::-;4982:22;5032:1;5007:22;5024:4;5007:16;:22::i;:::-;:26;;;;:::i;:::-;4982:51;;5044:18;5065:17;:26;5083:7;5065:26;;;;;;;;;;;;5044:47;;5212:14;5198:10;:28;5194:328;;5243:19;5265:12;:18;5278:4;5265:18;;;;;;;;;;;;;;;:34;5284:14;5265:34;;;;;;;;;;;;5243:56;;5349:11;5316:12;:18;5329:4;5316:18;;;;;;;;;;;;;;;:30;5335:10;5316:30;;;;;;;;;;;:44;;;;5466:10;5433:17;:30;5451:11;5433:30;;;;;;;;;;;:43;;;;5228:294;5194:328;5618:17;:26;5636:7;5618:26;;;;;;;;;;;5611:33;;;5662:12;:18;5675:4;5662:18;;;;;;;;;;;;;;;:34;5681:14;5662:34;;;;;;;;;;;5655:41;;;4797:907;;4716:988;;:::o;5999:1079::-;6252:22;6297:1;6277:10;:17;;;;:21;;;;:::i;:::-;6252:46;;6309:18;6330:15;:24;6346:7;6330:24;;;;;;;;;;;;6309:45;;6681:19;6703:10;6714:14;6703:26;;;;;;;;:::i;:::-;;;;;;;;;;6681:48;;6767:11;6742:10;6753;6742:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6878:10;6847:15;:28;6863:11;6847:28;;;;;;;;;;;:41;;;;7019:15;:24;7035:7;7019:24;;;;;;;;;;;7012:31;;;7054:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6070:1008;;;5999:1079;:::o;3503:221::-;3588:14;3605:20;3622:2;3605:16;:20::i;:::-;3588:37;;3663:7;3636:12;:16;3649:2;3636:16;;;;;;;;;;;;;;;:24;3653:6;3636:24;;;;;;;;;;;:34;;;;3710:6;3681:17;:26;3699:7;3681:26;;;;;;;;;;;:35;;;;3577:147;3503:221;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:15:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:116::-;5985:21;6000:5;5985:21;:::i;:::-;5978:5;5975:32;5965:60;;6021:1;6018;6011:12;5965:60;5915:116;:::o;6037:133::-;6080:5;6118:6;6105:20;6096:29;;6134:30;6158:5;6134:30;:::i;:::-;6037:133;;;;:::o;6176:323::-;6232:6;6281:2;6269:9;6260:7;6256:23;6252:32;6249:119;;;6287:79;;:::i;:::-;6249:119;6407:1;6432:50;6474:7;6465:6;6454:9;6450:22;6432:50;:::i;:::-;6422:60;;6378:114;6176:323;;;;:::o;6505:117::-;6614:1;6611;6604:12;6628:117;6737:1;6734;6727:12;6751:117;6860:1;6857;6850:12;6888:553;6946:8;6956:6;7006:3;6999:4;6991:6;6987:17;6983:27;6973:122;;7014:79;;:::i;:::-;6973:122;7127:6;7114:20;7104:30;;7157:18;7149:6;7146:30;7143:117;;;7179:79;;:::i;:::-;7143:117;7293:4;7285:6;7281:17;7269:29;;7347:3;7339:4;7331:6;7327:17;7317:8;7313:32;7310:41;7307:128;;;7354:79;;:::i;:::-;7307:128;6888:553;;;;;:::o;7447:529::-;7518:6;7526;7575:2;7563:9;7554:7;7550:23;7546:32;7543:119;;;7581:79;;:::i;:::-;7543:119;7729:1;7718:9;7714:17;7701:31;7759:18;7751:6;7748:30;7745:117;;;7781:79;;:::i;:::-;7745:117;7894:65;7951:7;7942:6;7931:9;7927:22;7894:65;:::i;:::-;7876:83;;;;7672:297;7447:529;;;;;:::o;7982:329::-;8041:6;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;7982:329;;;;:::o;8317:468::-;8382:6;8390;8439:2;8427:9;8418:7;8414:23;8410:32;8407:119;;;8445:79;;:::i;:::-;8407:119;8565:1;8590:53;8635:7;8626:6;8615:9;8611:22;8590:53;:::i;:::-;8580:63;;8536:117;8692:2;8718:50;8760:7;8751:6;8740:9;8736:22;8718:50;:::i;:::-;8708:60;;8663:115;8317:468;;;;;:::o;8791:117::-;8900:1;8897;8890:12;8914:180;8962:77;8959:1;8952:88;9059:4;9056:1;9049:15;9083:4;9080:1;9073:15;9100:281;9183:27;9205:4;9183:27;:::i;:::-;9175:6;9171:40;9313:6;9301:10;9298:22;9277:18;9265:10;9262:34;9259:62;9256:88;;;9324:18;;:::i;:::-;9256:88;9364:10;9360:2;9353:22;9143:238;9100:281;;:::o;9387:129::-;9421:6;9448:20;;:::i;:::-;9438:30;;9477:33;9505:4;9497:6;9477:33;:::i;:::-;9387:129;;;:::o;9522:307::-;9583:4;9673:18;9665:6;9662:30;9659:56;;;9695:18;;:::i;:::-;9659:56;9733:29;9755:6;9733:29;:::i;:::-;9725:37;;9817:4;9811;9807:15;9799:23;;9522:307;;;:::o;9835:154::-;9919:6;9914:3;9909;9896:30;9981:1;9972:6;9967:3;9963:16;9956:27;9835:154;;;:::o;9995:410::-;10072:5;10097:65;10113:48;10154:6;10113:48;:::i;:::-;10097:65;:::i;:::-;10088:74;;10185:6;10178:5;10171:21;10223:4;10216:5;10212:16;10261:3;10252:6;10247:3;10243:16;10240:25;10237:112;;;10268:79;;:::i;:::-;10237:112;10358:41;10392:6;10387:3;10382;10358:41;:::i;:::-;10078:327;9995:410;;;;;:::o;10424:338::-;10479:5;10528:3;10521:4;10513:6;10509:17;10505:27;10495:122;;10536:79;;:::i;:::-;10495:122;10653:6;10640:20;10678:78;10752:3;10744:6;10737:4;10729:6;10725:17;10678:78;:::i;:::-;10669:87;;10485:277;10424:338;;;;:::o;10768:943::-;10863:6;10871;10879;10887;10936:3;10924:9;10915:7;10911:23;10907:33;10904:120;;;10943:79;;:::i;:::-;10904:120;11063:1;11088:53;11133:7;11124:6;11113:9;11109:22;11088:53;:::i;:::-;11078:63;;11034:117;11190:2;11216:53;11261:7;11252:6;11241:9;11237:22;11216:53;:::i;:::-;11206:63;;11161:118;11318:2;11344:53;11389:7;11380:6;11369:9;11365:22;11344:53;:::i;:::-;11334:63;;11289:118;11474:2;11463:9;11459:18;11446:32;11505:18;11497:6;11494:30;11491:117;;;11527:79;;:::i;:::-;11491:117;11632:62;11686:7;11677:6;11666:9;11662:22;11632:62;:::i;:::-;11622:72;;11417:287;10768:943;;;;;;;:::o;11734:568::-;11807:8;11817:6;11867:3;11860:4;11852:6;11848:17;11844:27;11834:122;;11875:79;;:::i;:::-;11834:122;11988:6;11975:20;11965:30;;12018:18;12010:6;12007:30;12004:117;;;12040:79;;:::i;:::-;12004:117;12154:4;12146:6;12142:17;12130:29;;12208:3;12200:4;12192:6;12188:17;12178:8;12174:32;12171:41;12168:128;;;12215:79;;:::i;:::-;12168:128;11734:568;;;;;:::o;12308:559::-;12394:6;12402;12451:2;12439:9;12430:7;12426:23;12422:32;12419:119;;;12457:79;;:::i;:::-;12419:119;12605:1;12594:9;12590:17;12577:31;12635:18;12627:6;12624:30;12621:117;;;12657:79;;:::i;:::-;12621:117;12770:80;12842:7;12833:6;12822:9;12818:22;12770:80;:::i;:::-;12752:98;;;;12548:312;12308:559;;;;;:::o;12873:474::-;12941:6;12949;12998:2;12986:9;12977:7;12973:23;12969:32;12966:119;;;13004:79;;:::i;:::-;12966:119;13124:1;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13095:117;13251:2;13277:53;13322:7;13313:6;13302:9;13298:22;13277:53;:::i;:::-;13267:63;;13222:118;12873:474;;;;;:::o;13353:180::-;13401:77;13398:1;13391:88;13498:4;13495:1;13488:15;13522:4;13519:1;13512:15;13539:320;13583:6;13620:1;13614:4;13610:12;13600:22;;13667:1;13661:4;13657:12;13688:18;13678:81;;13744:4;13736:6;13732:17;13722:27;;13678:81;13806:2;13798:6;13795:14;13775:18;13772:38;13769:84;;;13825:18;;:::i;:::-;13769:84;13590:269;13539:320;;;:::o;13865:231::-;14005:34;14001:1;13993:6;13989:14;13982:58;14074:14;14069:2;14061:6;14057:15;14050:39;13865:231;:::o;14102:366::-;14244:3;14265:67;14329:2;14324:3;14265:67;:::i;:::-;14258:74;;14341:93;14430:3;14341:93;:::i;:::-;14459:2;14454:3;14450:12;14443:19;;14102:366;;;:::o;14474:419::-;14640:4;14678:2;14667:9;14663:18;14655:26;;14727:9;14721:4;14717:20;14713:1;14702:9;14698:17;14691:47;14755:131;14881:4;14755:131;:::i;:::-;14747:139;;14474:419;;;:::o;14899:220::-;15039:34;15035:1;15027:6;15023:14;15016:58;15108:3;15103:2;15095:6;15091:15;15084:28;14899:220;:::o;15125:366::-;15267:3;15288:67;15352:2;15347:3;15288:67;:::i;:::-;15281:74;;15364:93;15453:3;15364:93;:::i;:::-;15482:2;15477:3;15473:12;15466:19;;15125:366;;;:::o;15497:419::-;15663:4;15701:2;15690:9;15686:18;15678:26;;15750:9;15744:4;15740:20;15736:1;15725:9;15721:17;15714:47;15778:131;15904:4;15778:131;:::i;:::-;15770:139;;15497:419;;;:::o;15922:243::-;16062:34;16058:1;16050:6;16046:14;16039:58;16131:26;16126:2;16118:6;16114:15;16107:51;15922:243;:::o;16171:366::-;16313:3;16334:67;16398:2;16393:3;16334:67;:::i;:::-;16327:74;;16410:93;16499:3;16410:93;:::i;:::-;16528:2;16523:3;16519:12;16512:19;;16171:366;;;:::o;16543:419::-;16709:4;16747:2;16736:9;16732:18;16724:26;;16796:9;16790:4;16786:20;16782:1;16771:9;16767:17;16760:47;16824:131;16950:4;16824:131;:::i;:::-;16816:139;;16543:419;;;:::o;16968:143::-;17025:5;17056:6;17050:13;17041:22;;17072:33;17099:5;17072:33;:::i;:::-;16968:143;;;;:::o;17117:351::-;17187:6;17236:2;17224:9;17215:7;17211:23;17207:32;17204:119;;;17242:79;;:::i;:::-;17204:119;17362:1;17387:64;17443:7;17434:6;17423:9;17419:22;17387:64;:::i;:::-;17377:74;;17333:128;17117:351;;;;:::o;17474:180::-;17522:77;17519:1;17512:88;17619:4;17616:1;17609:15;17643:4;17640:1;17633:15;17660:305;17700:3;17719:20;17737:1;17719:20;:::i;:::-;17714:25;;17753:20;17771:1;17753:20;:::i;:::-;17748:25;;17907:1;17839:66;17835:74;17832:1;17829:81;17826:107;;;17913:18;;:::i;:::-;17826:107;17957:1;17954;17950:9;17943:16;;17660:305;;;;:::o;17971:172::-;18111:24;18107:1;18099:6;18095:14;18088:48;17971:172;:::o;18149:366::-;18291:3;18312:67;18376:2;18371:3;18312:67;:::i;:::-;18305:74;;18388:93;18477:3;18388:93;:::i;:::-;18506:2;18501:3;18497:12;18490:19;;18149:366;;;:::o;18521:419::-;18687:4;18725:2;18714:9;18710:18;18702:26;;18774:9;18768:4;18764:20;18760:1;18749:9;18745:17;18738:47;18802:131;18928:4;18802:131;:::i;:::-;18794:139;;18521:419;;;:::o;18946:224::-;19086:34;19082:1;19074:6;19070:14;19063:58;19155:7;19150:2;19142:6;19138:15;19131:32;18946:224;:::o;19176:366::-;19318:3;19339:67;19403:2;19398:3;19339:67;:::i;:::-;19332:74;;19415:93;19504:3;19415:93;:::i;:::-;19533:2;19528:3;19524:12;19517:19;;19176:366;;;:::o;19548:419::-;19714:4;19752:2;19741:9;19737:18;19729:26;;19801:9;19795:4;19791:20;19787:1;19776:9;19772:17;19765:47;19829:131;19955:4;19829:131;:::i;:::-;19821:139;;19548:419;;;:::o;19973:177::-;20113:29;20109:1;20101:6;20097:14;20090:53;19973:177;:::o;20156:366::-;20298:3;20319:67;20383:2;20378:3;20319:67;:::i;:::-;20312:74;;20395:93;20484:3;20395:93;:::i;:::-;20513:2;20508:3;20504:12;20497:19;;20156:366;;;:::o;20528:419::-;20694:4;20732:2;20721:9;20717:18;20709:26;;20781:9;20775:4;20771:20;20767:1;20756:9;20752:17;20745:47;20809:131;20935:4;20809:131;:::i;:::-;20801:139;;20528:419;;;:::o;20953:181::-;21093:33;21089:1;21081:6;21077:14;21070:57;20953:181;:::o;21140:366::-;21282:3;21303:67;21367:2;21362:3;21303:67;:::i;:::-;21296:74;;21379:93;21468:3;21379:93;:::i;:::-;21497:2;21492:3;21488:12;21481:19;;21140:366;;;:::o;21512:419::-;21678:4;21716:2;21705:9;21701:18;21693:26;;21765:9;21759:4;21755:20;21751:1;21740:9;21736:17;21729:47;21793:131;21919:4;21793:131;:::i;:::-;21785:139;;21512:419;;;:::o;21937:182::-;22077:34;22073:1;22065:6;22061:14;22054:58;21937:182;:::o;22125:366::-;22267:3;22288:67;22352:2;22347:3;22288:67;:::i;:::-;22281:74;;22364:93;22453:3;22364:93;:::i;:::-;22482:2;22477:3;22473:12;22466:19;;22125:366;;;:::o;22497:419::-;22663:4;22701:2;22690:9;22686:18;22678:26;;22750:9;22744:4;22740:20;22736:1;22725:9;22721:17;22714:47;22778:131;22904:4;22778:131;:::i;:::-;22770:139;;22497:419;;;:::o;22922:182::-;23062:34;23058:1;23050:6;23046:14;23039:58;22922:182;:::o;23110:366::-;23252:3;23273:67;23337:2;23332:3;23273:67;:::i;:::-;23266:74;;23349:93;23438:3;23349:93;:::i;:::-;23467:2;23462:3;23458:12;23451:19;;23110:366;;;:::o;23482:419::-;23648:4;23686:2;23675:9;23671:18;23663:26;;23735:9;23729:4;23725:20;23721:1;23710:9;23706:17;23699:47;23763:131;23889:4;23763:131;:::i;:::-;23755:139;;23482:419;;;:::o;23907:348::-;23947:7;23970:20;23988:1;23970:20;:::i;:::-;23965:25;;24004:20;24022:1;24004:20;:::i;:::-;23999:25;;24192:1;24124:66;24120:74;24117:1;24114:81;24109:1;24102:9;24095:17;24091:105;24088:131;;;24199:18;;:::i;:::-;24088:131;24247:1;24244;24240:9;24229:20;;23907:348;;;;:::o;24261:178::-;24401:30;24397:1;24389:6;24385:14;24378:54;24261:178;:::o;24445:366::-;24587:3;24608:67;24672:2;24667:3;24608:67;:::i;:::-;24601:74;;24684:93;24773:3;24684:93;:::i;:::-;24802:2;24797:3;24793:12;24786:19;;24445:366;;;:::o;24817:419::-;24983:4;25021:2;25010:9;25006:18;24998:26;;25070:9;25064:4;25060:20;25056:1;25045:9;25041:17;25034:47;25098:131;25224:4;25098:131;:::i;:::-;25090:139;;24817:419;;;:::o;25242:233::-;25281:3;25304:24;25322:5;25304:24;:::i;:::-;25295:33;;25350:66;25343:5;25340:77;25337:103;;;25420:18;;:::i;:::-;25337:103;25467:1;25460:5;25456:13;25449:20;;25242:233;;;:::o;25481:236::-;25621:34;25617:1;25609:6;25605:14;25598:58;25690:19;25685:2;25677:6;25673:15;25666:44;25481:236;:::o;25723:366::-;25865:3;25886:67;25950:2;25945:3;25886:67;:::i;:::-;25879:74;;25962:93;26051:3;25962:93;:::i;:::-;26080:2;26075:3;26071:12;26064:19;;25723:366;;;:::o;26095:419::-;26261:4;26299:2;26288:9;26284:18;26276:26;;26348:9;26342:4;26338:20;26334:1;26323:9;26319:17;26312:47;26376:131;26502:4;26376:131;:::i;:::-;26368:139;;26095:419;;;:::o;26520:230::-;26660:34;26656:1;26648:6;26644:14;26637:58;26729:13;26724:2;26716:6;26712:15;26705:38;26520:230;:::o;26756:366::-;26898:3;26919:67;26983:2;26978:3;26919:67;:::i;:::-;26912:74;;26995:93;27084:3;26995:93;:::i;:::-;27113:2;27108:3;27104:12;27097:19;;26756:366;;;:::o;27128:419::-;27294:4;27332:2;27321:9;27317:18;27309:26;;27381:9;27375:4;27371:20;27367:1;27356:9;27352:17;27345:47;27409:131;27535:4;27409:131;:::i;:::-;27401:139;;27128:419;;;:::o;27553:182::-;27693:34;27689:1;27681:6;27677:14;27670:58;27553:182;:::o;27741:366::-;27883:3;27904:67;27968:2;27963:3;27904:67;:::i;:::-;27897:74;;27980:93;28069:3;27980:93;:::i;:::-;28098:2;28093:3;28089:12;28082:19;;27741:366;;;:::o;28113:419::-;28279:4;28317:2;28306:9;28302:18;28294:26;;28366:9;28360:4;28356:20;28352:1;28341:9;28337:17;28330:47;28394:131;28520:4;28394:131;:::i;:::-;28386:139;;28113:419;;;:::o;28538:180::-;28586:77;28583:1;28576:88;28683:4;28680:1;28673:15;28707:4;28704:1;28697:15;28724:185;28764:1;28781:20;28799:1;28781:20;:::i;:::-;28776:25;;28815:20;28833:1;28815:20;:::i;:::-;28810:25;;28854:1;28844:35;;28859:18;;:::i;:::-;28844:35;28901:1;28898;28894:9;28889:14;;28724:185;;;;:::o;28915:231::-;29055:34;29051:1;29043:6;29039:14;29032:58;29124:14;29119:2;29111:6;29107:15;29100:39;28915:231;:::o;29152:366::-;29294:3;29315:67;29379:2;29374:3;29315:67;:::i;:::-;29308:74;;29391:93;29480:3;29391:93;:::i;:::-;29509:2;29504:3;29500:12;29493:19;;29152:366;;;:::o;29524:419::-;29690:4;29728:2;29717:9;29713:18;29705:26;;29777:9;29771:4;29767:20;29763:1;29752:9;29748:17;29741:47;29805:131;29931:4;29805:131;:::i;:::-;29797:139;;29524:419;;;:::o;29949:180::-;29997:77;29994:1;29987:88;30094:4;30091:1;30084:15;30118:4;30115:1;30108:15;30135:228;30275:34;30271:1;30263:6;30259:14;30252:58;30344:11;30339:2;30331:6;30327:15;30320:36;30135:228;:::o;30369:366::-;30511:3;30532:67;30596:2;30591:3;30532:67;:::i;:::-;30525:74;;30608:93;30697:3;30608:93;:::i;:::-;30726:2;30721:3;30717:12;30710:19;;30369:366;;;:::o;30741:419::-;30907:4;30945:2;30934:9;30930:18;30922:26;;30994:9;30988:4;30984:20;30980:1;30969:9;30965:17;30958:47;31022:131;31148:4;31022:131;:::i;:::-;31014:139;;30741:419;;;:::o;31166:176::-;31306:28;31302:1;31294:6;31290:14;31283:52;31166:176;:::o;31348:366::-;31490:3;31511:67;31575:2;31570:3;31511:67;:::i;:::-;31504:74;;31587:93;31676:3;31587:93;:::i;:::-;31705:2;31700:3;31696:12;31689:19;;31348:366;;;:::o;31720:419::-;31886:4;31924:2;31913:9;31909:18;31901:26;;31973:9;31967:4;31963:20;31959:1;31948:9;31944:17;31937:47;32001:131;32127:4;32001:131;:::i;:::-;31993:139;;31720:419;;;:::o;32145:143::-;32202:5;32233:6;32227:13;32218:22;;32249:33;32276:5;32249:33;:::i;:::-;32145:143;;;;:::o;32294:351::-;32364:6;32413:2;32401:9;32392:7;32388:23;32384:32;32381:119;;;32419:79;;:::i;:::-;32381:119;32539:1;32564:64;32620:7;32611:6;32600:9;32596:22;32564:64;:::i;:::-;32554:74;;32510:128;32294:351;;;;:::o;32651:245::-;32791:34;32787:1;32779:6;32775:14;32768:58;32860:28;32855:2;32847:6;32843:15;32836:53;32651:245;:::o;32902:366::-;33044:3;33065:67;33129:2;33124:3;33065:67;:::i;:::-;33058:74;;33141:93;33230:3;33141:93;:::i;:::-;33259:2;33254:3;33250:12;33243:19;;32902:366;;;:::o;33274:419::-;33440:4;33478:2;33467:9;33463:18;33455:26;;33527:9;33521:4;33517:20;33513:1;33502:9;33498:17;33491:47;33555:131;33681:4;33555:131;:::i;:::-;33547:139;;33274:419;;;:::o;33699:229::-;33839:34;33835:1;33827:6;33823:14;33816:58;33908:12;33903:2;33895:6;33891:15;33884:37;33699:229;:::o;33934:366::-;34076:3;34097:67;34161:2;34156:3;34097:67;:::i;:::-;34090:74;;34173:93;34262:3;34173:93;:::i;:::-;34291:2;34286:3;34282:12;34275:19;;33934:366;;;:::o;34306:419::-;34472:4;34510:2;34499:9;34495:18;34487:26;;34559:9;34553:4;34549:20;34545:1;34534:9;34530:17;34523:47;34587:131;34713:4;34587:131;:::i;:::-;34579:139;;34306:419;;;:::o;34731:175::-;34871:27;34867:1;34859:6;34855:14;34848:51;34731:175;:::o;34912:366::-;35054:3;35075:67;35139:2;35134:3;35075:67;:::i;:::-;35068:74;;35151:93;35240:3;35151:93;:::i;:::-;35269:2;35264:3;35260:12;35253:19;;34912:366;;;:::o;35284:419::-;35450:4;35488:2;35477:9;35473:18;35465:26;;35537:9;35531:4;35527:20;35523:1;35512:9;35508:17;35501:47;35565:131;35691:4;35565:131;:::i;:::-;35557:139;;35284:419;;;:::o;35709:170::-;35849:22;35845:1;35837:6;35833:14;35826:46;35709:170;:::o;35885:366::-;36027:3;36048:67;36112:2;36107:3;36048:67;:::i;:::-;36041:74;;36124:93;36213:3;36124:93;:::i;:::-;36242:2;36237:3;36233:12;36226:19;;35885:366;;;:::o;36257:419::-;36423:4;36461:2;36450:9;36446:18;36438:26;;36510:9;36504:4;36500:20;36496:1;36485:9;36481:17;36474:47;36538:131;36664:4;36538:131;:::i;:::-;36530:139;;36257:419;;;:::o;36682:148::-;36784:11;36821:3;36806:18;;36682:148;;;;:::o;36836:377::-;36942:3;36970:39;37003:5;36970:39;:::i;:::-;37025:89;37107:6;37102:3;37025:89;:::i;:::-;37018:96;;37123:52;37168:6;37163:3;37156:4;37149:5;37145:16;37123:52;:::i;:::-;37200:6;37195:3;37191:16;37184:23;;36946:267;36836:377;;;;:::o;37219:435::-;37399:3;37421:95;37512:3;37503:6;37421:95;:::i;:::-;37414:102;;37533:95;37624:3;37615:6;37533:95;:::i;:::-;37526:102;;37645:3;37638:10;;37219:435;;;;;:::o;37660:225::-;37800:34;37796:1;37788:6;37784:14;37777:58;37869:8;37864:2;37856:6;37852:15;37845:33;37660:225;:::o;37891:366::-;38033:3;38054:67;38118:2;38113:3;38054:67;:::i;:::-;38047:74;;38130:93;38219:3;38130:93;:::i;:::-;38248:2;38243:3;38239:12;38232:19;;37891:366;;;:::o;38263:419::-;38429:4;38467:2;38456:9;38452:18;38444:26;;38516:9;38510:4;38506:20;38502:1;38491:9;38487:17;38480:47;38544:131;38670:4;38544:131;:::i;:::-;38536:139;;38263:419;;;:::o;38688:231::-;38828:34;38824:1;38816:6;38812:14;38805:58;38897:14;38892:2;38884:6;38880:15;38873:39;38688:231;:::o;38925:366::-;39067:3;39088:67;39152:2;39147:3;39088:67;:::i;:::-;39081:74;;39164:93;39253:3;39164:93;:::i;:::-;39282:2;39277:3;39273:12;39266:19;;38925:366;;;:::o;39297:419::-;39463:4;39501:2;39490:9;39486:18;39478:26;;39550:9;39544:4;39540:20;39536:1;39525:9;39521:17;39514:47;39578:131;39704:4;39578:131;:::i;:::-;39570:139;;39297:419;;;:::o;39722:228::-;39862:34;39858:1;39850:6;39846:14;39839:58;39931:11;39926:2;39918:6;39914:15;39907:36;39722:228;:::o;39956:366::-;40098:3;40119:67;40183:2;40178:3;40119:67;:::i;:::-;40112:74;;40195:93;40284:3;40195:93;:::i;:::-;40313:2;40308:3;40304:12;40297:19;;39956:366;;;:::o;40328:419::-;40494:4;40532:2;40521:9;40517:18;40509:26;;40581:9;40575:4;40571:20;40567:1;40556:9;40552:17;40545:47;40609:131;40735:4;40609:131;:::i;:::-;40601:139;;40328:419;;;:::o;40753:223::-;40893:34;40889:1;40881:6;40877:14;40870:58;40962:6;40957:2;40949:6;40945:15;40938:31;40753:223;:::o;40982:366::-;41124:3;41145:67;41209:2;41204:3;41145:67;:::i;:::-;41138:74;;41221:93;41310:3;41221:93;:::i;:::-;41339:2;41334:3;41330:12;41323:19;;40982:366;;;:::o;41354:419::-;41520:4;41558:2;41547:9;41543:18;41535:26;;41607:9;41601:4;41597:20;41593:1;41582:9;41578:17;41571:47;41635:131;41761:4;41635:131;:::i;:::-;41627:139;;41354:419;;;:::o;41779:191::-;41819:4;41839:20;41857:1;41839:20;:::i;:::-;41834:25;;41873:20;41891:1;41873:20;:::i;:::-;41868:25;;41912:1;41909;41906:8;41903:34;;;41917:18;;:::i;:::-;41903:34;41962:1;41959;41955:9;41947:17;;41779:191;;;;:::o;41976:237::-;42116:34;42112:1;42104:6;42100:14;42093:58;42185:20;42180:2;42172:6;42168:15;42161:45;41976:237;:::o;42219:366::-;42361:3;42382:67;42446:2;42441:3;42382:67;:::i;:::-;42375:74;;42458:93;42547:3;42458:93;:::i;:::-;42576:2;42571:3;42567:12;42560:19;;42219:366;;;:::o;42591:419::-;42757:4;42795:2;42784:9;42780:18;42772:26;;42844:9;42838:4;42834:20;42830:1;42819:9;42815:17;42808:47;42872:131;42998:4;42872:131;:::i;:::-;42864:139;;42591:419;;;:::o;43016:176::-;43048:1;43065:20;43083:1;43065:20;:::i;:::-;43060:25;;43099:20;43117:1;43099:20;:::i;:::-;43094:25;;43138:1;43128:35;;43143:18;;:::i;:::-;43128:35;43184:1;43181;43177:9;43172:14;;43016:176;;;;:::o;43198:98::-;43249:6;43283:5;43277:12;43267:22;;43198:98;;;:::o;43302:168::-;43385:11;43419:6;43414:3;43407:19;43459:4;43454:3;43450:14;43435:29;;43302:168;;;;:::o;43476:360::-;43562:3;43590:38;43622:5;43590:38;:::i;:::-;43644:70;43707:6;43702:3;43644:70;:::i;:::-;43637:77;;43723:52;43768:6;43763:3;43756:4;43749:5;43745:16;43723:52;:::i;:::-;43800:29;43822:6;43800:29;:::i;:::-;43795:3;43791:39;43784:46;;43566:270;43476:360;;;;:::o;43842:640::-;44037:4;44075:3;44064:9;44060:19;44052:27;;44089:71;44157:1;44146:9;44142:17;44133:6;44089:71;:::i;:::-;44170:72;44238:2;44227:9;44223:18;44214:6;44170:72;:::i;:::-;44252;44320:2;44309:9;44305:18;44296:6;44252:72;:::i;:::-;44371:9;44365:4;44361:20;44356:2;44345:9;44341:18;44334:48;44399:76;44470:4;44461:6;44399:76;:::i;:::-;44391:84;;43842:640;;;;;;;:::o;44488:141::-;44544:5;44575:6;44569:13;44560:22;;44591:32;44617:5;44591:32;:::i;:::-;44488:141;;;;:::o;44635:349::-;44704:6;44753:2;44741:9;44732:7;44728:23;44724:32;44721:119;;;44759:79;;:::i;:::-;44721:119;44879:1;44904:63;44959:7;44950:6;44939:9;44935:22;44904:63;:::i;:::-;44894:73;;44850:127;44635:349;;;;:::o;44990:182::-;45130:34;45126:1;45118:6;45114:14;45107:58;44990:182;:::o;45178:366::-;45320:3;45341:67;45405:2;45400:3;45341:67;:::i;:::-;45334:74;;45417:93;45506:3;45417:93;:::i;:::-;45535:2;45530:3;45526:12;45519:19;;45178:366;;;:::o;45550:419::-;45716:4;45754:2;45743:9;45739:18;45731:26;;45803:9;45797:4;45793:20;45789:1;45778:9;45774:17;45767:47;45831:131;45957:4;45831:131;:::i;:::-;45823:139;;45550:419;;;:::o;45975:178::-;46115:30;46111:1;46103:6;46099:14;46092:54;45975:178;:::o;46159:366::-;46301:3;46322:67;46386:2;46381:3;46322:67;:::i;:::-;46315:74;;46398:93;46487:3;46398:93;:::i;:::-;46516:2;46511:3;46507:12;46500:19;;46159:366;;;:::o;46531:419::-;46697:4;46735:2;46724:9;46720:18;46712:26;;46784:9;46778:4;46774:20;46770:1;46759:9;46755:17;46748:47;46812:131;46938:4;46812:131;:::i;:::-;46804:139;;46531:419;;;:::o;46956:180::-;47004:77;47001:1;46994:88;47101:4;47098:1;47091:15;47125:4;47122:1;47115:15

Swarm Source

ipfs://53be4146b3d58f28d6f28d45d14dd87fe4f24e47dab5db64a0c8bbeb1e78ba3a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.