Contract 0xd5aD3244F8a85D6916B8472Ff7C5b3201d2164ed

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x47d2698c8592604eda40d40ef003708cd2edbefd9300f484ed24a1df017585dfMint115863732021-10-08 6:02:0214 days 10 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173681
0x69f2feeed8e6b44bfa8985d0fc09eacded14aad96acbe6b4ed5073b08bd6978dMint115619142021-10-07 9:38:0115 days 7 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00747893
0x153de69967d27b22d8e5b7c0c6b9827e736731a40c4e5d0c23bb2f5514c6a62fMint114739852021-10-04 8:16:0818 days 8 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00203681
0x0c64f13537a1ee15fbd5da869911dba54901bb14c8bbc3d0085e2e8deafcb823Mint105009622021-08-31 7:04:3552 days 9 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00747893
0x001bded3a7236554b8be7e114ed8a5bcf488d4287525de71d8f95551104dc79aMint104229182021-08-28 13:18:3355 days 3 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.001698665
0xd1d126d87085db101bdcec55524e7c288ae6bde08dc6ed0498c2f2bab2ae2f77Mint104228592021-08-28 13:15:2955 days 3 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00203681
0x7d7dc2d3c1867b29d8970d333ed969dc7cbd65c629aa2ffb10cf9c6054e2a68cMint104212732021-08-28 11:54:3055 days 4 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00203681
0xf7c3a21d6e060a6280e9816a0c6a754bb8cc1364d9d614bc8976c4ea04566e37Mint99347232021-08-11 10:03:3672 days 6 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00203681
0x4d66e437170bcb6a9580ba7d9cdeb787a4b3ec133a4724233813775e786fcc66Mint94300122021-07-24 6:39:3690 days 10 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00203681
0x9f76c6e0b2c4a5ab8319ec16aa4ac4667bb90262e7057618cacd1e6ff7ef0730Mint85208232021-06-22 14:26:46122 days 2 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00203681
0x390b4cb1c2b78ca8dbbd031e7e3127af9df06736dc51be1e7018d9d9ccd38b8bMint81753722021-06-10 12:23:22134 days 4 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0xb07af0d3156f6a96370929a65b9707fa3cac0e052c096e4ba7c4062f63df1ed3Mint81753022021-06-10 12:19:52134 days 4 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0xc4b76b2481e41935a882cc6880a2b73c1c171431b0dbc3069f05e561287db1deMint81752462021-06-10 12:17:04134 days 4 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x4eb66737e296808c36797dc36ba488dc74be5df67743d78460e1bb41f66bbbadMint81751682021-06-10 12:13:10134 days 4 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x04a4cace04595ec32daba84d667082bea98d97447a220f44b6575487ea162e51Mint81751072021-06-10 12:10:07134 days 4 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x2b17209274c70995de30c87f70753480abf477232b66d2278873268aa1860068Mint81743592021-06-10 11:32:43134 days 5 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0xabab6986b5c2d6f2c12db2cd905d491d08aee20c3cbbedb4d090412434183f18Mint81742722021-06-10 11:28:20134 days 5 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x421f330f797d1f3cb5f134fc935133a85909754099d4cb559ed34dcbd49a4912Mint81741792021-06-10 11:23:41134 days 5 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0xaf2f8257d47922ca99523f7bb3da6c66babc5ddff4da512da2fa4ac62f0d9dc7Mint81741012021-06-10 11:19:47134 days 5 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x1ea07942557799a4af35906ccab0fb5670f9ae1841897c89089ab053297305cbMint81739632021-06-10 11:12:53134 days 5 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x3656febf6452632cc65472296fb14d154b158dfc1c826dd1e470029efd8c77a4Mint81738962021-06-10 11:09:32134 days 5 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0xb1db0e2971747f06c8b1d5a944fe5fdb414721d30d263786bdd2749520f1a842Mint81719502021-06-10 9:32:14134 days 7 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0xa40551537e018c3c8df683dabd42d11422888468b746fc6abe6ab515430c8c9eMint81717792021-06-10 9:23:41134 days 7 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x3cb9d0d75535d0ee86bdaa7dfad4574508734339f0bb60f5abc06fab7fcec8bbMint81716732021-06-10 9:18:23134 days 7 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
0x1f8c5e66ff0119537d666ac22aa9f8b63fa40e393604b71800fa8f5ebc3c7b7dMint81715772021-06-10 9:13:35134 days 7 hrs ago(ARTW): Deployer IN  0xd5ad3244f8a85d6916b8472ff7c5b3201d2164ed0 BNB0.00173669
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ARTW

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 BscScan.com on 2021-06-08
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;

/**
 * @dev The contract has an owner address, and provides basic authorization control whitch
 * simplifies the implementation of user permissions. This contract is based on the source code at:
 * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol
 */
contract Ownable
{

  /**
   * @dev Error constants.
   */
  string public constant NOT_CURRENT_OWNER = "018001";
  string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002";

  /**
   * @dev Current owner address.
   */
  address public owner;
  mapping(address => uint256[]) tokensowned;
  /**
   * @dev An event which is triggered when the owner is changed.
   * @param previousOwner The address of the previous owner.
   * @param newOwner The address of the new owner.
   */
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );

  /**
   * @dev The constructor sets the original `owner` of the contract to the sender account.
   */
  constructor()
  {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner()
  {
    require(msg.sender == owner, NOT_CURRENT_OWNER);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(
    address _newOwner
  )
    public
    onlyOwner
  {
    require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS);
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }

function _changeholder(address from,address _to,uint256 tokenId) internal{
        uint i = 0;
        while (tokensowned[from][i] != tokenId) {
            i++;
        }
        
        while (i<tokensowned[from].length-1) {
            tokensowned[from][i] = tokensowned[from][i+1];
            i++;
        }
        tokensowned[from].pop();
        tokensowned[_to].push(tokenId);
}



}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/erc721-metadata.sol


