ETH Price: $2,678.34 (+1.63%)
Gas: 1 Gwei

Token

NFT Sprites (NFTS)
 

Overview

Max Total Supply

0 NFTS

Holders

20

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
boooo.eth
Balance
1 NFTS
0x48e4dd3e356823070d9d1b7d162d072ae9efe0cb
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:
NFTSprites

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-27
*/

pragma solidity 0.8.0;

/**
 * @dev ERC-721 interface for accepting safe transfers.
 * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md.
 */
interface ERC721TokenReceiver
{

  /**
   * @dev Handle the receipt of a NFT. The ERC721 smart contract calls this function on the
   * recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return
   * of other than the magic value MUST result in the transaction being reverted.
   * Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` unless throwing.
   * @notice The contract address is always the message sender. A wallet/broker/auction application
   * MUST implement the wallet interface if it will accept safe transfers.
   * @param _operator The address which called `safeTransferFrom` function.
   * @param _from The address which previously owned the token.
   * @param _tokenId The NFT identifier which is being transferred.
   * @param _data Additional data with no specified format.
   * @return Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
   */
  function onERC721Received(
    address _operator,
    address _from,
    uint256 _tokenId,
    bytes calldata _data
  )
    external
    returns(bytes4);

}

/**
 * @dev ERC-721 non-fungible token standard.
 * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md.
 */
interface ERC721
{

  /**
   * @dev Emits when ownership of any NFT changes by any mechanism. This event emits when NFTs are
   * created (`from` == 0) and destroyed (`to` == 0). Exception: during contract creation, any
   * number of NFTs may be created and assigned without emitting Transfer. At the time of any
   * transfer, the approved address for that NFT (if any) is reset to none.
   */
  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 indexed _tokenId
  );

  /**
   * @dev This emits when the approved address for an NFT is changed or reaffirmed. The zero
   * address indicates there is no approved address. When a Transfer event emits, this also
   * indicates that the approved address for that NFT (if any) is reset to none.
   */
  event Approval(
    address indexed _owner,
    address indexed _approved,
    uint256 indexed _tokenId
  );

  /**
   * @dev This emits when an operator is enabled or disabled for an owner. The operator can manage
   * all NFTs of the owner.
   */
  event ApprovalForAll(
    address indexed _owner,
    address indexed _operator,
    bool _approved
  );

  /**
   * @dev Transfers the ownership of an NFT from one address to another address.
   * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the
   * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is
   * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this
   * function checks if `_to` is a smart contract (code size > 0). If so, it calls
   * `onERC721Received` on `_to` and throws if the return value is not
   * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   * @param _data Additional data with no specified format, sent in call to `_to`.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes calldata _data
  )
    external;

  /**
   * @dev Transfers the ownership of an NFT from one address to another address.
   * @notice This works identically to the other function with an extra data parameter, except this
   * function just sets data to ""
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  /**
   * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
   * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero
   * address. Throws if `_tokenId` is not a valid NFT.
   * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
   * they mayb be permanently lost.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  /**
   * @dev Set or reaffirm the approved address for an NFT.
   * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is
   * the current NFT owner, or an authorized operator of the current owner.
   * @param _approved The new approved NFT controller.
   * @param _tokenId The NFT to approve.
   */
  function approve(
    address _approved,
    uint256 _tokenId
  )
    external;

  /**
   * @dev Enables or disables approval for a third party ("operator") to manage all of
   * `msg.sender`'s assets. It also emits the ApprovalForAll event.
   * @notice The contract MUST allow multiple operators per owner.
   * @param _operator Address to add to the set of authorized operators.
   * @param _approved True if the operators is approved, false to revoke approval.
   */
  function setApprovalForAll(
    address _operator,
    bool _approved
  )
    external;

  /**
   * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are
   * considered invalid, and this function throws for queries about the zero address.
   * @param _owner Address for whom to query the balance.
   * @return Balance of _owner.
   */
  function balanceOf(
    address _owner
  )
    external
    view
    returns (uint256);

  /**
   * @dev Returns the address of the owner of the NFT. NFTs assigned to zero address are considered
   * invalid, and queries about them do throw.
   * @param _tokenId The identifier for an NFT.
   * @return Address of _tokenId owner.
   */
  function ownerOf(
    uint256 _tokenId
  )
    external
    view
    returns (address);

  /**
   * @dev Get the approved address for a single NFT.
   * @notice Throws if `_tokenId` is not a valid NFT.
   * @param _tokenId The NFT to find the approved address for.
   * @return Address that _tokenId is approved for.
   */
  function getApproved(
    uint256 _tokenId
  )
    external
    view
    returns (address);

  /**
   * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise.
   * @param _owner The address that owns the NFTs.
   * @param _operator The address that acts on behalf of the owner.
   * @return True if approved for all, false otherwise.
   */
  function isApprovedForAll(
    address _owner,
    address _operator
  )
    external
    view
    returns (bool);

}


/**
 * @dev Utility library of inline functions on addresses.
 * @notice Based on:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol
 * Requires EIP-1052.
 */
library AddressUtils
{

  /**
   * @dev Returns whether the target address is a contract.
   * @param _addr Address to check.
   * @return addressCheck True if _addr is a contract, false if not.
   */
  function isContract(
    address _addr
  )
    internal
    view
    returns (bool addressCheck)
  {
    // This method relies in extcodesize, which returns 0 for contracts in
    // construction, since the code is only stored at the end of the
    // constructor execution.

    // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
    // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
    // for accounts without code, i.e. `keccak256('')`
    bytes32 codehash;
    bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    assembly { codehash := extcodehash(_addr) } // solhint-disable-line
    addressCheck = (codehash != 0x0 && codehash != accountHash);
  }

}


interface ERC165
{

  /**
   * @dev Checks if the smart contract includes a specific interface.
   * This function uses less than 30,000 gas.
   * @param _interfaceID The interface identifier, as specified in ERC-165.
   * @return True if _interfaceID is supported, false otherwise.
   */
  function supportsInterface(
    bytes4 _interfaceID
  )
    external
    view
    returns (bool);
    
}

/**
 * @dev Implementation of standard for detect smart contract interfaces.
 */
contract SupportsInterface is
  ERC165
{

  /**
   * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true.
   */
  mapping(bytes4 => bool) internal supportedInterfaces;

  /**
   * @dev Contract constructor.
   */
  constructor()
  {
    supportedInterfaces[0x01ffc9a7] = true; // ERC165
  }

  /**
   * @dev Function to check which interfaces are suported by this contract.
   * @param _interfaceID Id of the interface.
   * @return True if _interfaceID is supported, false otherwise.
   */
  function supportsInterface(
    bytes4 _interfaceID
  )
    external
    override
    view
    returns (bool)
  {
    return supportedInterfaces[_interfaceID];
  }

}



contract NFTSprites is
  ERC721,
  SupportsInterface
{
  using AddressUtils for address;

  /**
   * @dev List of revert message codes. Implementing dApp should handle showing the correct message.
   * Based on 0xcert framework error codes.
   */
  string constant ZERO_ADDRESS = "003001";
  string constant NOT_VALID_NFT = "003002";
  string constant NOT_OWNER_OR_OPERATOR = "003003";
  string constant NOT_OWNER_APPROVED_OR_OPERATOR = "003004";
  string constant NOT_ABLE_TO_RECEIVE_NFT = "003005";
  string constant NFT_ALREADY_EXISTS = "003006";
  string constant NOT_OWNER = "003007";
  string constant IS_OWNER = "003008";
  
  string internal nftName = "NFT Sprites";
  string internal nftSymbol = "NFTS";
  
  uint public latestNewSpriteForSale;
  
  address owner;
    
  struct Sprite {
    address owner;
    bool currentlyForSale;
    uint price;
    uint timesSold;
  }
  
  mapping (uint => Sprite) public sprites;
  
  function getSpriteInfo (uint spriteNumber) public view returns (address, bool, uint, uint) {
    return (sprites[spriteNumber].owner, sprites[spriteNumber].currentlyForSale, sprites[spriteNumber].price, sprites[spriteNumber].timesSold);
  }
  
  // ownerOf does this as well
  function getSpriteOwner (uint spriteNumber) public view returns (address) {
    return (sprites[spriteNumber].owner);
  }
  
  mapping (address => uint[]) public spriteOwners;
  function spriteOwningHistory (address _address) public view returns (uint[] memory owningHistory) {
    owningHistory = spriteOwners[_address];
  }
  
  function name() external view returns (string memory _name) {
    _name = nftName;
  }
  
  function symbol() external view returns (string memory _symbol) {
    _symbol = nftSymbol;
  }

  /**
   * @dev Magic value of a smart contract that can recieve NFT.
   * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")).
   */
  bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02;

  /**
   * @dev A mapping from NFT ID to the address that owns it.
   */
  mapping (uint256 => address) internal idToOwner;

  /**
   * @dev Mapping from NFT ID to approved address.
   */
  mapping (uint256 => address) internal idToApproval;

   /**
   * @dev Mapping from owner address to count of his tokens.
   */
  mapping (address => uint256) private ownerToNFTokenCount;

  /**
   * @dev Mapping from owner address to mapping of operator addresses.
   */
  mapping (address => mapping (address => bool)) internal ownerToOperators;

  /**
   * @dev Guarantees that the msg.sender is an owner or operator of the given NFT.
   * @param _tokenId ID of the NFT to validate.
   */
  modifier canOperate(uint256 _tokenId) {
    address tokenOwner = idToOwner[_tokenId];
    require(
      tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender],
      NOT_OWNER_OR_OPERATOR
    );
    _;
  }

  /**
   * @dev Guarantees that the msg.sender is allowed to transfer NFT.
   * @param _tokenId ID of the NFT to transfer.
   */
   
   // idToApproval[_tokenId] = _approved;
   
  modifier canTransfer(uint256 _tokenId) {
    address tokenOwner = idToOwner[_tokenId];
    require(
      tokenOwner == msg.sender
      || idToApproval[_tokenId] == msg.sender
      || ownerToOperators[tokenOwner][msg.sender],
      NOT_OWNER_APPROVED_OR_OPERATOR
    );
    _;
  }

  /**
   * @dev Guarantees that _tokenId is a valid Token.
   * @param _tokenId ID of the NFT to validate.
   */
  modifier validNFToken(uint256 _tokenId) {
    require(idToOwner[_tokenId] != address(0), NOT_VALID_NFT);
    _;
  }

  /**
   * @dev Contract constructor.
   */
  constructor() {
    supportedInterfaces[0x80ac58cd] = true; // ERC721
    
    sprites[0].owner = msg.sender;
    sprites[0].currentlyForSale = true;
    sprites[0].price = (10**15)*5;
    sprites[0].timesSold = 0;
    
    owner = msg.sender;
  }
    
  function buySprite (uint spriteNumber) public payable {
    require(sprites[spriteNumber].currentlyForSale == true);
    require(msg.value == sprites[spriteNumber].price);
    require(spriteNumber < 100);
    sprites[spriteNumber].timesSold++;
    spriteOwners[msg.sender].push(spriteNumber);
    sprites[spriteNumber].currentlyForSale = false;
    if (spriteNumber != latestNewSpriteForSale) {
        // buying sprite that is already owned from someone
        address currentSpriteOwner = getSpriteOwner(spriteNumber);
        idToApproval[spriteNumber] = msg.sender;
        // _safeTransferFrom calls _transfer which updates the sprite owner
        _safeTransferFrom(currentSpriteOwner, msg.sender, spriteNumber, "");
        // give existing sprite owner their money
        payable(sprites[spriteNumber].owner).transfer(sprites[spriteNumber].price);
    } else {
        // buying brand new latest sprite
        sprites[spriteNumber].owner = msg.sender;
        if (latestNewSpriteForSale != 99) {
            latestNewSpriteForSale++;
            sprites[latestNewSpriteForSale].price = latestNewSpriteForSale**2 * (10**15)*5;
            sprites[latestNewSpriteForSale].currentlyForSale = true;
        }
        _mint(msg.sender, spriteNumber);
    }
  }
  
  function sellSprite (uint spriteNumber, uint price) public {
    require(msg.sender == sprites[spriteNumber].owner);
    require(price > 0);
    sprites[spriteNumber].price = price;
    sprites[spriteNumber].currentlyForSale = true;
  }
  
  function dontSellSprite (uint spriteNumber) public {
    require(msg.sender == sprites[spriteNumber].owner);
    sprites[spriteNumber].currentlyForSale = false;
  }
  
  function giftSprite (uint spriteNumber, address receiver) public {
    require(receiver != address(0), ZERO_ADDRESS);
    require(msg.sender == sprites[spriteNumber].owner);
    spriteOwners[receiver].push(spriteNumber);
    _safeTransferFrom(msg.sender, receiver, spriteNumber, "");
  }
  
  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata _data) external override {
    _safeTransferFrom(_from, _to, _tokenId, _data);
  }
  
  /**
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @notice This works identically to the other function with an extra data parameter, except this
   * function just sets data to ""
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function safeTransferFrom(address _from, address _to, uint256 _tokenId) external override {
    _safeTransferFrom(_from, _to, _tokenId, "");
  }

  /**
   * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable.
   * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is
   * the current NFT owner, or an authorized operator of the current owner.
   * @param _approved Address to be approved for the given NFT ID.
   * @param _tokenId ID of the token to be approved.
   */
  function approve(address _approved, uint256 _tokenId) external override canOperate(_tokenId) validNFToken(_tokenId) {
    address tokenOwner = idToOwner[_tokenId];
    require(_approved != tokenOwner, IS_OWNER);

    idToApproval[_tokenId] = _approved;
    emit Approval(tokenOwner, _approved, _tokenId);
  }

  /**
   * @dev Enables or disables approval for a third party ("operator") to manage all of
   * `msg.sender`'s assets. It also emits the ApprovalForAll event.
   * @notice This works even if sender doesn't own any tokens at the time.
   * @param _operator Address to add to the set of authorized operators.
   * @param _approved True if the operators is approved, false to revoke approval.
   */
  function setApprovalForAll(address _operator, bool _approved) external override {
    ownerToOperators[msg.sender][_operator] = _approved;
    emit ApprovalForAll(msg.sender, _operator, _approved);
  }

  /**
   * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are
   * considered invalid, and this function throws for queries about the zero address.
   * @param _owner Address for whom to query the balance.
   * @return Balance of _owner.
   */
  function balanceOf(address _owner) external override view returns (uint256) {
    require(_owner != address(0), ZERO_ADDRESS);
    return _getOwnerNFTCount(_owner);
  }

  /**
   * @dev Returns the address of the owner of the NFT. NFTs assigned to zero address are considered
   * invalid, and queries about them do throw.
   * @param _tokenId The identifier for an NFT.
   * @return _owner Address of _tokenId owner.
   */
  function ownerOf(uint256 _tokenId) external override view returns (address _owner) {
    _owner = idToOwner[_tokenId];
    require(_owner != address(0), NOT_VALID_NFT);
  }

  /**
   * @dev Get the approved address for a single NFT.
   * @notice Throws if `_tokenId` is not a valid NFT.
   * @param _tokenId ID of the NFT to query the approval of.
   * @return Address that _tokenId is approved for.
   */
  function getApproved(uint256 _tokenId) external override view validNFToken(_tokenId) returns (address) {
    return idToApproval[_tokenId];
  }

  /**
   * @dev Checks if `_operator` is an approved operator for `_owner`.
   * @param _owner The address that owns the NFTs.
   * @param _operator The address that acts on behalf of the owner.
   * @return True if approved for all, false otherwise.
   */
  function isApprovedForAll(address _owner, address _operator) external override view returns (bool) {
    return ownerToOperators[_owner][_operator];
  }

  /**
   * @dev Actually preforms the transfer.
   * @notice Does NO checks.
   * @param _to Address of a new owner.
   * @param _tokenId The NFT that is being transferred.
   */
  function _transfer(address _to, uint256 _tokenId) internal {
    address from = idToOwner[_tokenId];
    _clearApproval(_tokenId);

    _removeNFToken(from, _tokenId);
    _addNFToken(_to, _tokenId);
    
    // update sprite struct - may have already been done in buySprite
    sprites[_tokenId].owner = _to;

    emit Transfer(from, _to, _tokenId);
  }

  /**
   * @dev Mints a new NFT.
   * @notice This is an internal function which should be called from user-implemented external
   * mint function. Its purpose is to show and properly initialize data structures when using this
   * implementation.
   * @param _to The address that will own the minted NFT.
   * @param _tokenId of the NFT to be minted by the msg.sender.
   */
  function _mint(address _to, uint256 _tokenId) internal virtual {
    require(_to != address(0), ZERO_ADDRESS);
    require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS);

    _addNFToken(_to, _tokenId);

    emit Transfer(address(0), _to, _tokenId);
  }

  /**
   * @dev Burns a NFT.
   * @notice This is an internal function which should be called from user-implemented external burn
   * function. Its purpose is to show and properly initialize data structures when using this
   * implementation. Also, note that this burn implementation allows the minter to re-mint a burned
   * NFT.
   * @param _tokenId ID of the NFT to be burned.
   */
  function _burn(uint256 _tokenId) internal virtual validNFToken(_tokenId) {
    address tokenOwner = idToOwner[_tokenId];
    _clearApproval(_tokenId);
    _removeNFToken(tokenOwner, _tokenId);
    emit Transfer(tokenOwner, address(0), _tokenId);
  }
  
  /**
   * @dev Removes a NFT from owner.
   * @notice Use and override this function with caution. Wrong usage can have serious consequences.
   * @param _from Address from wich we want to remove the NFT.
   * @param _tokenId Which NFT we want to remove.
   */
  function _removeNFToken(address _from, uint256 _tokenId) internal virtual {
    require(idToOwner[_tokenId] == _from, NOT_OWNER);
    ownerToNFTokenCount[_from] = ownerToNFTokenCount[_from] - 1;
    delete idToOwner[_tokenId];
  }

  /**
   * @dev Assignes a new NFT to owner.
   * @notice Use and override this function with caution. Wrong usage can have serious consequences.
   * @param _to Address to wich we want to add the NFT.
   * @param _tokenId Which NFT we want to add.
   */
  function _addNFToken(address _to, uint256 _tokenId) internal virtual {
    require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS);

    idToOwner[_tokenId] = _to;
    ownerToNFTokenCount[_to] = ownerToNFTokenCount[_to] + 1;
  }

  /**
   * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable
   * extension to remove double storage (gas optimization) of owner nft count.
   * @param _owner Address for whom to query the count.
   * @return Number of _owner NFTs.
   */
  function _getOwnerNFTCount(address _owner) internal virtual view returns (uint256) {
    return ownerToNFTokenCount[_owner];
  }

  /**
   * @dev Actually perform the safeTransferFrom.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   * @param _data Additional data with no specified format, sent in call to `_to`.
   */
  function _safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) private canTransfer(_tokenId) validNFToken(_tokenId) {
    address tokenOwner = idToOwner[_tokenId];
    require(tokenOwner == _from, NOT_OWNER);
    require(_to != address(0), ZERO_ADDRESS);

    _transfer(_to, _tokenId);

    // isContract is function from address-utils.sol
    if (_to.isContract()) {
      bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
      require(retval == MAGIC_ON_ERC721_RECEIVED, NOT_ABLE_TO_RECEIVE_NFT);
    }
  }

  /**
   * @dev Clears the current approval of a given NFT ID.
   * @param _tokenId ID of the NFT to be transferred.
   */
  function _clearApproval(uint256 _tokenId) private {
    if (idToApproval[_tokenId] != address(0)) {
      delete idToApproval[_tokenId];
    }
  }
  
  modifier onlyOwner {
    require(msg.sender == owner);
    _;
  }
  
  function withdraw() public onlyOwner {
    payable(owner).transfer(address(this).balance);
  }
  
    /**
   * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
   * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero
   * address. Throws if `_tokenId` is not a valid NFT. This function can be changed to payable.
   * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
   * they maybe be permanently lost.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function transferFrom(address _from, address _to, uint256 _tokenId) external override canTransfer(_tokenId) validNFToken(_tokenId) {
    address tokenOwner = idToOwner[_tokenId];
    require(tokenOwner == _from, NOT_OWNER);
    require(_to != address(0), ZERO_ADDRESS);

    _transfer(_to, _tokenId);
  }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"spriteNumber","type":"uint256"}],"name":"buySprite","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"spriteNumber","type":"uint256"}],"name":"dontSellSprite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"spriteNumber","type":"uint256"}],"name":"getSpriteInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"spriteNumber","type":"uint256"}],"name":"getSpriteOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"spriteNumber","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"giftSprite","outputs":[],"stateMutability":"nonpayable","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":"latestNewSpriteForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"spriteNumber","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"sellSprite","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":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"spriteOwners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"spriteOwningHistory","outputs":[{"internalType":"uint256[]","name":"owningHistory","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sprites","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"currentlyForSale","type":"bool"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timesSold","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600b81526020017f4e46542053707269746573000000000000000000000000000000000000000000815250600190805190602001906200005192919062000259565b506040518060400160405280600481526020017f4e46545300000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062000259565b50348015620000ad57600080fd5b5060016000806301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000806380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550336005600080815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016005600080815260200190815260200160002060000160146101000a81548160ff0219169083151502179055506611c37937e0800060056000808152602001908152602001600020600101819055506000600560008081526020019081526020016000206002018190555033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200036e565b828054620002679062000309565b90600052602060002090601f0160209004810192826200028b5760008555620002d7565b82601f10620002a657805160ff1916838001178555620002d7565b82800160010185558215620002d7579182015b82811115620002d6578251825591602001919060010190620002b9565b5b509050620002e69190620002ea565b5090565b5b8082111562000305576000816000905550600101620002eb565b5090565b600060028204905060018216806200032257607f821691505b602082108114156200033957620003386200033f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61353c806200037e6000396000f3fe6080604052600436106101405760003560e01c80636352211e116100b6578063c2afbfb51161006f578063c2afbfb514610489578063c66cd93e146104b2578063ccb13693146104db578063e985e9c514610506578063eb9ce7c714610543578063f777a34e1461056c57610140565b80636352211e1461035257806370a082311461038f5780638c91f84d146103cc57806395d89b411461040c578063a22cb46514610437578063b88d4fde1461046057610140565b80632571a356116101085780632571a3561461023c5780632c756d811461027c5780633ccfd60b146102b957806342842e0e146102d05780634b4dc1f1146102f957806351c54c681461033657610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806323b872dd14610213575b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190612cfc565b6105a9565b6040516101799190612fe1565b60405180910390f35b34801561018e57600080fd5b50610197610610565b6040516101a49190612ffc565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf9190612d4e565b6106a2565b6040516101e19190612f13565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190612cc0565b6107bd565b005b34801561021f57600080fd5b5061023a60048036038101906102359190612bb5565b610ba0565b005b34801561024857600080fd5b50610263600480360381019061025e9190612d4e565b610ff2565b6040516102739493929190612f7a565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612d4e565b611090565b6040516102b09190612f13565b60405180910390f35b3480156102c557600080fd5b506102ce6110d0565b005b3480156102dc57600080fd5b506102f760048036038101906102f29190612bb5565b611195565b005b34801561030557600080fd5b50610320600480360381019061031b9190612b50565b6111b5565b60405161032d9190612fbf565b60405180910390f35b610350600480360381019061034b9190612d4e565b61124c565b005b34801561035e57600080fd5b5061037960048036038101906103749190612d4e565b61158c565b6040516103869190612f13565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612b50565b611672565b6040516103c3919061301e565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190612d4e565b61172c565b6040516104039493929190612f7a565b60405180910390f35b34801561041857600080fd5b50610421611789565b60405161042e9190612ffc565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612c84565b61181b565b005b34801561046c57600080fd5b5061048760048036038101906104829190612c04565b611918565b005b34801561049557600080fd5b506104b060048036038101906104ab9190612db3565b61196f565b005b3480156104be57600080fd5b506104d960048036038101906104d49190612d77565b611a38565b005b3480156104e757600080fd5b506104f0611bd4565b6040516104fd919061301e565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190612b79565b611bda565b60405161053a9190612fe1565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190612d4e565b611c6e565b005b34801561057857600080fd5b50610593600480360381019061058e9190612cc0565b611d0e565b6040516105a0919061301e565b60405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606001805461061f906133b3565b80601f016020809104026020016040519081016040528092919081815260200182805461064b906133b3565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107779190612ffc565b60405180910390fd5b506008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806108b65750600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f30303330303300000000000000000000000000000000000000000000000000008152509061092d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109249190612ffc565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019190612ffc565b60405180910390fd5b5060006007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303038000000000000000000000000000000000000000000000000000081525090610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19190612ffc565b60405180910390fd5b50856008600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b8060006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610c7157503373ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d025750600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d709190612ffc565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d9190612ffc565b60405180910390fd5b5060006007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c9190612ffc565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd59190612ffc565b60405180910390fd5b50610fe98686611d3f565b50505050505050565b6000806000806005600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600087815260200190815260200160002060000160149054906101000a900460ff166005600088815260200190815260200160002060010154600560008981526020019081526020016000206002015493509350935093509193509193565b60006005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461112a57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611192573d6000803e3d6000fd5b50565b6111b083838360405180602001604052806000815250611e49565b505050565b6060600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561124057602002820191906000526020600020905b81548152602001906001019080831161122c575b50505050509050919050565b600115156005600083815260200190815260200160002060000160149054906101000a900460ff1615151461128057600080fd5b600560008281526020019081526020016000206001015434146112a257600080fd5b606481106112af57600080fd5b6005600082815260200190815260200160002060020160008154809291906112d6906133e5565b9190505550600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560006005600083815260200190815260200160002060000160146101000a81548160ff021916908315150217905550600354811461148c57600061138482611090565b9050336008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506113f381338460405180602001604052806000815250611e49565b6005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60056000858152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015611485573d6000803e3d6000fd5b5050611589565b336005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060636003541461157e57600360008154809291906114fe906133e5565b9190505550600566038d7ea4c68000600260035461151c9190613153565b6115269190613271565b6115309190613271565b60056000600354815260200190815260200160002060010181905550600160056000600354815260200190815260200160002060000160146101000a81548160ff0219169083151502179055505b6115883382612417565b5b50565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303200000000000000000000000000000000000000000000000000008152509061166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639190612ffc565b60405180910390fd5b50919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303100000000000000000000000000000000000000000000000000008152509061171b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117129190612ffc565b60405180910390fd5b5061172582612605565b9050919050565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060010154908060020154905084565b606060028054611798906133b3565b80601f01602080910402602001604051908101604052809291908181526020018280546117c4906133b3565b80156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b5050505050905090565b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190c9190612fe1565b60405180910390a35050565b61196885858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611e49565b5050505050565b6005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119dd57600080fd5b600081116119ea57600080fd5b80600560008481526020019081526020016000206001018190555060016005600084815260200190815260200160002060000160146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad79190612ffc565b60405180910390fd5b506005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b4f57600080fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055611bd033828460405180602001604052806000815250611e49565b5050565b60035481565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6005600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cdc57600080fd5b60006005600083815260200190815260200160002060000160146101000a81548160ff02191690831515021790555050565b60066020528160005260406000208181548110611d2a57600080fd5b90600052602060002001600091509150505481565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611d808261264e565b611d8a81836126ef565b611d948383612892565b826005600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611f1a57503373ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611fab5750600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090612022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120199190612ffc565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69190612ffc565b60405180910390fd5b5060006007600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d59190612ffc565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e9190612ffc565b60405180910390fd5b506122928787611d3f565b6122b18773ffffffffffffffffffffffffffffffffffffffff16612a52565b1561240d5760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b81526004016122f79493929190612f2e565b602060405180830381600087803b15801561231157600080fd5b505af1158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190612d25565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f30303330303500000000000000000000000000000000000000000000000000008152509061240a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124019190612ffc565b60405180910390fd5b50505b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030310000000000000000000000000000000000000000000000000000815250906124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b69190612ffc565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303600000000000000000000000000000000000000000000000000008152509061259a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125919190612ffc565b60405180910390fd5b506125a58282612892565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ec576008600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf9190612ffc565b60405180910390fd5b506001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281591906132cb565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303600000000000000000000000000000000000000000000000000008152509061296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129639190612ffc565b60405180910390fd5b50816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0b91906130aa565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015612a945750808214155b92505050919050565b600081359050612aac816134aa565b92915050565b600081359050612ac1816134c1565b92915050565b600081359050612ad6816134d8565b92915050565b600081519050612aeb816134d8565b92915050565b60008083601f840112612b0357600080fd5b8235905067ffffffffffffffff811115612b1c57600080fd5b602083019150836001820283011115612b3457600080fd5b9250929050565b600081359050612b4a816134ef565b92915050565b600060208284031215612b6257600080fd5b6000612b7084828501612a9d565b91505092915050565b60008060408385031215612b8c57600080fd5b6000612b9a85828601612a9d565b9250506020612bab85828601612a9d565b9150509250929050565b600080600060608486031215612bca57600080fd5b6000612bd886828701612a9d565b9350506020612be986828701612a9d565b9250506040612bfa86828701612b3b565b9150509250925092565b600080600080600060808688031215612c1c57600080fd5b6000612c2a88828901612a9d565b9550506020612c3b88828901612a9d565b9450506040612c4c88828901612b3b565b935050606086013567ffffffffffffffff811115612c6957600080fd5b612c7588828901612af1565b92509250509295509295909350565b60008060408385031215612c9757600080fd5b6000612ca585828601612a9d565b9250506020612cb685828601612ab2565b9150509250929050565b60008060408385031215612cd357600080fd5b6000612ce185828601612a9d565b9250506020612cf285828601612b3b565b9150509250929050565b600060208284031215612d0e57600080fd5b6000612d1c84828501612ac7565b91505092915050565b600060208284031215612d3757600080fd5b6000612d4584828501612adc565b91505092915050565b600060208284031215612d6057600080fd5b6000612d6e84828501612b3b565b91505092915050565b60008060408385031215612d8a57600080fd5b6000612d9885828601612b3b565b9250506020612da985828601612a9d565b9150509250929050565b60008060408385031215612dc657600080fd5b6000612dd485828601612b3b565b9250506020612de585828601612b3b565b9150509250929050565b6000612dfb8383612ef5565b60208301905092915050565b612e10816132ff565b82525050565b6000612e2182613049565b612e2b8185613077565b9350612e3683613039565b8060005b83811015612e67578151612e4e8882612def565b9750612e598361306a565b925050600181019050612e3a565b5085935050505092915050565b612e7d81613311565b82525050565b6000612e8e82613054565b612e988185613088565b9350612ea8818560208601613380565b612eb18161348c565b840191505092915050565b6000612ec78261305f565b612ed18185613099565b9350612ee1818560208601613380565b612eea8161348c565b840191505092915050565b612efe81613369565b82525050565b612f0d81613369565b82525050565b6000602082019050612f286000830184612e07565b92915050565b6000608082019050612f436000830187612e07565b612f506020830186612e07565b612f5d6040830185612f04565b8181036060830152612f6f8184612e83565b905095945050505050565b6000608082019050612f8f6000830187612e07565b612f9c6020830186612e74565b612fa96040830185612f04565b612fb66060830184612f04565b95945050505050565b60006020820190508181036000830152612fd98184612e16565b905092915050565b6000602082019050612ff66000830184612e74565b92915050565b600060208201905081810360008301526130168184612ebc565b905092915050565b60006020820190506130336000830184612f04565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006130b582613369565b91506130c083613369565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130f5576130f461342e565b5b828201905092915050565b6000808291508390505b600185111561314a578086048111156131265761312561342e565b5b60018516156131355780820291505b80810290506131438561349d565b945061310a565b94509492505050565b600061315e82613369565b915061316983613373565b92506131967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461319e565b905092915050565b6000826131ae576001905061326a565b816131bc576000905061326a565b81600181146131d257600281146131dc5761320b565b600191505061326a565b60ff8411156131ee576131ed61342e565b5b8360020a9150848211156132055761320461342e565b5b5061326a565b5060208310610133831016604e8410600b84101617156132405782820a90508381111561323b5761323a61342e565b5b61326a565b61324d8484846001613100565b925090508184048111156132645761326361342e565b5b81810290505b9392505050565b600061327c82613369565b915061328783613369565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132c0576132bf61342e565b5b828202905092915050565b60006132d682613369565b91506132e183613369565b9250828210156132f4576132f361342e565b5b828203905092915050565b600061330a82613349565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561339e578082015181840152602081019050613383565b838111156133ad576000848401525b50505050565b600060028204905060018216806133cb57607f821691505b602082108114156133df576133de61345d565b5b50919050565b60006133f082613369565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134235761342261342e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6134b3816132ff565b81146134be57600080fd5b50565b6134ca81613311565b81146134d557600080fd5b50565b6134e18161331d565b81146134ec57600080fd5b50565b6134f881613369565b811461350357600080fd5b5056fea2646970667358221220812b461eee37befc9ba10c5f83b2b794f53b2222d9cdbe25b763c27c6b4188b464736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101405760003560e01c80636352211e116100b6578063c2afbfb51161006f578063c2afbfb514610489578063c66cd93e146104b2578063ccb13693146104db578063e985e9c514610506578063eb9ce7c714610543578063f777a34e1461056c57610140565b80636352211e1461035257806370a082311461038f5780638c91f84d146103cc57806395d89b411461040c578063a22cb46514610437578063b88d4fde1461046057610140565b80632571a356116101085780632571a3561461023c5780632c756d811461027c5780633ccfd60b146102b957806342842e0e146102d05780634b4dc1f1146102f957806351c54c681461033657610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806323b872dd14610213575b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190612cfc565b6105a9565b6040516101799190612fe1565b60405180910390f35b34801561018e57600080fd5b50610197610610565b6040516101a49190612ffc565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf9190612d4e565b6106a2565b6040516101e19190612f13565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190612cc0565b6107bd565b005b34801561021f57600080fd5b5061023a60048036038101906102359190612bb5565b610ba0565b005b34801561024857600080fd5b50610263600480360381019061025e9190612d4e565b610ff2565b6040516102739493929190612f7a565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612d4e565b611090565b6040516102b09190612f13565b60405180910390f35b3480156102c557600080fd5b506102ce6110d0565b005b3480156102dc57600080fd5b506102f760048036038101906102f29190612bb5565b611195565b005b34801561030557600080fd5b50610320600480360381019061031b9190612b50565b6111b5565b60405161032d9190612fbf565b60405180910390f35b610350600480360381019061034b9190612d4e565b61124c565b005b34801561035e57600080fd5b5061037960048036038101906103749190612d4e565b61158c565b6040516103869190612f13565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612b50565b611672565b6040516103c3919061301e565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190612d4e565b61172c565b6040516104039493929190612f7a565b60405180910390f35b34801561041857600080fd5b50610421611789565b60405161042e9190612ffc565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612c84565b61181b565b005b34801561046c57600080fd5b5061048760048036038101906104829190612c04565b611918565b005b34801561049557600080fd5b506104b060048036038101906104ab9190612db3565b61196f565b005b3480156104be57600080fd5b506104d960048036038101906104d49190612d77565b611a38565b005b3480156104e757600080fd5b506104f0611bd4565b6040516104fd919061301e565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190612b79565b611bda565b60405161053a9190612fe1565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190612d4e565b611c6e565b005b34801561057857600080fd5b50610593600480360381019061058e9190612cc0565b611d0e565b6040516105a0919061301e565b60405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606001805461061f906133b3565b80601f016020809104026020016040519081016040528092919081815260200182805461064b906133b3565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107779190612ffc565b60405180910390fd5b506008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806108b65750600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f30303330303300000000000000000000000000000000000000000000000000008152509061092d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109249190612ffc565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019190612ffc565b60405180910390fd5b5060006007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303038000000000000000000000000000000000000000000000000000081525090610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19190612ffc565b60405180910390fd5b50856008600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b8060006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610c7157503373ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610d025750600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d709190612ffc565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d9190612ffc565b60405180910390fd5b5060006007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c9190612ffc565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd59190612ffc565b60405180910390fd5b50610fe98686611d3f565b50505050505050565b6000806000806005600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600087815260200190815260200160002060000160149054906101000a900460ff166005600088815260200190815260200160002060010154600560008981526020019081526020016000206002015493509350935093509193509193565b60006005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461112a57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611192573d6000803e3d6000fd5b50565b6111b083838360405180602001604052806000815250611e49565b505050565b6060600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561124057602002820191906000526020600020905b81548152602001906001019080831161122c575b50505050509050919050565b600115156005600083815260200190815260200160002060000160149054906101000a900460ff1615151461128057600080fd5b600560008281526020019081526020016000206001015434146112a257600080fd5b606481106112af57600080fd5b6005600082815260200190815260200160002060020160008154809291906112d6906133e5565b9190505550600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560006005600083815260200190815260200160002060000160146101000a81548160ff021916908315150217905550600354811461148c57600061138482611090565b9050336008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506113f381338460405180602001604052806000815250611e49565b6005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60056000858152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015611485573d6000803e3d6000fd5b5050611589565b336005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060636003541461157e57600360008154809291906114fe906133e5565b9190505550600566038d7ea4c68000600260035461151c9190613153565b6115269190613271565b6115309190613271565b60056000600354815260200190815260200160002060010181905550600160056000600354815260200190815260200160002060000160146101000a81548160ff0219169083151502179055505b6115883382612417565b5b50565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303200000000000000000000000000000000000000000000000000008152509061166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639190612ffc565b60405180910390fd5b50919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303100000000000000000000000000000000000000000000000000008152509061171b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117129190612ffc565b60405180910390fd5b5061172582612605565b9050919050565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060010154908060020154905084565b606060028054611798906133b3565b80601f01602080910402602001604051908101604052809291908181526020018280546117c4906133b3565b80156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b5050505050905090565b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190c9190612fe1565b60405180910390a35050565b61196885858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611e49565b5050505050565b6005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119dd57600080fd5b600081116119ea57600080fd5b80600560008481526020019081526020016000206001018190555060016005600084815260200190815260200160002060000160146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad79190612ffc565b60405180910390fd5b506005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b4f57600080fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055611bd033828460405180602001604052806000815250611e49565b5050565b60035481565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6005600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cdc57600080fd5b60006005600083815260200190815260200160002060000160146101000a81548160ff02191690831515021790555050565b60066020528160005260406000208181548110611d2a57600080fd5b90600052602060002001600091509150505481565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611d808261264e565b611d8a81836126ef565b611d948383612892565b826005600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611f1a57503373ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611fab5750600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090612022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120199190612ffc565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69190612ffc565b60405180910390fd5b5060006007600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d59190612ffc565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e9190612ffc565b60405180910390fd5b506122928787611d3f565b6122b18773ffffffffffffffffffffffffffffffffffffffff16612a52565b1561240d5760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b81526004016122f79493929190612f2e565b602060405180830381600087803b15801561231157600080fd5b505af1158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190612d25565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f30303330303500000000000000000000000000000000000000000000000000008152509061240a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124019190612ffc565b60405180910390fd5b50505b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030310000000000000000000000000000000000000000000000000000815250906124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b69190612ffc565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303600000000000000000000000000000000000000000000000000008152509061259a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125919190612ffc565b60405180910390fd5b506125a58282612892565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ec576008600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf9190612ffc565b60405180910390fd5b506001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281591906132cb565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303600000000000000000000000000000000000000000000000000008152509061296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129639190612ffc565b60405180910390fd5b50816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0b91906130aa565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015612a945750808214155b92505050919050565b600081359050612aac816134aa565b92915050565b600081359050612ac1816134c1565b92915050565b600081359050612ad6816134d8565b92915050565b600081519050612aeb816134d8565b92915050565b60008083601f840112612b0357600080fd5b8235905067ffffffffffffffff811115612b1c57600080fd5b602083019150836001820283011115612b3457600080fd5b9250929050565b600081359050612b4a816134ef565b92915050565b600060208284031215612b6257600080fd5b6000612b7084828501612a9d565b91505092915050565b60008060408385031215612b8c57600080fd5b6000612b9a85828601612a9d565b9250506020612bab85828601612a9d565b9150509250929050565b600080600060608486031215612bca57600080fd5b6000612bd886828701612a9d565b9350506020612be986828701612a9d565b9250506040612bfa86828701612b3b565b9150509250925092565b600080600080600060808688031215612c1c57600080fd5b6000612c2a88828901612a9d565b9550506020612c3b88828901612a9d565b9450506040612c4c88828901612b3b565b935050606086013567ffffffffffffffff811115612c6957600080fd5b612c7588828901612af1565b92509250509295509295909350565b60008060408385031215612c9757600080fd5b6000612ca585828601612a9d565b9250506020612cb685828601612ab2565b9150509250929050565b60008060408385031215612cd357600080fd5b6000612ce185828601612a9d565b9250506020612cf285828601612b3b565b9150509250929050565b600060208284031215612d0e57600080fd5b6000612d1c84828501612ac7565b91505092915050565b600060208284031215612d3757600080fd5b6000612d4584828501612adc565b91505092915050565b600060208284031215612d6057600080fd5b6000612d6e84828501612b3b565b91505092915050565b60008060408385031215612d8a57600080fd5b6000612d9885828601612b3b565b9250506020612da985828601612a9d565b9150509250929050565b60008060408385031215612dc657600080fd5b6000612dd485828601612b3b565b9250506020612de585828601612b3b565b9150509250929050565b6000612dfb8383612ef5565b60208301905092915050565b612e10816132ff565b82525050565b6000612e2182613049565b612e2b8185613077565b9350612e3683613039565b8060005b83811015612e67578151612e4e8882612def565b9750612e598361306a565b925050600181019050612e3a565b5085935050505092915050565b612e7d81613311565b82525050565b6000612e8e82613054565b612e988185613088565b9350612ea8818560208601613380565b612eb18161348c565b840191505092915050565b6000612ec78261305f565b612ed18185613099565b9350612ee1818560208601613380565b612eea8161348c565b840191505092915050565b612efe81613369565b82525050565b612f0d81613369565b82525050565b6000602082019050612f286000830184612e07565b92915050565b6000608082019050612f436000830187612e07565b612f506020830186612e07565b612f5d6040830185612f04565b8181036060830152612f6f8184612e83565b905095945050505050565b6000608082019050612f8f6000830187612e07565b612f9c6020830186612e74565b612fa96040830185612f04565b612fb66060830184612f04565b95945050505050565b60006020820190508181036000830152612fd98184612e16565b905092915050565b6000602082019050612ff66000830184612e74565b92915050565b600060208201905081810360008301526130168184612ebc565b905092915050565b60006020820190506130336000830184612f04565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006130b582613369565b91506130c083613369565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130f5576130f461342e565b5b828201905092915050565b6000808291508390505b600185111561314a578086048111156131265761312561342e565b5b60018516156131355780820291505b80810290506131438561349d565b945061310a565b94509492505050565b600061315e82613369565b915061316983613373565b92506131967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461319e565b905092915050565b6000826131ae576001905061326a565b816131bc576000905061326a565b81600181146131d257600281146131dc5761320b565b600191505061326a565b60ff8411156131ee576131ed61342e565b5b8360020a9150848211156132055761320461342e565b5b5061326a565b5060208310610133831016604e8410600b84101617156132405782820a90508381111561323b5761323a61342e565b5b61326a565b61324d8484846001613100565b925090508184048111156132645761326361342e565b5b81810290505b9392505050565b600061327c82613369565b915061328783613369565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132c0576132bf61342e565b5b828202905092915050565b60006132d682613369565b91506132e183613369565b9250828210156132f4576132f361342e565b5b828203905092915050565b600061330a82613349565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561339e578082015181840152602081019050613383565b838111156133ad576000848401525b50505050565b600060028204905060018216806133cb57607f821691505b602082108114156133df576133de61345d565b5b50919050565b60006133f082613369565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134235761342261342e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6134b3816132ff565b81146134be57600080fd5b50565b6134ca81613311565b81146134d557600080fd5b50565b6134e18161331d565b81146134ec57600080fd5b50565b6134f881613369565b811461350357600080fd5b5056fea2646970667358221220812b461eee37befc9ba10c5f83b2b794f53b2222d9cdbe25b763c27c6b4188b464736f6c63430008000033

Deployed Bytecode Sourcemap

9549:15370:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9364:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11140:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18799:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16720:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24602:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10518:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;10800:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23924:96;;;;;;;;;;;;;:::i;:::-;;16153:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10983:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13547:1291;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18380:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17943:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10470:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;11236:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17445:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15570:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14846:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15270:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10289:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19213:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15095:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10931:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9364:172;9474:4;9497:19;:33;9517:12;9497:33;;;;;;;;;;;;;;;;;;;;;;;;;;;9490:40;;9364:172;;;:::o;11140:88::-;11179:19;11215:7;11207:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11140:88;:::o;18799:145::-;18893:7;18874:8;13196:1;13165:33;;:9;:19;13175:8;13165:19;;;;;;;;;;;;;;;;;;;;;:33;;;;13200:13;;;;;;;;;;;;;;;;;13157:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18916:12:::1;:22;18929:8;18916:22;;;;;;;;;;;;;;;;;;;;;18909:29;;18799:145:::0;;;;:::o;16720:314::-;16803:8;12322:18;12343:9;:19;12353:8;12343:19;;;;;;;;;;;;;;;;;;;;;12322:40;;12399:10;12385:24;;:10;:24;;;:68;;;;12413:16;:28;12430:10;12413:28;;;;;;;;;;;;;;;:40;12442:10;12413:40;;;;;;;;;;;;;;;;;;;;;;;;;12385:68;12462:21;;;;;;;;;;;;;;;;;12369:121;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16826:8:::1;13196:1;13165:33;;:9;:19;13175:8;13165:19;;;;;;;;;;;;;;;;;;;;;:33;;;;13200:13;;;;;;;;;;;;;;;;::::0;13157:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16843:18:::2;16864:9;:19;16874:8;16864:19;;;;;;;;;;;;;;;;;;;;;16843:40;;16911:10;16898:23;;:9;:23;;;;16923:8;;;;;;;;;;;;;;;;::::0;16890:42:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16966:9;16941:12;:22;16954:8;16941:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;17019:8;17008:9;16987:41;;16996:10;16987:41;;;;;;;;;;;;13221:1;12497::::1;16720:314:::0;;;;:::o;24602:310::-;24700:8;12742:18;12763:9;:19;12773:8;12763:19;;;;;;;;;;;;;;;;;;;;;12742:40;;12819:10;12805:24;;:10;:24;;;:71;;;;12866:10;12840:36;;:12;:22;12853:8;12840:22;;;;;;;;;;;;;;;;;;;;;:36;;;12805:71;:122;;;;12887:16;:28;12904:10;12887:28;;;;;;;;;;;;;;;:40;12916:10;12887:40;;;;;;;;;;;;;;;;;;;;;;;;;12805:122;12936:30;;;;;;;;;;;;;;;;;12789:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24723:8:::1;13196:1;13165:33;;:9;:19;13175:8;13165:19;;;;;;;;;;;;;;;;;;;;;:33;;;;13200:13;;;;;;;;;;;;;;;;::::0;13157:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24740:18:::2;24761:9;:19;24771:8;24761:19;;;;;;;;;;;;;;;;;;;;;24740:40;;24809:5;24795:19;;:10;:19;;;24816:9;;;;;;;;;;;;;;;;::::0;24787:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24856:1;24841:17;;:3;:17;;;;24860:12;;;;;;;;;;;;;;;;::::0;24833:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24882:24;24892:3;24897:8;24882:9;:24::i;:::-;13221:1;12980::::1;24602:310:::0;;;;;:::o;10518:242::-;10582:7;10591:4;10597;10603;10624:7;:21;10632:12;10624:21;;;;;;;;;;;:27;;;;;;;;;;;;10653:7;:21;10661:12;10653:21;;;;;;;;;;;:38;;;;;;;;;;;;10693:7;:21;10701:12;10693:21;;;;;;;;;;;:27;;;10722:7;:21;10730:12;10722:21;;;;;;;;;;;:31;;;10616:138;;;;;;;;10518:242;;;;;:::o;10800:123::-;10865:7;10889;:21;10897:12;10889:21;;;;;;;;;;;:27;;;;;;;;;;;;10881:36;;10800:123;;;:::o;23924:96::-;23896:5;;;;;;;;;;;23882:19;;:10;:19;;;23874:28;;;;;;23976:5:::1;;;;;;;;;;;23968:23;;:46;23992:21;23968:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23924:96::o:0;16153:146::-;16250:43;16268:5;16275:3;16280:8;16250:43;;;;;;;;;;;;:17;:43::i;:::-;16153:146;;;:::o;10983:149::-;11052:27;11104:12;:22;11117:8;11104:22;;;;;;;;;;;;;;;11088:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10983:149;;;:::o;13547:1291::-;13658:4;13616:46;;:7;:21;13624:12;13616:21;;;;;;;;;;;:38;;;;;;;;;;;;:46;;;13608:55;;;;;;13691:7;:21;13699:12;13691:21;;;;;;;;;;;:27;;;13678:9;:40;13670:49;;;;;;13749:3;13734:12;:18;13726:27;;;;;;13760:7;:21;13768:12;13760:21;;;;;;;;;;;:31;;;:33;;;;;;;;;:::i;:::-;;;;;;13800:12;:24;13813:10;13800:24;;;;;;;;;;;;;;;13830:12;13800:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13891:5;13850:7;:21;13858:12;13850:21;;;;;;;;;;;:38;;;:46;;;;;;;;;;;;;;;;;;13923:22;;13907:12;:38;13903:930;;14019:26;14048:28;14063:12;14048:14;:28::i;:::-;14019:57;;14116:10;14087:12;:26;14100:12;14087:26;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;14214:67;14232:18;14252:10;14264:12;14214:67;;;;;;;;;;;;:17;:67::i;:::-;14351:7;:21;14359:12;14351:21;;;;;;;;;;;:27;;;;;;;;;;;;14343:45;;:74;14389:7;:21;14397:12;14389:21;;;;;;;;;;;:27;;;14343:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13903:930;;;;14515:10;14485:7;:21;14493:12;14485:21;;;;;;;;;;;:27;;;:40;;;;;;;;;;;;;;;;;;14566:2;14540:22;;:28;14536:248;;14585:22;;:24;;;;;;;;;:::i;:::-;;;;;;14701:1;14693:6;14688:1;14664:22;;:25;;;;:::i;:::-;:36;;;;:::i;:::-;:38;;;;:::i;:::-;14624:7;:31;14632:22;;14624:31;;;;;;;;;;;:37;;:78;;;;14768:4;14717:7;:31;14725:22;;14717:31;;;;;;;;;;;:48;;;:55;;;;;;;;;;;;;;;;;;14536:248;14794:31;14800:10;14812:12;14794:5;:31::i;:::-;13903:930;13547:1291;:::o;18380:175::-;18447:14;18479:9;:19;18489:8;18479:19;;;;;;;;;;;;;;;;;;;;;18470:28;;18531:1;18513:20;;:6;:20;;;;18535:13;;;;;;;;;;;;;;;;;18505:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18380:175;;;:::o;17943:171::-;18010:7;18052:1;18034:20;;:6;:20;;;;18056:12;;;;;;;;;;;;;;;;;18026:43;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18083:25;18101:6;18083:17;:25::i;:::-;18076:32;;17943:171;;;:::o;10470:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11236:96::-;11277:21;11317:9;11307:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11236:96;:::o;17445:204::-;17574:9;17532:16;:28;17549:10;17532:28;;;;;;;;;;;;;;;:39;17561:9;17532:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;17622:9;17595:48;;17610:10;17595:48;;;17633:9;17595:48;;;;;;:::i;:::-;;;;;;;;17445:204;;:::o;15570:171::-;15689:46;15707:5;15714:3;15719:8;15729:5;;15689:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;15570:171;;;;;:::o;14846:241::-;14934:7;:21;14942:12;14934:21;;;;;;;;;;;:27;;;;;;;;;;;;14920:41;;:10;:41;;;14912:50;;;;;;14985:1;14977:5;:9;14969:18;;;;;;15024:5;14994:7;:21;15002:12;14994:21;;;;;;;;;;;:27;;:35;;;;15077:4;15036:7;:21;15044:12;15036:21;;;;;;;;;;;:38;;;:45;;;;;;;;;;;;;;;;;;14846:241;;:::o;15270:292::-;15370:1;15350:22;;:8;:22;;;;15374:12;;;;;;;;;;;;;;;;;15342:45;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15416:7;:21;15424:12;15416:21;;;;;;;;;;;:27;;;;;;;;;;;;15402:41;;:10;:41;;;15394:50;;;;;;15451:12;:22;15464:8;15451:22;;;;;;;;;;;;;;;15479:12;15451:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15499:57;15517:10;15529:8;15539:12;15499:57;;;;;;;;;;;;:17;:57::i;:::-;15270:292;;:::o;10289:34::-;;;;:::o;19213:154::-;19306:4;19326:16;:24;19343:6;19326:24;;;;;;;;;;;;;;;:35;19351:9;19326:35;;;;;;;;;;;;;;;;;;;;;;;;;19319:42;;19213:154;;;;:::o;15095:167::-;15175:7;:21;15183:12;15175:21;;;;;;;;;;;:27;;;;;;;;;;;;15161:41;;:10;:41;;;15153:50;;;;;;15251:5;15210:7;:21;15218:12;15210:21;;;;;;;;;;;:38;;;:46;;;;;;;;;;;;;;;;;;15095:167;:::o;10931:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19558:365::-;19624:12;19639:9;:19;19649:8;19639:19;;;;;;;;;;;;;;;;;;;;;19624:34;;19665:24;19680:8;19665:14;:24::i;:::-;19698:30;19713:4;19719:8;19698:14;:30::i;:::-;19735:26;19747:3;19752:8;19735:11;:26::i;:::-;19871:3;19845:7;:17;19853:8;19845:17;;;;;;;;;;;:23;;;:29;;;;;;;;;;;;;;;;;;19908:8;19903:3;19888:29;;19897:4;19888:29;;;;;;;;;;;;19558:365;;;:::o;22961:596::-;23074:8;12742:18;12763:9;:19;12773:8;12763:19;;;;;;;;;;;;;;;;;;;;;12742:40;;12819:10;12805:24;;:10;:24;;;:71;;;;12866:10;12840:36;;:12;:22;12853:8;12840:22;;;;;;;;;;;;;;;;;;;;;:36;;;12805:71;:122;;;;12887:16;:28;12904:10;12887:28;;;;;;;;;;;;;;;:40;12916:10;12887:40;;;;;;;;;;;;;;;;;;;;;;;;;12805:122;12936:30;;;;;;;;;;;;;;;;;12789:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23097:8:::1;13196:1;13165:33;;:9;:19;13175:8;13165:19;;;;;;;;;;;;;;;;;;;;;:33;;;;13200:13;;;;;;;;;;;;;;;;::::0;13157:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23114:18:::2;23135:9;:19;23145:8;23135:19;;;;;;;;;;;;;;;;;;;;;23114:40;;23183:5;23169:19;;:10;:19;;;23190:9;;;;;;;;;;;;;;;;::::0;23161:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23230:1;23215:17;;:3;:17;;;;23234:12;;;;;;;;;;;;;;;;::::0;23207:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23256:24;23266:3;23271:8;23256:9;:24::i;:::-;23347:16;:3;:14;;;:16::i;:::-;23343:209;;;23374:13;23410:3;23390:41;;;23432:10;23444:5;23451:8;23461:5;23390:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23374:93;;11555:10;23494:24;;23484:34;;;:6;:34;;;;23520:23;;;;;;;;;;;;;;;;::::0;23476:68:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23343:209;;13221:1;12980::::1;22961:596:::0;;;;;;:::o;20314:269::-;20407:1;20392:17;;:3;:17;;;;20411:12;;;;;;;;;;;;;;;;;20384:40;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20470:1;20439:33;;:9;:19;20449:8;20439:19;;;;;;;;;;;;;;;;;;;;;:33;;;20474:18;;;;;;;;;;;;;;;;;20431:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20502:26;20514:3;20519:8;20502:11;:26::i;:::-;20568:8;20563:3;20542:35;;20559:1;20542:35;;;;;;;;;;;;20314:269;;:::o;22553:130::-;22627:7;22650:19;:27;22670:6;22650:27;;;;;;;;;;;;;;;;22643:34;;22553:130;;;:::o;23690:150::-;23785:1;23751:36;;:12;:22;23764:8;23751:22;;;;;;;;;;;;;;;;;;;;;:36;;;23747:88;;23805:12;:22;23818:8;23805:22;;;;;;;;;;;;23798:29;;;;;;;;;;;23747:88;23690:150;:::o;21516:234::-;21628:5;21605:28;;:9;:19;21615:8;21605:19;;;;;;;;;;;;;;;;;;;;;:28;;;21635:9;;;;;;;;;;;;;;;;;21597:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21710:1;21681:19;:26;21701:5;21681:26;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;21652:19;:26;21672:5;21652:26;;;;;;;;;;;;;;;:59;;;;21725:9;:19;21735:8;21725:19;;;;;;;;;;;;21718:26;;;;;;;;;;;21516:234;;:::o;22017:240::-;22132:1;22101:33;;:9;:19;22111:8;22101:19;;;;;;;;;;;;;;;;;;;;;:33;;;22136:18;;;;;;;;;;;;;;;;;22093:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22186:3;22164:9;:19;22174:8;22164:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;22250:1;22223:19;:24;22243:3;22223:24;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;22196:19;:24;22216:3;22196:24;;;;;;;;;;;;;;;:55;;;;22017:240;;:::o;7529:780::-;7612:17;8053:16;8076:19;8098:66;8076:88;;;;8206:5;8194:18;8182:30;;8272:3;8260:15;;:8;:15;;:42;;;;;8291:11;8279:8;:23;;8260:42;8244:59;;7529:780;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;;374:6;361:20;352:29;;390:32;416:5;390:32;:::i;:::-;342:86;;;;:::o;434:141::-;;521:6;515:13;506:22;;537:32;563:5;537:32;:::i;:::-;496:79;;;;:::o;594:351::-;;;711:3;704:4;696:6;692:17;688:27;678:2;;729:1;726;719:12;678:2;765:6;752:20;742:30;;795:18;787:6;784:30;781:2;;;827:1;824;817:12;781:2;864:4;856:6;852:17;840:29;;918:3;910:4;902:6;898:17;888:8;884:32;881:41;878:2;;;935:1;932;925:12;878:2;668:277;;;;;:::o;951:139::-;;1035:6;1022:20;1013:29;;1051:33;1078:5;1051:33;:::i;:::-;1003:87;;;;:::o;1096:262::-;;1204:2;1192:9;1183:7;1179:23;1175:32;1172:2;;;1220:1;1217;1210:12;1172:2;1263:1;1288:53;1333:7;1324:6;1313:9;1309:22;1288:53;:::i;:::-;1278:63;;1234:117;1162:196;;;;:::o;1364:407::-;;;1489:2;1477:9;1468:7;1464:23;1460:32;1457:2;;;1505:1;1502;1495:12;1457:2;1548:1;1573:53;1618:7;1609:6;1598:9;1594:22;1573:53;:::i;:::-;1563:63;;1519:117;1675:2;1701:53;1746:7;1737:6;1726:9;1722:22;1701:53;:::i;:::-;1691:63;;1646:118;1447:324;;;;;:::o;1777:552::-;;;;1919:2;1907:9;1898:7;1894:23;1890:32;1887:2;;;1935:1;1932;1925:12;1887:2;1978:1;2003:53;2048:7;2039:6;2028:9;2024:22;2003:53;:::i;:::-;1993:63;;1949:117;2105:2;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2076:118;2233:2;2259:53;2304:7;2295:6;2284:9;2280:22;2259:53;:::i;:::-;2249:63;;2204:118;1877:452;;;;;:::o;2335:829::-;;;;;;2513:3;2501:9;2492:7;2488:23;2484:33;2481:2;;;2530:1;2527;2520:12;2481:2;2573:1;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2544:117;2700:2;2726:53;2771:7;2762:6;2751:9;2747:22;2726:53;:::i;:::-;2716:63;;2671:118;2828:2;2854:53;2899:7;2890:6;2879:9;2875:22;2854:53;:::i;:::-;2844:63;;2799:118;2984:2;2973:9;2969:18;2956:32;3015:18;3007:6;3004:30;3001:2;;;3047:1;3044;3037:12;3001:2;3083:64;3139:7;3130:6;3119:9;3115:22;3083:64;:::i;:::-;3065:82;;;;2927:230;2471:693;;;;;;;;:::o;3170:401::-;;;3292:2;3280:9;3271:7;3267:23;3263:32;3260:2;;;3308:1;3305;3298:12;3260:2;3351:1;3376:53;3421:7;3412:6;3401:9;3397:22;3376:53;:::i;:::-;3366:63;;3322:117;3478:2;3504:50;3546:7;3537:6;3526:9;3522:22;3504:50;:::i;:::-;3494:60;;3449:115;3250:321;;;;;:::o;3577:407::-;;;3702:2;3690:9;3681:7;3677:23;3673:32;3670:2;;;3718:1;3715;3708:12;3670:2;3761:1;3786:53;3831:7;3822:6;3811:9;3807:22;3786:53;:::i;:::-;3776:63;;3732:117;3888:2;3914:53;3959:7;3950:6;3939:9;3935:22;3914:53;:::i;:::-;3904:63;;3859:118;3660:324;;;;;:::o;3990:260::-;;4097:2;4085:9;4076:7;4072:23;4068:32;4065:2;;;4113:1;4110;4103:12;4065:2;4156:1;4181:52;4225:7;4216:6;4205:9;4201:22;4181:52;:::i;:::-;4171:62;;4127:116;4055:195;;;;:::o;4256:282::-;;4374:2;4362:9;4353:7;4349:23;4345:32;4342:2;;;4390:1;4387;4380:12;4342:2;4433:1;4458:63;4513:7;4504:6;4493:9;4489:22;4458:63;:::i;:::-;4448:73;;4404:127;4332:206;;;;:::o;4544:262::-;;4652:2;4640:9;4631:7;4627:23;4623:32;4620:2;;;4668:1;4665;4658:12;4620:2;4711:1;4736:53;4781:7;4772:6;4761:9;4757:22;4736:53;:::i;:::-;4726:63;;4682:117;4610:196;;;;:::o;4812:407::-;;;4937:2;4925:9;4916:7;4912:23;4908:32;4905:2;;;4953:1;4950;4943:12;4905:2;4996:1;5021:53;5066:7;5057:6;5046:9;5042:22;5021:53;:::i;:::-;5011:63;;4967:117;5123:2;5149:53;5194:7;5185:6;5174:9;5170:22;5149:53;:::i;:::-;5139:63;;5094:118;4895:324;;;;;:::o;5225:407::-;;;5350:2;5338:9;5329:7;5325:23;5321:32;5318:2;;;5366:1;5363;5356:12;5318:2;5409:1;5434:53;5479:7;5470:6;5459:9;5455:22;5434:53;:::i;:::-;5424:63;;5380:117;5536:2;5562:53;5607:7;5598:6;5587:9;5583:22;5562:53;:::i;:::-;5552:63;;5507:118;5308:324;;;;;:::o;5638:179::-;;5728:46;5770:3;5762:6;5728:46;:::i;:::-;5806:4;5801:3;5797:14;5783:28;;5718:99;;;;:::o;5823:118::-;5910:24;5928:5;5910:24;:::i;:::-;5905:3;5898:37;5888:53;;:::o;5977:732::-;;6125:54;6173:5;6125:54;:::i;:::-;6195:86;6274:6;6269:3;6195:86;:::i;:::-;6188:93;;6305:56;6355:5;6305:56;:::i;:::-;6384:7;6415:1;6400:284;6425:6;6422:1;6419:13;6400:284;;;6501:6;6495:13;6528:63;6587:3;6572:13;6528:63;:::i;:::-;6521:70;;6614:60;6667:6;6614:60;:::i;:::-;6604:70;;6460:224;6447:1;6444;6440:9;6435:14;;6400:284;;;6404:14;6700:3;6693:10;;6101:608;;;;;;;:::o;6715:109::-;6796:21;6811:5;6796:21;:::i;:::-;6791:3;6784:34;6774:50;;:::o;6830:360::-;;6944:38;6976:5;6944:38;:::i;:::-;6998:70;7061:6;7056:3;6998:70;:::i;:::-;6991:77;;7077:52;7122:6;7117:3;7110:4;7103:5;7099:16;7077:52;:::i;:::-;7154:29;7176:6;7154:29;:::i;:::-;7149:3;7145:39;7138:46;;6920:270;;;;;:::o;7196:364::-;;7312:39;7345:5;7312:39;:::i;:::-;7367:71;7431:6;7426:3;7367:71;:::i;:::-;7360:78;;7447:52;7492:6;7487:3;7480:4;7473:5;7469:16;7447:52;:::i;:::-;7524:29;7546:6;7524:29;:::i;:::-;7519:3;7515:39;7508:46;;7288:272;;;;;:::o;7566:108::-;7643:24;7661:5;7643:24;:::i;:::-;7638:3;7631:37;7621:53;;:::o;7680:118::-;7767:24;7785:5;7767:24;:::i;:::-;7762:3;7755:37;7745:53;;:::o;7804:222::-;;7935:2;7924:9;7920:18;7912:26;;7948:71;8016:1;8005:9;8001:17;7992:6;7948:71;:::i;:::-;7902:124;;;;:::o;8032:640::-;;8265:3;8254:9;8250:19;8242:27;;8279:71;8347:1;8336:9;8332:17;8323:6;8279:71;:::i;:::-;8360:72;8428:2;8417:9;8413:18;8404:6;8360:72;:::i;:::-;8442;8510:2;8499:9;8495:18;8486:6;8442:72;:::i;:::-;8561:9;8555:4;8551:20;8546:2;8535:9;8531:18;8524:48;8589:76;8660:4;8651:6;8589:76;:::i;:::-;8581:84;;8232:440;;;;;;;:::o;8678:541::-;;8887:3;8876:9;8872:19;8864:27;;8901:71;8969:1;8958:9;8954:17;8945:6;8901:71;:::i;:::-;8982:66;9044:2;9033:9;9029:18;9020:6;8982:66;:::i;:::-;9058:72;9126:2;9115:9;9111:18;9102:6;9058:72;:::i;:::-;9140;9208:2;9197:9;9193:18;9184:6;9140:72;:::i;:::-;8854:365;;;;;;;:::o;9225:373::-;;9406:2;9395:9;9391:18;9383:26;;9455:9;9449:4;9445:20;9441:1;9430:9;9426:17;9419:47;9483:108;9586:4;9577:6;9483:108;:::i;:::-;9475:116;;9373:225;;;;:::o;9604:210::-;;9729:2;9718:9;9714:18;9706:26;;9742:65;9804:1;9793:9;9789:17;9780:6;9742:65;:::i;:::-;9696:118;;;;:::o;9820:313::-;;9971:2;9960:9;9956:18;9948:26;;10020:9;10014:4;10010:20;10006:1;9995:9;9991:17;9984:47;10048:78;10121:4;10112:6;10048:78;:::i;:::-;10040:86;;9938:195;;;;:::o;10139:222::-;;10270:2;10259:9;10255:18;10247:26;;10283:71;10351:1;10340:9;10336:17;10327:6;10283:71;:::i;:::-;10237:124;;;;:::o;10367:132::-;;10457:3;10449:11;;10487:4;10482:3;10478:14;10470:22;;10439:60;;;:::o;10505:114::-;;10606:5;10600:12;10590:22;;10579:40;;;:::o;10625:98::-;;10710:5;10704:12;10694:22;;10683:40;;;:::o;10729:99::-;;10815:5;10809:12;10799:22;;10788:40;;;:::o;10834:113::-;;10936:4;10931:3;10927:14;10919:22;;10909:38;;;:::o;10953:184::-;;11086:6;11081:3;11074:19;11126:4;11121:3;11117:14;11102:29;;11064:73;;;;:::o;11143:168::-;;11260:6;11255:3;11248:19;11300:4;11295:3;11291:14;11276:29;;11238:73;;;;:::o;11317:169::-;;11435:6;11430:3;11423:19;11475:4;11470:3;11466:14;11451:29;;11413:73;;;;:::o;11492:305::-;;11551:20;11569:1;11551:20;:::i;:::-;11546:25;;11585:20;11603:1;11585:20;:::i;:::-;11580:25;;11739:1;11671:66;11667:74;11664:1;11661:81;11658:2;;;11745:18;;:::i;:::-;11658:2;11789:1;11786;11782:9;11775:16;;11536:261;;;;:::o;11803:848::-;;;11895:6;11886:15;;11919:5;11910:14;;11933:712;11954:1;11944:8;11941:15;11933:712;;;12049:4;12044:3;12040:14;12034:4;12031:24;12028:2;;;12058:18;;:::i;:::-;12028:2;12108:1;12098:8;12094:16;12091:2;;;12523:4;12516:5;12512:16;12503:25;;12091:2;12573:4;12567;12563:15;12555:23;;12603:32;12626:8;12603:32;:::i;:::-;12591:44;;11933:712;;;11876:775;;;;;;;:::o;12657:281::-;;12739:23;12757:4;12739:23;:::i;:::-;12731:31;;12783:25;12799:8;12783:25;:::i;:::-;12771:37;;12827:104;12864:66;12854:8;12848:4;12827:104;:::i;:::-;12818:113;;12721:217;;;;:::o;12944:1073::-;;13189:8;13179:2;;13210:1;13201:10;;13212:5;;13179:2;13238:4;13228:2;;13255:1;13246:10;;13257:5;;13228:2;13324:4;13372:1;13367:27;;;;13408:1;13403:191;;;;13317:277;;13367:27;13385:1;13376:10;;13387:5;;;13403:191;13448:3;13438:8;13435:17;13432:2;;;13455:18;;:::i;:::-;13432:2;13504:8;13501:1;13497:16;13488:25;;13539:3;13532:5;13529:14;13526:2;;;13546:18;;:::i;:::-;13526:2;13579:5;;;13317:277;;13703:2;13693:8;13690:16;13684:3;13678:4;13675:13;13671:36;13653:2;13643:8;13640:16;13635:2;13629:4;13626:12;13622:35;13606:111;13603:2;;;13759:8;13753:4;13749:19;13740:28;;13794:3;13787:5;13784:14;13781:2;;;13801:18;;:::i;:::-;13781:2;13834:5;;13603:2;13874:42;13912:3;13902:8;13896:4;13893:1;13874:42;:::i;:::-;13859:57;;;;13948:4;13943:3;13939:14;13932:5;13929:25;13926:2;;;13957:18;;:::i;:::-;13926:2;14006:4;13999:5;13995:16;13986:25;;13004:1013;;;;;;:::o;14023:348::-;;14086:20;14104:1;14086:20;:::i;:::-;14081:25;;14120:20;14138:1;14120:20;:::i;:::-;14115:25;;14308:1;14240:66;14236:74;14233:1;14230:81;14225:1;14218:9;14211:17;14207:105;14204:2;;;14315:18;;:::i;:::-;14204:2;14363:1;14360;14356:9;14345:20;;14071:300;;;;:::o;14377:191::-;;14437:20;14455:1;14437:20;:::i;:::-;14432:25;;14471:20;14489:1;14471:20;:::i;:::-;14466:25;;14510:1;14507;14504:8;14501:2;;;14515:18;;:::i;:::-;14501:2;14560:1;14557;14553:9;14545:17;;14422:146;;;;:::o;14574:96::-;;14640:24;14658:5;14640:24;:::i;:::-;14629:35;;14619:51;;;:::o;14676:90::-;;14753:5;14746:13;14739:21;14728:32;;14718:48;;;:::o;14772:149::-;;14848:66;14841:5;14837:78;14826:89;;14816:105;;;:::o;14927:126::-;;15004:42;14997:5;14993:54;14982:65;;14972:81;;;:::o;15059:77::-;;15125:5;15114:16;;15104:32;;;:::o;15142:86::-;;15217:4;15210:5;15206:16;15195:27;;15185:43;;;:::o;15234:307::-;15302:1;15312:113;15326:6;15323:1;15320:13;15312:113;;;15411:1;15406:3;15402:11;15396:18;15392:1;15387:3;15383:11;15376:39;15348:2;15345:1;15341:10;15336:15;;15312:113;;;15443:6;15440:1;15437:13;15434:2;;;15523:1;15514:6;15509:3;15505:16;15498:27;15434:2;15283:258;;;;:::o;15547:320::-;;15628:1;15622:4;15618:12;15608:22;;15675:1;15669:4;15665:12;15696:18;15686:2;;15752:4;15744:6;15740:17;15730:27;;15686:2;15814;15806:6;15803:14;15783:18;15780:38;15777:2;;;15833:18;;:::i;:::-;15777:2;15598:269;;;;:::o;15873:233::-;;15935:24;15953:5;15935:24;:::i;:::-;15926:33;;15981:66;15974:5;15971:77;15968:2;;;16051:18;;:::i;:::-;15968:2;16098:1;16091:5;16087:13;16080:20;;15916:190;;;:::o;16112:180::-;16160:77;16157:1;16150:88;16257:4;16254:1;16247:15;16281:4;16278:1;16271:15;16298:180;16346:77;16343:1;16336:88;16443:4;16440:1;16433:15;16467:4;16464:1;16457:15;16484:102;;16576:2;16572:7;16567:2;16560:5;16556:14;16552:28;16542:38;;16532:54;;;:::o;16592:102::-;;16681:5;16678:1;16674:13;16653:34;;16643:51;;;:::o;16700:122::-;16773:24;16791:5;16773:24;:::i;:::-;16766:5;16763:35;16753:2;;16812:1;16809;16802:12;16753:2;16743:79;:::o;16828:116::-;16898:21;16913:5;16898:21;:::i;:::-;16891:5;16888:32;16878:2;;16934:1;16931;16924:12;16878:2;16868:76;:::o;16950:120::-;17022:23;17039:5;17022:23;:::i;:::-;17015:5;17012:34;17002:2;;17060:1;17057;17050:12;17002:2;16992:78;:::o;17076:122::-;17149:24;17167:5;17149:24;:::i;:::-;17142:5;17139:35;17129:2;;17188:1;17185;17178:12;17129:2;17119:79;:::o

Swarm Source

ipfs://812b461eee37befc9ba10c5f83b2b794f53b2222d9cdbe25b763c27c6b4188b4
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.