pragma solidity 0.8.0;

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

  /**
   * @dev Returns a descriptive name for a collection of NFTs in this contract.
   * @return _name Representing name.
   */
  function name()
    external
    view
    returns (string memory _name);

  /**
   * @dev Returns a abbreviated name for a collection of NFTs in this contract.
   * @return _symbol Representing symbol.
   */
  function symbol()
    external
    view
    returns (string memory _symbol);

  /**
   * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if
   * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file
   * that conforms to the "ERC721 Metadata JSON Schema".
   * @return URI of _tokenId.
   */
  function tokenURI(uint256 _tokenId)
    external
    view
    returns (string memory);

}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/utils/address-utils.sol


pragma solidity 0.8.0;

/**
 * @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);
  }

}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/utils/erc165.sol

pragma solidity 0.8.0;

/**
 * @dev A standard for detecting smart contract interfaces. 
 * See: https://eips.ethereum.org/EIPS/eip-165.
 */
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);
    
}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/utils/supports-interface.sol

pragma solidity 0.8.0;


/**
 * @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];
  }

}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/erc721-token-receiver.sol

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

}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/erc721.sol

pragma solidity 0.8.0;

/**
 * @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);

}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token.sol

pragma solidity 0.8.0;





/**
 * @dev Implementation of ERC-721 non-fungible token standard.
 */
contract NFToken is
  Ownable,
  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";

  /**
   * @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.
   */
  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
  }

  /**
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @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
    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 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);
  }

  /**
   * @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);

    emit Transfer(from, _to, _tokenId);
    _changeholder(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);

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

}

// File: https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol


pragma solidity 0.8.0;



/**
 * @dev Optional metadata implementation for ERC-721 non-fungible token standard.
 */
contract NFTokenMetadata is
  NFToken,
  ERC721Metadata
{

  /**
   * @dev A descriptive name for a collection of NFTs.
   */
  string internal nftName;

  /**
   * @dev An abbreviated name for NFTokens.
   */
  string internal nftSymbol;

  /**
   * @dev Mapping from NFT ID to metadata uri.
   */
  mapping (uint256 => string) internal idToUri;

  /**
   * @dev Contract constructor.
   * @notice When implementing this contract don't forget to set nftName and nftSymbol.
   */
  constructor()
  {
    supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata
  }

  /**
   * @dev Returns a descriptive name for a collection of NFTokens.
   * @return _name Representing name.
   */
  function name()
    external
    override
    view
    returns (string memory _name)
  {
    _name = nftName;
  }

  /**
   * @dev Returns an abbreviated name for NFTokens.
   * @return _symbol Representing symbol.
   */
  function symbol()
    external
    override
    view
    returns (string memory _symbol)
  {
    _symbol = nftSymbol;
  }

  /**
   * @dev A distinct URI (RFC 3986) for a given NFT.
   * @param _tokenId Id for which we want uri.
   * @return URI of _tokenId.
   */
  function tokenURI(
    uint256 _tokenId
  )
    external
    override
    view
    validNFToken(_tokenId)
    returns (string memory)
  {
    return idToUri[_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
    override
    virtual
  {
    super._burn(_tokenId);

    if (bytes(idToUri[_tokenId]).length != 0)
    {
      delete idToUri[_tokenId];
    }
  }

  /**
   * @dev Set a distinct URI (RFC 3986) for a given NFT ID.
   * @notice This is an internal function which should be called from user-implemented external
   * function. Its purpose is to show and properly initialize data structures when using this
   * implementation.
   * @param _tokenId Id for which we want URI.
   * @param _uri String representing RFC 3986 URI.
   */
  function _setTokenUri(
    uint256 _tokenId,
    string memory _uri
  )
    internal
    validNFToken(_tokenId)
  {
    idToUri[_tokenId] = _uri;
  }

}

// File: contracts/artw.sol

pragma solidity 0.8.0;


 
contract ARTW is NFTokenMetadata {
 
 
 uint256 _tokenId;
  constructor() {
    nftName = "ART WORK";
    nftSymbol = "ARTW";
    _tokenId=1;
  }
 
   function mint (address _to,uint256 no_of_tokens_to_create, string calldata _uri) external onlyOwner {
      
    uint256 n= no_of_tokens_to_create;
    uint j;
    for (j =1; j<=n; j++) {  
        
    super._mint(_to, _tokenId);
    super._setTokenUri(_tokenId, _uri);
    tokensowned[_to].push(_tokenId);
    _tokenId+=1;
    
      }
  } 
 
    function tokensOwned(address holder) external view returns (uint256[] memory) {
	return tokensowned[holder];
  }
 
   function totalSupply() external view returns (uint){
    return _tokenId-1;
  } 
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"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":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"no_of_tokens_to_create","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_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":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"tokensOwned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600260006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600160026000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060400160405280600881526020017f41525420574f524b0000000000000000000000000000000000000000000000008152506007908051906020019062000195929190620001f2565b506040518060400160405280600481526020017f415254570000000000000000000000000000000000000000000000000000000081525060089080519060200190620001e3929190620001f2565b506001600a8190555062000307565b8280546200020090620002a2565b90600052602060002090601f01602090048101928262000224576000855562000270565b82601f106200023f57805160ff191683800117855562000270565b8280016001018555821562000270579182015b828111156200026f57825182559160200191906001019062000252565b5b5090506200027f919062000283565b5090565b5b808211156200029e57600081600090555060010162000284565b5090565b60006002820490506001821680620002bb57607f821691505b60208210811415620002d257620002d1620002d8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6133c880620003176000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063860d248a116100ad578063c87b56dd11610071578063c87b56dd14610343578063d3fc986414610373578063e985e9c51461038f578063f2fde38b146103bf578063f3fe3bc3146103db5761012c565b8063860d248a146102b15780638da5cb5b146102cf57806395d89b41146102ed578063a22cb4651461030b578063b88d4fde146103275761012c565b806321cda790116100f457806321cda790146101e957806323b872dd1461021957806342842e0e146102355780636352211e1461025157806370a08231146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806318160ddd146101cb575b600080fd5b61014b60048036038101906101469190612e2a565b6103f9565b6040516101589190613052565b60405180910390f35b610169610461565b604051610176919061306d565b60405180910390f35b61019960048036038101906101949190612e7c565b6104f3565b6040516101a69190612fc9565b60405180910390f35b6101c960048036038101906101c49190612d82565b61060e565b005b6101d36109f1565b6040516101e0919061308f565b60405180910390f35b61020360048036038101906101fe9190612c12565b610a07565b6040516102109190613030565b60405180910390f35b610233600480360381019061022e9190612c77565b610a9e565b005b61024f600480360381019061024a9190612c77565b610ef0565b005b61026b60048036038101906102669190612e7c565b610f10565b6040516102789190612fc9565b60405180910390f35b61029b60048036038101906102969190612c12565b610ff6565b6040516102a8919061308f565b60405180910390f35b6102b96110b0565b6040516102c6919061306d565b60405180910390f35b6102d76110e9565b6040516102e49190612fc9565b60405180910390f35b6102f561110d565b604051610302919061306d565b60405180910390f35b61032560048036038101906103209190612d46565b61119f565b005b610341600480360381019061033c9190612cc6565b61129c565b005b61035d60048036038101906103589190612e7c565b6112f3565b60405161036a919061306d565b60405180910390f35b61038d60048036038101906103889190612dbe565b611476565b005b6103a960048036038101906103a49190612c3b565b611649565b6040516103b69190613052565b60405180910390f35b6103d960048036038101906103d49190612c12565b6116dd565b005b6103e361190a565b6040516103f0919061306d565b60405180910390f35b600060026000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600780546104709061324c565b80601f016020809104026020016040519081016040528092919081815260200182805461049c9061324c565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906105d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c8919061306d565b60405180910390fd5b506004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806107075750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f30303330303300000000000000000000000000000000000000000000000000008152509061077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775919061306d565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303200000000000000000000000000000000000000000000000000008152509061085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852919061306d565b60405180910390fd5b5060006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303800000000000000000000000000000000000000000000000000008152509061093b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610932919061306d565b60405180910390fd5b50856004600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b60006001600a54610a029190613171565b905090565b6060600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a9257602002820191906000526020600020905b815481526020019060010190808311610a7e575b50505050509050919050565b8060006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610b6f57503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610c005750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e919061306d565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b919061306d565b60405180910390fd5b5060006003600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a919061306d565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed3919061306d565b60405180910390fd5b50610ee78686611943565b50505050505050565b610f0b83838360405180602001604052806000815250611a03565b505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe7919061306d565b60405180910390fd5b50919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303100000000000000000000000000000000000000000000000000008152509061109f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611096919061306d565b60405180910390fd5b506110a982611fd1565b9050919050565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606008805461111c9061324c565b80601f01602080910402602001604051908101604052809291908181526020018280546111489061324c565b80156111955780601f1061116a57610100808354040283529160200191611195565b820191906000526020600020905b81548152906001019060200180831161117857829003601f168201915b5050505050905090565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112909190613052565b60405180910390a35050565b6112ec85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611a03565b5050505050565b606081600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c8919061306d565b60405180910390fd5b506009600084815260200190815260200160002080546113f09061324c565b80601f016020809104026020016040519081016040528092919081815260200182805461141c9061324c565b80156114695780601f1061143e57610100808354040283529160200191611469565b820191906000526020600020905b81548152906001019060200180831161144c57829003601f168201915b5050505050915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061153c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611533919061306d565b60405180910390fd5b5060008390506000600190505b8181116116415761155c86600a5461201a565b6115ac600a5485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612208565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600a5490806001815401808255809150506001900390600052602060002001600090919091909150556001600a6000828254611627919061311b565b9250508190555080806116399061327e565b915050611549565b505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a919061306d565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30313830303200000000000000000000000000000000000000000000000000008152509061184c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611843919061306d565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061198482612312565b61198e81836123b3565b6119988383612556565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119fe818484612716565b505050565b8160006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611ad457503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611b655750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd3919061306d565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb0919061306d565b60405180910390fd5b5060006003600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f919061306d565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e38919061306d565b60405180910390fd5b50611e4c8787611943565b611e6b8773ffffffffffffffffffffffffffffffffffffffff16612a27565b15611fc75760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401611eb19493929190612fe4565b602060405180830381600087803b158015611ecb57600080fd5b505af1158015611edf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f039190612e53565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f303033303035000000000000000000000000000000000000000000000000000081525090611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb919061306d565b60405180910390fd5b50505b5050505050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030310000000000000000000000000000000000000000000000000000815250906120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b9919061306d565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303600000000000000000000000000000000000000000000000000008152509061219d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612194919061306d565b60405180910390fd5b506121a88282612556565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b81600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db919061306d565b60405180910390fd5b508160096000858152602001908152602001600020908051906020019061230c929190612a72565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b0576004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303700000000000000000000000000000000000000000000000000008152509061248c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612483919061306d565b60405180910390fd5b506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d99190613171565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303036000000000000000000000000000000000000000000000000000081525090612630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612627919061306d565b60405180910390fd5b50816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf919061311b565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60005b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612791577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154146127b45780806127ac9061327e565b915050612719565b5b60018060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506128039190613171565b81101561293057600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182612856919061311b565b8154811061288d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061290f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555080806129289061327e565b9150506127b5565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806129a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082908060018154018082558091505060019003906000526020600020016000909190919091505550505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015612a695750808214155b92505050919050565b828054612a7e9061324c565b90600052602060002090601f016020900481019282612aa05760008555612ae7565b82601f10612ab957805160ff1916838001178555612ae7565b82800160010185558215612ae7579182015b82811115612ae6578251825591602001919060010190612acb565b5b509050612af49190612af8565b5090565b5b80821115612b11576000816000905550600101612af9565b5090565b600081359050612b2481613336565b92915050565b600081359050612b398161334d565b92915050565b600081359050612b4e81613364565b92915050565b600081519050612b6381613364565b92915050565b60008083601f840112612b7b57600080fd5b8235905067ffffffffffffffff811115612b9457600080fd5b602083019150836001820283011115612bac57600080fd5b9250929050565b60008083601f840112612bc557600080fd5b8235905067ffffffffffffffff811115612bde57600080fd5b602083019150836001820283011115612bf657600080fd5b9250929050565b600081359050612c0c8161337b565b92915050565b600060208284031215612c2457600080fd5b6000612c3284828501612b15565b91505092915050565b60008060408385031215612c4e57600080fd5b6000612c5c85828601612b15565b9250506020612c6d85828601612b15565b9150509250929050565b600080600060608486031215612c8c57600080fd5b6000612c9a86828701612b15565b9350506020612cab86828701612b15565b9250506040612cbc86828701612bfd565b9150509250925092565b600080600080600060808688031215612cde57600080fd5b6000612cec88828901612b15565b9550506020612cfd88828901612b15565b9450506040612d0e88828901612bfd565b935050606086013567ffffffffffffffff811115612d2b57600080fd5b612d3788828901612b69565b92509250509295509295909350565b60008060408385031215612d5957600080fd5b6000612d6785828601612b15565b9250506020612d7885828601612b2a565b9150509250929050565b60008060408385031215612d9557600080fd5b6000612da385828601612b15565b9250506020612db485828601612bfd565b9150509250929050565b60008060008060608587031215612dd457600080fd5b6000612de287828801612b15565b9450506020612df387828801612bfd565b935050604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612bb3565b925092505092959194509250565b600060208284031215612e3c57600080fd5b6000612e4a84828501612b3f565b91505092915050565b600060208284031215612e6557600080fd5b6000612e7384828501612b54565b91505092915050565b600060208284031215612e8e57600080fd5b6000612e9c84828501612bfd565b91505092915050565b6000612eb18383612fab565b60208301905092915050565b612ec6816131a5565b82525050565b6000612ed7826130ba565b612ee181856130e8565b9350612eec836130aa565b8060005b83811015612f1d578151612f048882612ea5565b9750612f0f836130db565b925050600181019050612ef0565b5085935050505092915050565b612f33816131b7565b82525050565b6000612f44826130c5565b612f4e81856130f9565b9350612f5e818560208601613219565b612f6781613325565b840191505092915050565b6000612f7d826130d0565b612f87818561310a565b9350612f97818560208601613219565b612fa081613325565b840191505092915050565b612fb48161320f565b82525050565b612fc38161320f565b82525050565b6000602082019050612fde6000830184612ebd565b92915050565b6000608082019050612ff96000830187612ebd565b6130066020830186612ebd565b6130136040830185612fba565b81810360608301526130258184612f39565b905095945050505050565b6000602082019050818103600083015261304a8184612ecc565b905092915050565b60006020820190506130676000830184612f2a565b92915050565b600060208201905081810360008301526130878184612f72565b905092915050565b60006020820190506130a46000830184612fba565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006131268261320f565b91506131318361320f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613166576131656132c7565b5b828201905092915050565b600061317c8261320f565b91506131878361320f565b92508282101561319a576131996132c7565b5b828203905092915050565b60006131b0826131ef565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101561323757808201518184015260208101905061321c565b83811115613246576000848401525b50505050565b6000600282049050600182168061326457607f821691505b60208210811415613278576132776132f6565b5b50919050565b60006132898261320f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132bc576132bb6132c7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61333f816131a5565b811461334a57600080fd5b50565b613356816131b7565b811461336157600080fd5b50565b61336d816131c3565b811461337857600080fd5b50565b6133848161320f565b811461338f57600080fd5b5056fea2646970667358221220c3118296a5b17a3909ffd863ad54cfab3fab0f436620855ecb4c097f554d7df864736f6c63430008000033

Deployed ByteCode Sourcemap

29725:731:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6013:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27784:120;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21608:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19397:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30371:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30249:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18623:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17866:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21156:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20686:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;487:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;607:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28020:128;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20160:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17247:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28301:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29886:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22060:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1476:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;431:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6013:172;6123:4;6146:19;:33;6166:12;6146:33;;;;;;;;;;;;;;;;;;;;;;;;;;;6139:40;;6013:172;;;:::o;27784:120::-;27852:19;27891:7;27883:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27784:120;:::o;21608:183::-;21737:7;21713:8;16210:1;16179:33;;:9;:19;16189:8;16179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16214:13;;;;;;;;;;;;;;;;;16171:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21763:12:::1;:22;21776:8;21763:22;;;;;;;;;;;;;;;;;;;;;21756:29;;21608:183:::0;;;;:::o;19397:352::-;19510:8;15363:18;15384:9;:19;15394:8;15384:19;;;;;;;;;;;;;;;;;;;;;15363:40;;15440:10;15426:24;;:10;:24;;;:68;;;;15454:16;:28;15471:10;15454:28;;;;;;;;;;;;;;;:40;15483:10;15454:40;;;;;;;;;;;;;;;;;;;;;;;;;15426:68;15503:21;;;;;;;;;;;;;;;;;15410:121;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19538:8:::1;16210:1;16179:33;;:9;:19;16189:8;16179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16214:13;;;;;;;;;;;;;;;;::::0;16171:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19558:18:::2;19579:9;:19;19589:8;19579:19;;;;;;;;;;;;;;;;;;;;;19558:40;;19626:10;19613:23;;:9;:23;;;;19638:8;;;;;;;;;;;;;;;;::::0;19605:42:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19681:9;19656:12;:22;19669:8;19656:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19734:8;19723:9;19702:41;;19711:10;19702:41;;;;;;;;;;;;16235:1;15538::::1;19397:352:::0;;;;:::o;30371:81::-;30417:4;30445:1;30436:8;;:10;;;;:::i;:::-;30429:17;;30371:81;:::o;30249:114::-;30309:16;30338:11;:19;30350:6;30338:19;;;;;;;;;;;;;;;30331:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30249:114;;;:::o;18623:353::-;18756:8;15743:18;15764:9;:19;15774:8;15764:19;;;;;;;;;;;;;;;;;;;;;15743:40;;15820:10;15806:24;;:10;:24;;;:71;;;;15867:10;15841:36;;:12;:22;15854:8;15841:22;;;;;;;;;;;;;;;;;;;;;:36;;;15806:71;:122;;;;15888:16;:28;15905:10;15888:28;;;;;;;;;;;;;;;:40;15917:10;15888:40;;;;;;;;;;;;;;;;;;;;;;;;;15806:122;15937:30;;;;;;;;;;;;;;;;;15790:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18784:8:::1;16210:1;16179:33;;:9;:19;16189:8;16179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16214:13;;;;;;;;;;;;;;;;::::0;16171:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18804:18:::2;18825:9;:19;18835:8;18825:19;;;;;;;;;;;;;;;;;;;;;18804:40;;18873:5;18859:19;;:10;:19;;;18880:9;;;;;;;;;;;;;;;;::::0;18851:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18920:1;18905:17;;:3;:17;;;;18924:12;;;;;;;;;;;;;;;;::::0;18897:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18946:24;18956:3;18961:8;18946:9;:24::i;:::-;16235:1;15981::::1;18623:353:::0;;;;;:::o;17866:179::-;17996:43;18014:5;18021:3;18026:8;17996:43;;;;;;;;;;;;:17;:43::i;:::-;17866:179;;;:::o;21156:208::-;21253:14;21288:9;:19;21298:8;21288:19;;;;;;;;;;;;;;;;;;;;;21279:28;;21340:1;21322:20;;:6;:20;;;;21344:13;;;;;;;;;;;;;;;;;21314:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21156:208;;;:::o;20686:204::-;20783:7;20828:1;20810:20;;:6;:20;;;;20832:12;;;;;;;;;;;;;;;;;20802:43;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20859:25;20877:6;20859:17;:25::i;:::-;20852:32;;20686:204;;;:::o;487:65::-;;;;;;;;;;;;;;;;;;;:::o;607:20::-;;;;;;;;;;;;:::o;28020:128::-;28090:21;28133:9;28123:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28020:128;:::o;20160:232::-;20317:9;20275:16;:28;20292:10;20275:28;;;;;;;;;;;;;;;:39;20304:9;20275:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;20365:9;20338:48;;20353:10;20338:48;;;20376:9;20338:48;;;;;;:::i;:::-;;;;;;;;20160:232;;:::o;17247:209::-;17404:46;17422:5;17429:3;17434:8;17444:5;;17404:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;17247:209;;;;;:::o;28301:181::-;28427:13;28403:8;16210:1;16179:33;;:9;:19;16189:8;16179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16214:13;;;;;;;;;;;;;;;;;16171:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28459:7:::1;:17;28467:8;28459:17;;;;;;;;;;;28452:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28301:181:::0;;;;:::o;29886:353::-;1269:5;;;;;;;;;;1255:19;;:10;:19;;;1276:17;;;;;;;;;;;;;;;;;1247:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;30001:9:::1;30012:22;30001:33;;30041:6;30062:1;30059:4;;30054:180;30068:1;30065;:4;30054:180;;30095:26;30107:3;30112:8;;30095:11;:26::i;:::-;30128:34;30147:8;;30157:4;;30128:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;:34::i;:::-;30169:11;:16;30181:3;30169:16;;;;;;;;;;;;;;;30191:8;;30169:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30217:1;30207:8;;:11;;;;;;;:::i;:::-;;;;;;;;30071:3;;;;;:::i;:::-;;;;30054:180;;;1301:1;;29886:353:::0;;;;:::o;22060:192::-;22188:4;22211:16;:24;22228:6;22211:24;;;;;;;;;;;;;;;:35;22236:9;22211:35;;;;;;;;;;;;;;;;;;;;;;;;;22204:42;;22060:192;;;;:::o;1476:238::-;1269:5;;;;;;;;;;1255:19;;:10;:19;;;1276:17;;;;;;;;;;;;;;;;;1247:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1598:1:::1;1577:23;;:9;:23;;;;1602:31;;;;;;;;;;;;;;;;::::0;1569:65:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1674:9;1646:38;;1667:5;::::0;::::1;;;;;;;;1646:38;;;;;;;;;;;;1699:9;1691:5;::::0;:17:::1;;;;;;;;;;;;;;;;;;1476:238:::0;:::o;431:51::-;;;;;;;;;;;;;;;;;;;:::o;22443:314::-;22532:12;22547:9;:19;22557:8;22547:19;;;;;;;;;;;;;;;;;;;;;22532:34;;22573:24;22588:8;22573:14;:24::i;:::-;22606:30;22621:4;22627:8;22606:14;:30::i;:::-;22643:26;22655:3;22660:8;22643:11;:26::i;:::-;22703:8;22698:3;22683:29;;22692:4;22683:29;;;;;;;;;;;;22719:32;22733:4;22738:3;22742:8;22719:13;:32::i;:::-;22443:314;;;:::o;25938:590::-;26086:8;15743:18;15764:9;:19;15774:8;15764:19;;;;;;;;;;;;;;;;;;;;;15743:40;;15820:10;15806:24;;:10;:24;;;:71;;;;15867:10;15841:36;;:12;:22;15854:8;15841:22;;;;;;;;;;;;;;;;;;;;;:36;;;15806:71;:122;;;;15888:16;:28;15905:10;15888:28;;;;;;;;;;;;;;;:40;15917:10;15888:40;;;;;;;;;;;;;;;;;;;;;;;;;15806:122;15937:30;;;;;;;;;;;;;;;;;15790:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26114:8:::1;16210:1;16179:33;;:9;:19;16189:8;16179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16214:13;;;;;;;;;;;;;;;;::::0;16171:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26134:18:::2;26155:9;:19;26165:8;26155:19;;;;;;;;;;;;;;;;;;;;;26134:40;;26203:5;26189:19;;:10;:19;;;26210:9;;;;;;;;;;;;;;;;::::0;26181:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26250:1;26235:17;;:3;:17;;;;26254:12;;;;;;;;;;;;;;;;::::0;26227:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26276:24;26286:3;26291:8;26276:9;:24::i;:::-;26313:16;:3;:14;;;:16::i;:::-;26309:214;;;26345:13;26381:3;26361:41;;;26403:10;26415:5;26422:8;26432:5;26361:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26345:93;;14583:10;26465:24;;26455:34;;;:6;:34;;;;26491:23;;;;;;;;;;;;;;;;::::0;26447:68:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26309:214;;16235:1;15981::::1;25938:590:::0;;;;;;:::o;25497:163::-;25601:7;25627:19;:27;25647:6;25627:27;;;;;;;;;;;;;;;;25620:34;;25497:163;;;:::o;23148:297::-;23269:1;23254:17;;:3;:17;;;;23273:12;;;;;;;;;;;;;;;;;23246:40;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23332:1;23301:33;;:9;:19;23311:8;23301:19;;;;;;;;;;;;;;;;;;;;;:33;;;23336:18;;;;;;;;;;;;;;;;;23293:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23364:26;23376:3;23381:8;23364:11;:26::i;:::-;23430:8;23425:3;23404:35;;23421:1;23404:35;;;;;;;;;;;;23148:297;;:::o;29497:157::-;29604:8;16210:1;16179:33;;:9;:19;16189:8;16179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;16214:13;;;;;;;;;;;;;;;;;16171:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29644:4:::1;29624:7;:17;29632:8;29624:17;;;;;;;;;;;:24;;;;;;;;;;;;:::i;:::-;;29497:157:::0;;;:::o;26661:173::-;26774:1;26740:36;;:12;:22;26753:8;26740:22;;;;;;;;;;;;;;;;;;;;;:36;;;26736:93;;26799:12;:22;26812:8;26799:22;;;;;;;;;;;;26792:29;;;;;;;;;;;26736:93;26661:173;:::o;24404:262::-;24544:5;24521:28;;:9;:19;24531:8;24521:19;;;;;;;;;;;;;;;;;;;;;:28;;;24551:9;;;;;;;;;;;;;;;;;24513:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24626:1;24597:19;:26;24617:5;24597:26;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;24568:19;:26;24588:5;24568:26;;;;;;;;;;;;;;;:59;;;;24641:9;:19;24651:8;24641:19;;;;;;;;;;;;24634:26;;;;;;;;;;;24404:262;;:::o;24933:268::-;25076:1;25045:33;;:9;:19;25055:8;25045:19;;;;;;;;;;;;;;;;;;;;;:33;;;25080:18;;;;;;;;;;;;;;;;;25037:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25130:3;25108:9;:19;25118:8;25108:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25194:1;25167:19;:24;25187:3;25167:24;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;25140:19;:24;25160:3;25140:24;;;;;;;;;;;;;;;:55;;;;24933:268;;:::o;1718:400::-;1802:6;1823:70;1854:7;1830:11;:17;1842:4;1830:17;;;;;;;;;;;;;;;1848:1;1830:20;;;;;;;;;;;;;;;;;;;;;;;;:31;1823:70;;1878:3;;;;;:::i;:::-;;;;1823:70;;;1913:127;1947:1;1922:11;:17;1934:4;1922:17;;;;;;;;;;;;;;;:24;;;;:26;;;;:::i;:::-;1920:1;:28;1913:127;;;1988:11;:17;2000:4;1988:17;;;;;;;;;;;;;;;2008:1;2006;:3;;;;:::i;:::-;1988:22;;;;;;;;;;;;;;;;;;;;;;;;1965:11;:17;1977:4;1965:17;;;;;;;;;;;;;;;1983:1;1965:20;;;;;;;;;;;;;;;;;;;;;;;:45;;;;2025:3;;;;;:::i;:::-;;;;1913:127;;;2050:11;:17;2062:4;2050:17;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2084:11;:16;2096:3;2084:16;;;;;;;;;;;;;;;2106:7;2084:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1718:400;;;;:::o;3823:780::-;3906:17;4347:16;4370:19;4392:66;4370:88;;;;4500:5;4488:18;4476:30;;4566:3;4554:15;;:8;:15;;:42;;;;;4585:11;4573:8;:23;;4554:42;4538:59;;3823:780;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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;965:352::-;;;1083:3;1076:4;1068:6;1064:17;1060:27;1050:2;;1101:1;1098;1091:12;1050:2;1137:6;1124:20;1114:30;;1167:18;1159:6;1156:30;1153:2;;;1199:1;1196;1189:12;1153:2;1236:4;1228:6;1224:17;1212:29;;1290:3;1282:4;1274:6;1270:17;1260:8;1256:32;1253:41;1250:2;;;1307:1;1304;1297:12;1250:2;1040:277;;;;;:::o;1323:139::-;;1407:6;1394:20;1385:29;;1423:33;1450:5;1423:33;:::i;:::-;1375:87;;;;:::o;1468:262::-;;1576:2;1564:9;1555:7;1551:23;1547:32;1544:2;;;1592:1;1589;1582:12;1544:2;1635:1;1660:53;1705:7;1696:6;1685:9;1681:22;1660:53;:::i;:::-;1650:63;;1606:117;1534:196;;;;:::o;1736:407::-;;;1861:2;1849:9;1840:7;1836:23;1832:32;1829:2;;;1877:1;1874;1867:12;1829:2;1920:1;1945:53;1990:7;1981:6;1970:9;1966:22;1945:53;:::i;:::-;1935:63;;1891:117;2047:2;2073:53;2118:7;2109:6;2098:9;2094:22;2073:53;:::i;:::-;2063:63;;2018:118;1819:324;;;;;:::o;2149:552::-;;;;2291:2;2279:9;2270:7;2266:23;2262:32;2259:2;;;2307:1;2304;2297:12;2259:2;2350:1;2375:53;2420:7;2411:6;2400:9;2396:22;2375:53;:::i;:::-;2365:63;;2321:117;2477:2;2503:53;2548:7;2539:6;2528:9;2524:22;2503:53;:::i;:::-;2493:63;;2448:118;2605:2;2631:53;2676:7;2667:6;2656:9;2652:22;2631:53;:::i;:::-;2621:63;;2576:118;2249:452;;;;;:::o;2707:829::-;;;;;;2885:3;2873:9;2864:7;2860:23;2856:33;2853:2;;;2902:1;2899;2892:12;2853:2;2945:1;2970:53;3015:7;3006:6;2995:9;2991:22;2970:53;:::i;:::-;2960:63;;2916:117;3072:2;3098:53;3143:7;3134:6;3123:9;3119:22;3098:53;:::i;:::-;3088:63;;3043:118;3200:2;3226:53;3271:7;3262:6;3251:9;3247:22;3226:53;:::i;:::-;3216:63;;3171:118;3356:2;3345:9;3341:18;3328:32;3387:18;3379:6;3376:30;3373:2;;;3419:1;3416;3409:12;3373:2;3455:64;3511:7;3502:6;3491:9;3487:22;3455:64;:::i;:::-;3437:82;;;;3299:230;2843:693;;;;;;;;:::o;3542:401::-;;;3664:2;3652:9;3643:7;3639:23;3635:32;3632:2;;;3680:1;3677;3670:12;3632:2;3723:1;3748:53;3793:7;3784:6;3773:9;3769:22;3748:53;:::i;:::-;3738:63;;3694:117;3850:2;3876:50;3918:7;3909:6;3898:9;3894:22;3876:50;:::i;:::-;3866:60;;3821:115;3622:321;;;;;:::o;3949:407::-;;;4074:2;4062:9;4053:7;4049:23;4045:32;4042:2;;;4090:1;4087;4080:12;4042:2;4133:1;4158:53;4203:7;4194:6;4183:9;4179:22;4158:53;:::i;:::-;4148:63;;4104:117;4260:2;4286:53;4331:7;4322:6;4311:9;4307:22;4286:53;:::i;:::-;4276:63;;4231:118;4032:324;;;;;:::o;4362:685::-;;;;;4524:2;4512:9;4503:7;4499:23;4495:32;4492:2;;;4540:1;4537;4530:12;4492:2;4583:1;4608:53;4653:7;4644:6;4633:9;4629:22;4608:53;:::i;:::-;4598:63;;4554:117;4710:2;4736:53;4781:7;4772:6;4761:9;4757:22;4736:53;:::i;:::-;4726:63;;4681:118;4866:2;4855:9;4851:18;4838:32;4897:18;4889:6;4886:30;4883:2;;;4929:1;4926;4919:12;4883:2;4965:65;5022:7;5013:6;5002:9;4998:22;4965:65;:::i;:::-;4947:83;;;;4809:231;4482:565;;;;;;;:::o;5053:260::-;;5160:2;5148:9;5139:7;5135:23;5131:32;5128:2;;;5176:1;5173;5166:12;5128:2;5219:1;5244:52;5288:7;5279:6;5268:9;5264:22;5244:52;:::i;:::-;5234:62;;5190:116;5118:195;;;;:::o;5319:282::-;;5437:2;5425:9;5416:7;5412:23;5408:32;5405:2;;;5453:1;5450;5443:12;5405:2;5496:1;5521:63;5576:7;5567:6;5556:9;5552:22;5521:63;:::i;:::-;5511:73;;5467:127;5395:206;;;;:::o;5607:262::-;;5715:2;5703:9;5694:7;5690:23;5686:32;5683:2;;;5731:1;5728;5721:12;5683:2;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5673:196;;;;:::o;5875:179::-;;5965:46;6007:3;5999:6;5965:46;:::i;:::-;6043:4;6038:3;6034:14;6020:28;;5955:99;;;;:::o;6060:118::-;6147:24;6165:5;6147:24;:::i;:::-;6142:3;6135:37;6125:53;;:::o;6214:732::-;;6362:54;6410:5;6362:54;:::i;:::-;6432:86;6511:6;6506:3;6432:86;:::i;:::-;6425:93;;6542:56;6592:5;6542:56;:::i;:::-;6621:7;6652:1;6637:284;6662:6;6659:1;6656:13;6637:284;;;6738:6;6732:13;6765:63;6824:3;6809:13;6765:63;:::i;:::-;6758:70;;6851:60;6904:6;6851:60;:::i;:::-;6841:70;;6697:224;6684:1;6681;6677:9;6672:14;;6637:284;;;6641:14;6937:3;6930:10;;6338:608;;;;;;;:::o;6952:109::-;7033:21;7048:5;7033:21;:::i;:::-;7028:3;7021:34;7011:50;;:::o;7067:360::-;;7181:38;7213:5;7181:38;:::i;:::-;7235:70;7298:6;7293:3;7235:70;:::i;:::-;7228:77;;7314:52;7359:6;7354:3;7347:4;7340:5;7336:16;7314:52;:::i;:::-;7391:29;7413:6;7391:29;:::i;:::-;7386:3;7382:39;7375:46;;7157:270;;;;;:::o;7433:364::-;;7549:39;7582:5;7549:39;:::i;:::-;7604:71;7668:6;7663:3;7604:71;:::i;:::-;7597:78;;7684:52;7729:6;7724:3;7717:4;7710:5;7706:16;7684:52;:::i;:::-;7761:29;7783:6;7761:29;:::i;:::-;7756:3;7752:39;7745:46;;7525:272;;;;;:::o;7803:108::-;7880:24;7898:5;7880:24;:::i;:::-;7875:3;7868:37;7858:53;;:::o;7917:118::-;8004:24;8022:5;8004:24;:::i;:::-;7999:3;7992:37;7982:53;;:::o;8041:222::-;;8172:2;8161:9;8157:18;8149:26;;8185:71;8253:1;8242:9;8238:17;8229:6;8185:71;:::i;:::-;8139:124;;;;:::o;8269:640::-;;8502:3;8491:9;8487:19;8479:27;;8516:71;8584:1;8573:9;8569:17;8560:6;8516:71;:::i;:::-;8597:72;8665:2;8654:9;8650:18;8641:6;8597:72;:::i;:::-;8679;8747:2;8736:9;8732:18;8723:6;8679:72;:::i;:::-;8798:9;8792:4;8788:20;8783:2;8772:9;8768:18;8761:48;8826:76;8897:4;8888:6;8826:76;:::i;:::-;8818:84;;8469:440;;;;;;;:::o;8915:373::-;;9096:2;9085:9;9081:18;9073:26;;9145:9;9139:4;9135:20;9131:1;9120:9;9116:17;9109:47;9173:108;9276:4;9267:6;9173:108;:::i;:::-;9165:116;;9063:225;;;;:::o;9294:210::-;;9419:2;9408:9;9404:18;9396:26;;9432:65;9494:1;9483:9;9479:17;9470:6;9432:65;:::i;:::-;9386:118;;;;:::o;9510:313::-;;9661:2;9650:9;9646:18;9638:26;;9710:9;9704:4;9700:20;9696:1;9685:9;9681:17;9674:47;9738:78;9811:4;9802:6;9738:78;:::i;:::-;9730:86;;9628:195;;;;:::o;9829:222::-;;9960:2;9949:9;9945:18;9937:26;;9973:71;10041:1;10030:9;10026:17;10017:6;9973:71;:::i;:::-;9927:124;;;;:::o;10057:132::-;;10147:3;10139:11;;10177:4;10172:3;10168:14;10160:22;;10129:60;;;:::o;10195:114::-;;10296:5;10290:12;10280:22;;10269:40;;;:::o;10315:98::-;;10400:5;10394:12;10384:22;;10373:40;;;:::o;10419:99::-;;10505:5;10499:12;10489:22;;10478:40;;;:::o;10524:113::-;;10626:4;10621:3;10617:14;10609:22;;10599:38;;;:::o;10643:184::-;;10776:6;10771:3;10764:19;10816:4;10811:3;10807:14;10792:29;;10754:73;;;;:::o;10833:168::-;;10950:6;10945:3;10938:19;10990:4;10985:3;10981:14;10966:29;;10928:73;;;;:::o;11007:169::-;;11125:6;11120:3;11113:19;11165:4;11160:3;11156:14;11141:29;;11103:73;;;;:::o;11182:305::-;;11241:20;11259:1;11241:20;:::i;:::-;11236:25;;11275:20;11293:1;11275:20;:::i;:::-;11270:25;;11429:1;11361:66;11357:74;11354:1;11351:81;11348:2;;;11435:18;;:::i;:::-;11348:2;11479:1;11476;11472:9;11465:16;;11226:261;;;;:::o;11493:191::-;;11553:20;11571:1;11553:20;:::i;:::-;11548:25;;11587:20;11605:1;11587:20;:::i;:::-;11582:25;;11626:1;11623;11620:8;11617:2;;;11631:18;;:::i;:::-;11617:2;11676:1;11673;11669:9;11661:17;;11538:146;;;;:::o;11690:96::-;;11756:24;11774:5;11756:24;:::i;:::-;11745:35;;11735:51;;;:::o;11792:90::-;;11869:5;11862:13;11855:21;11844:32;;11834:48;;;:::o;11888:149::-;;11964:66;11957:5;11953:78;11942:89;;11932:105;;;:::o;12043:126::-;;12120:42;12113:5;12109:54;12098:65;;12088:81;;;:::o;12175:77::-;;12241:5;12230:16;;12220:32;;;:::o;12258:307::-;12326:1;12336:113;12350:6;12347:1;12344:13;12336:113;;;12435:1;12430:3;12426:11;12420:18;12416:1;12411:3;12407:11;12400:39;12372:2;12369:1;12365:10;12360:15;;12336:113;;;12467:6;12464:1;12461:13;12458:2;;;12547:1;12538:6;12533:3;12529:16;12522:27;12458:2;12307:258;;;;:::o;12571:320::-;;12652:1;12646:4;12642:12;12632:22;;12699:1;12693:4;12689:12;12720:18;12710:2;;12776:4;12768:6;12764:17;12754:27;;12710:2;12838;12830:6;12827:14;12807:18;12804:38;12801:2;;;12857:18;;:::i;:::-;12801:2;12622:269;;;;:::o;12897:233::-;;12959:24;12977:5;12959:24;:::i;:::-;12950:33;;13005:66;12998:5;12995:77;12992:2;;;13075:18;;:::i;:::-;12992:2;13122:1;13115:5;13111:13;13104:20;;12940:190;;;:::o;13136:180::-;13184:77;13181:1;13174:88;13281:4;13278:1;13271:15;13305:4;13302:1;13295:15;13322:180;13370:77;13367:1;13360:88;13467:4;13464:1;13457:15;13491:4;13488:1;13481:15;13508:102;;13600:2;13596:7;13591:2;13584:5;13580:14;13576:28;13566:38;;13556:54;;;:::o;13616:122::-;13689:24;13707:5;13689:24;:::i;:::-;13682:5;13679:35;13669:2;;13728:1;13725;13718:12;13669:2;13659:79;:::o;13744:116::-;13814:21;13829:5;13814:21;:::i;:::-;13807:5;13804:32;13794:2;;13850:1;13847;13840:12;13794:2;13784:76;:::o;13866:120::-;13938:23;13955:5;13938:23;:::i;:::-;13931:5;13928:34;13918:2;;13976:1;13973;13966:12;13918:2;13908:78;:::o;13992:122::-;14065:24;14083:5;14065:24;:::i;:::-;14058:5;14055:35;14045:2;;14104:1;14101;14094:12;14045:2;14035:79;:::o

Swarm Source

ipfs://c3118296a5b17a3909ffd863ad54cfab3fab0f436620855ecb4c097f554d7df8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.