Contract 0xd52147d30cecdd745aba5e3943e00724b194d539 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0c9f26cd67822513a39608ebff07abe3635aafe9add341721bfe2b9791282e85Mint202814202021-10-16 15:36:082 days 11 hrs ago0x61736bd58833cdae807103b3caf4be52462024cc IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00459966
0x3253325b7927230ec11ecae1f485da6e35a2959a60a6af694829aab73d80f9adMint202807892021-10-16 15:05:542 days 12 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00459966
0x46eda97f8ba4535a75708dc99e43848eb059c0f91a35e0b6962124c78256190dSafe Transfer Fr...202591652021-10-15 23:04:263 days 4 hrs ago0x5ae923e68436d29042c37ddcd037db58abd19032 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00150606
0x861ab8997d5771656ce0e37f5a53103ba70a37d0c087fbfdd6187b6d4e22bd15Set Approval For...202476442021-10-15 15:39:253 days 11 hrs ago0xff864eaf1f96569a3606f5e859e7b2719713ce60 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0005364635
0x2d65d690f73c32df3487b6a46507cd94e7649afbd6ab3443bf231e9f8f21a7d4Mint202400432021-10-15 10:25:253 days 17 hrs ago0xd0557c7bae8ccea7b21b623abd28d67d9decb2b5 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00681688
0xac2b2ae846782a71f4c8503e0d43b808c42ea2dd57cf51ff02ef8df4abc227bfWithdraw202393592021-10-15 9:55:293 days 17 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0031171
0x4628f93107d05a65516818bcddad47c8059ee8411acf2cd63850548e8e59b209Safe Transfer Fr...202379642021-10-15 8:56:093 days 18 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0096204
0xdb17f20136ebd7f7dd5b32fbce17c86d545f53e917df9144cffd39757dd160caSafe Transfer Fr...202378612021-10-15 8:50:273 days 18 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0096204
0x6edec870f4d4c917da7036b8526caf84c7b09a9bca2fce49ca0e7a3f552a697dSubscribe Addres...202283362021-10-15 1:17:034 days 2 hrs ago0x720fa0fdd62f30f707479c8d8511f82bd3ff0235 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390.1 MATIC0.00167055
0x7683272e0dafcdd233a55018f7d2b4e1650969048039f41d501fba82c6e4f12bMint202263472021-10-14 23:57:584 days 3 hrs ago0xd0557c7bae8ccea7b21b623abd28d67d9decb2b5 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0024
0x4d2df049b10f4bcfe7c57476808a21d40a0edeca2029c029cbe03d0ea5ee41d0Mint202237002021-10-14 22:20:044 days 5 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00459966
0xf0ad6c8d12b83e48172034ef446062fad307bb34b5f69f955acc01ee52e642c2Mint202235722021-10-14 22:14:304 days 5 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00459966
0xfa6fd246139c968c8b830c974bc7b797c74c1f95dca2a434b0f9a5590e567e79Subscribe Addres...202157262021-10-14 16:49:114 days 10 hrs ago0xb67d58cffae63a95fb380b952e65b1a8eac44d0b IN  0xd52147d30cecdd745aba5e3943e00724b194d5390.1 MATIC0.004287745
0x2c3b2edcf9f13b416af0a92c5f4e92018bd4df8a5615bd58d1d09c0f6a510198Set Approval For...202099512021-10-14 12:49:584 days 14 hrs ago0xa707d5fe856d8ad8f500237579cd7a80e4e0211a IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00139947
0x8406ed8402b6212e03387ad073c75571e7602f4ec8f00e4de4bb005ac7121821Mint202098652021-10-14 12:47:024 days 14 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0051123
0x60cdb8c051556381ae9d034ed0324db1719a5bd3f086fbecc9f8facfa5d730a8Subscribe Addres...202091302021-10-14 12:16:464 days 15 hrs ago0xa707d5fe856d8ad8f500237579cd7a80e4e0211a IN  0xd52147d30cecdd745aba5e3943e00724b194d5390.1 MATIC0.00167055
0x1bf8b433bf7c405b4347aa5c43d8ecd3b7094054815a7ac1727bdb050793ca59Mint202090572021-10-14 12:12:504 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00511734
0x86081ea1fe47a52d4b4cb109c03ee0df1f9d63b7e040654b4c45025c2f310bb8Mint202090552021-10-14 12:12:464 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0051177
0x57b0d35b381a7c57c2b5bd5f1d61be53dc2a5050cd79757cec35b0717f789315Mint202090492021-10-14 12:12:344 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0051177
0xa90aa3443fc7dcc652d4f5811638908a8442b4c7e48d59136da5a44985bfe5c5Mint202090472021-10-14 12:12:304 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00511734
0x364a8bd12fe6c146a3d32030e9f562335e2ae123e59edbbe77e80e8de67564a6Mint202090452021-10-14 12:12:264 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0051177
0xaaf4f4dbad67589312c3dbb291506708b04512270fad5c944dd8eac17b2d2a04Mint202090392021-10-14 12:12:144 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0051177
0xe1bf7b41c4e65d2488c3c86566c33e04e761b795c893c18b25eed8359faaab56Mint202090372021-10-14 12:12:104 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.00511734
0x37810026b05626f8ca8cb99d0a29ae104fc0c3c607e4b1b544a98c32ee318e02Mint202090352021-10-14 12:12:064 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0051177
0xc85c4493245c71d19968ed3db38964e732445353ea7d63ef02e04c845304d214Mint202090332021-10-14 12:12:024 days 15 hrs ago0xfc9cdedf726632f95a45b8a27b63aa115bcb0bf6 IN  0xd52147d30cecdd745aba5e3943e00724b194d5390 MATIC0.0051177
[ Download CSV Export 
Latest 4 internal transactions
Parent Txn Hash Block From To Value
0xac2b2ae846782a71f4c8503e0d43b808c42ea2dd57cf51ff02ef8df4abc227bf202393592021-10-15 9:55:293 days 17 hrs ago 0xd52147d30cecdd745aba5e3943e00724b194d5390xd0557c7bae8ccea7b21b623abd28d67d9decb2b50.49975 MATIC
0xac2b2ae846782a71f4c8503e0d43b808c42ea2dd57cf51ff02ef8df4abc227bf202393592021-10-15 9:55:293 days 17 hrs ago 0xd52147d30cecdd745aba5e3943e00724b194d5390x5ac46bb905a03adf7073a896378209c069d924c30.49975 MATIC
0xac2b2ae846782a71f4c8503e0d43b808c42ea2dd57cf51ff02ef8df4abc227bf202393592021-10-15 9:55:293 days 17 hrs ago 0xd52147d30cecdd745aba5e3943e00724b194d5390x61736bd58833cdae807103b3caf4be52462024cc0.49975 MATIC
0xac2b2ae846782a71f4c8503e0d43b808c42ea2dd57cf51ff02ef8df4abc227bf202393592021-10-15 9:55:293 days 17 hrs ago 0xd52147d30cecdd745aba5e3943e00724b194d5390x42a7545ee9d9b16a7b3ce31c031aa281162f14300.49975 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NFTChat

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-10-12
*/

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


library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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;

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

}

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

}


interface ERC721TokenReceiver
{

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

}

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

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

  /**
   * @notice This works identically to the other function with an extra data parameter, except this
   * function just sets data to ""
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @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;

  /**
   * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
   * they may be permanently lost.
   * @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.
   * @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;

  /**
   * @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.
   * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable.
   * @param _tokenId The NFT to approve.
   */
  function approve(
    address _approved,
    uint256 _tokenId
  )
    external;

  /**
   * @notice The contract MUST allow multiple operators per owner.
   * @dev Enables or disables approval for a third party ("operator") to manage all of
   * `msg.sender`'s assets. It also emits the ApprovalForAll event.
   * @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.
   * @notice Count all NFTs assigned to an owner.
   * @param _owner Address for whom to query the balance.
   * @return Balance of _owner.
   */
  function balanceOf(
    address _owner
  )
    external
    view
    returns (uint256);

  /**
   * @notice Find the owner of an NFT.
   * @dev Returns the address of the owner of the NFT. NFTs assigned to the 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);

  /**
   * @notice Throws if `_tokenId` is not a valid NFT.
   * @dev Get the approved address for a single 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);

  /**
   * @notice Query if an address is an authorized operator for another 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);

}


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

}

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

  /**
   * @dev Magic value of a smart contract that can receive 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 their 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
  }

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

  /**
   * @notice This works identically to the other function with an extra data parameter, except this
   * function just sets data to "".
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @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, "");
  }

  /**
   * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
   * they may be permanently lost.
   * @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.
   * @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);
  }

  /**
   * @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.
   * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable.
   * @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);
  }

  /**
   * @notice This works even if sender doesn't own any tokens at the time.
   * @dev Enables or disables approval for a third party ("operator") to manage all of
   * `msg.sender`'s assets. It also emits the ApprovalForAll event.
   * @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 the 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);
  }

  /**
   * @notice Throws if `_tokenId` is not a valid NFT.
   * @dev Get the approved address for a single 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];
  }

  /**
   * @notice Does NO checks.
   * @dev Actually performs the transfer.
   * @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);
  }

  /**
   * @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.
   * @dev Mints a new NFT.
   * @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);
  }

  /**
   * @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.
   * @dev Burns a 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);
  }

  /**
   * @notice Use and override this function with caution. Wrong usage can have serious consequences.
   * @dev Removes a NFT from owner.
   * @param _from Address from which 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] -= 1;
    delete idToOwner[_tokenId];
  }

  /**
   * @notice Use and override this function with caution. Wrong usage can have serious consequences.
   * @dev Assigns a new NFT to owner.
   * @param _to Address to which 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] += 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
  {
    delete idToApproval[_tokenId];
  }

}

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

  /**
   * @notice When implementing this contract don't forget to set nftName and nftSymbol.
   * @dev Contract constructor.
   */
  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];
  }

  /**
   * @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.
   * @dev Burns a NFT.
   * @param _tokenId ID of the NFT to be burned.
   */
  function _burn(
    uint256 _tokenId
  )
    internal
    override
    virtual
  {
    super._burn(_tokenId);

    delete idToUri[_tokenId];
  }

  /**
   * @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.
   * @dev Set a distinct URI (RFC 3986) for a given NFT ID.
   * @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;
  }

}



contract NFTChat is NFTokenMetadata, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private tokenIds;
    Counters.Counter public subscribedAddressCounter;
    
    uint32 public FIRST_TIER = 1000;
    uint32 public SECOND_TIER = 10000;

    uint256 public FIRST_TIER_FEE = 0.1 ether;
    uint256 public SECOND_TIER_FEE = 0.5 ether;
    uint256 public THIRD_TIER_FEE = 3.99 ether;

    uint256 public subscriptionFee = FIRST_TIER_FEE;
    uint256 public transactionFee = 0.000 ether;
    string constant NOT_ENOUGH_CRYPTO_MSG = "Not enough MATIC in wallet"; 

    mapping(address => bool) public subscribedAddresses;

    // Team payout addresses.
    address private constant _a1 = 0x42A7545EE9D9B16A7b3Ce31C031aA281162F1430; //h
    address private constant _a2 = 0x61736bd58833cdaE807103b3caf4BE52462024CC; //m
    address private constant _a3 = 0x5aC46bb905a03AdF7073a896378209c069D924c3; //j
    address private constant _a4 = 0xd0557c7bAe8cCEa7B21b623aBD28D67d9deCb2b5; //a

    constructor() {
        nftName = "NFTchat";
        nftSymbol = "CHAT";
    }
    
    function setTransactionFee(uint256 _newTransactionFee) external onlyOwner {
        transactionFee = _newTransactionFee;
    }

    function setSubscriptionFee(uint256 _newSubscriptionFee) external onlyOwner {
        subscriptionFee = _newSubscriptionFee;
    }

    function setSecondTier(uint32 _newSecondTier) external onlyOwner {
        SECOND_TIER = _newSecondTier;
    }

    function setSecondTierFee(uint256 _newSecondTierFee) external onlyOwner {
        SECOND_TIER_FEE = _newSecondTierFee;
    }

    function setThirdTierFee(uint256 _newThirdTierFee) external onlyOwner {
        THIRD_TIER_FEE = _newThirdTierFee;
    }

    function subscribeAddress() external payable {
        require(!subscribedAddresses[msg.sender], "ADDRESS_ALREADY_SUBSCRIBED");
        require(subscriptionFee <= msg.value, "INVALID_SUBSCRIBTION_FEE");
        subscribedAddresses[msg.sender] = true;
        subscribedAddressCounter.increment();
        calculateSubscriptionFee();
    }
    
    function subscribeFreeAddress(address _toBeSubscribed) external onlyOwner {
        require(!subscribedAddresses[_toBeSubscribed], "ADDRESS_ALREADY_SUBSCRIBED");
        subscribedAddresses[_toBeSubscribed] = true;
        subscribedAddressCounter.increment();
        calculateSubscriptionFee();
    }
    
    function unsubscribeAddress(address _toBeUnsubscribed) external onlyOwner {
        require(subscribedAddresses[_toBeUnsubscribed], "ADDRESS_IS_NOT_SUBSCRIBED");
        subscribedAddresses[_toBeUnsubscribed] = false;
        subscribedAddressCounter.decrement();
        calculateSubscriptionFee();
    }

    function calculateSubscriptionFee() internal returns (uint256) {
        uint256 addressCount = subscribedAddressCounter.current();

        if (addressCount < FIRST_TIER) {
            subscriptionFee = FIRST_TIER_FEE; 
        } else if (addressCount < SECOND_TIER) {
            subscriptionFee = SECOND_TIER_FEE;
        } else {
            subscriptionFee = THIRD_TIER_FEE;
        }

        return subscriptionFee;
    }

    function mint(address _to, string calldata _uri) external payable {
        require(subscribedAddresses[msg.sender], "ADDRESS_IS_NOT_SUBSCRIBED");
        require(msg.value >= transactionFee, NOT_ENOUGH_CRYPTO_MSG);
        tokenIds.increment();
        uint256 newTokenId = tokenIds.current();

        super._mint(_to, newTokenId);
        super._setTokenUri(newTokenId, _uri);
    }

    function withdraw() external onlyOwner {
        uint256 amount = (address(this).balance * 25) / 100;

        (bool success1, ) = _a1.call{value: amount}("");
        require(success1, "Transfer to A1 failed.");

        (bool success2, ) = _a2.call{value: amount}("");
        require(success2, "Transfer to A2 failed.");

        (bool success3, ) = _a3.call{value: amount}("");
        require(success3, "Transfer to A3 failed.");

        (bool success4, ) = _a4.call{value: amount}("");
        require(success4, "Transfer to A4 failed.");
    }
}

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":"FIRST_TIER","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIRST_TIER_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECOND_TIER","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECOND_TIER_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"THIRD_TIER_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"string","name":"_uri","type":"string"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"uint32","name":"_newSecondTier","type":"uint32"}],"name":"setSecondTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSecondTierFee","type":"uint256"}],"name":"setSecondTierFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSubscriptionFee","type":"uint256"}],"name":"setSubscriptionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newThirdTierFee","type":"uint256"}],"name":"setThirdTierFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTransactionFee","type":"uint256"}],"name":"setTransactionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subscribeAddress","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_toBeSubscribed","type":"address"}],"name":"subscribeFreeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subscribedAddressCounter","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subscribedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subscriptionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_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":[],"name":"transactionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toBeUnsubscribed","type":"address"}],"name":"unsubscribeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526103e8600b60006101000a81548163ffffffff021916908363ffffffff160217905550612710600b60046101000a81548163ffffffff021916908363ffffffff16021790555067016345785d8a0000600c556706f05b59d3b20000600d5567375f53dc2dcf0000600e55600c54600f5560006010553480156200008657600080fd5b5060016000806301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000806380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600080635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600781526020017f4e4654636861740000000000000000000000000000000000000000000000000081525060059080519060200190620002089291906200025d565b506040518060400160405280600481526020017f434841540000000000000000000000000000000000000000000000000000000081525060069080519060200190620002569291906200025d565b5062000372565b8280546200026b906200030d565b90600052602060002090601f0160209004810192826200028f5760008555620002db565b82601f10620002aa57805160ff1916838001178555620002db565b82800160010185558215620002db579182015b82811115620002da578251825591602001919060010190620002bd565b5b509050620002ea9190620002ee565b5090565b5b8082111562000309576000816000905550600101620002ef565b5090565b600060028204905060018216806200032657607f821691505b602082108114156200033d576200033c62000343565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61459980620003826000396000f3fe60806040526004361061020f5760003560e01c806372c139d911610118578063ad95a585116100a0578063d0def5211161006f578063d0def52114610768578063e985e9c514610784578063ebb4acb9146107c1578063f2fde38b146107ec578063f3fe3bc3146108155761020f565b8063ad95a585146106ac578063b88d4fde146106d7578063b89be73d14610700578063c87b56dd1461072b5761020f565b80638da5cb5b116100e75780638da5cb5b146105d957806395d89b4114610604578063967ba7a81461062f5780639ed3edf014610658578063a22cb465146106835761020f565b806372c139d91461051f5780637d0b1cef1461055c578063860d248a146105855780638adc9a9b146105b05761020f565b80633ccfd60b1161019b5780635771239e1161016a5780635771239e1461042857806361137e72146104535780636352211e1461047c5780636ac84956146104b957806370a08231146104e25761020f565b80633ccfd60b1461039457806342842e0e146103ab57806342c77a8d146103d45780634d5a2680146103fd5761020f565b8063095ea7b3116101e2578063095ea7b3146102e4578063096a8ab71461030d5780630aa0a175146103365780631983aee81461036157806323b872dd1461036b5761020f565b8063013b91911461021457806301ffc9a71461023f57806306fdde031461027c578063081812fc146102a7575b600080fd5b34801561022057600080fd5b50610229610840565b6040516102369190614092565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613c21565b610856565b6040516102739190613f3a565b60405180910390f35b34801561028857600080fd5b506102916108bd565b60405161029e9190613f55565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190613c7b565b61094f565b6040516102db9190613ed3565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190613be1565b610a6a565b005b34801561031957600080fd5b50610334600480360381019061032f9190613c7b565b610e4d565b005b34801561034257600080fd5b5061034b610f20565b6040516103589190614077565b60405180910390f35b610369610f26565b005b34801561037757600080fd5b50610392600480360381019061038d9190613a66565b611065565b005b3480156103a057600080fd5b506103a96114b7565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190613a66565b6118a4565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906139f9565b6118c4565b005b34801561040957600080fd5b50610412611a87565b60405161041f9190614092565b60405180910390f35b34801561043457600080fd5b5061043d611a9d565b60405161044a9190614077565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613c7b565b611aa3565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613c7b565b611b76565b6040516104b09190613ed3565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190613c7b565b611c5c565b005b3480156104ee57600080fd5b50610509600480360381019061050491906139f9565b611d2f565b6040516105169190614077565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906139f9565b611de9565b6040516105539190613f3a565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e91906139f9565b611e09565b005b34801561059157600080fd5b5061059a611fcd565b6040516105a79190613f55565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613c7b565b612006565b005b3480156105e557600080fd5b506105ee6120d9565b6040516105fb9190613ed3565b60405180910390f35b34801561061057600080fd5b506106196120ff565b6040516106269190613f55565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613ca8565b612191565b005b34801561066457600080fd5b5061066d61227e565b60405161067a9190614077565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613b41565b612284565b005b3480156106b857600080fd5b506106c1612381565b6040516106ce9190614077565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613ab9565b612387565b005b34801561070c57600080fd5b506107156123de565b6040516107229190614077565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613c7b565b6123e4565b60405161075f9190613f55565b60405180910390f35b610782600480360381019061077d9190613b81565b612567565b005b34801561079057600080fd5b506107ab60048036038101906107a69190613a26565b6126e7565b6040516107b89190613f3a565b60405180910390f35b3480156107cd57600080fd5b506107d661277b565b6040516107e39190614077565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e91906139f9565b612787565b005b34801561082157600080fd5b5061082a6129b9565b6040516108379190613f55565b60405180910390f35b600b60049054906101000a900463ffffffff1681565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600580546108cc906142bc565b80601f01602080910402602001604051908101604052809291908181526020018280546108f8906142bc565b80156109455780601f1061091a57610100808354040283529160200191610945565b820191906000526020600020905b81548152906001019060200180831161092857829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a249190613f55565b60405180910390fd5b506002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610b635750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303033000000000000000000000000000000000000000000000000000081525090610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd19190613f55565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9190613f55565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303038000000000000000000000000000000000000000000000000000081525090610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e9190613f55565b60405180910390fd5b50856002600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c9190613f55565b60405180910390fd5b508060108190555050565b600f5481565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613fd7565b60405180910390fd5b34600f541115610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90614057565b60405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061105a600a6129f2565b611062612a08565b50565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061113657503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806111c75750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f30303330303400000000000000000000000000000000000000000000000000008152509061123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112359190613f55565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303200000000000000000000000000000000000000000000000000008152509061131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129190613f55565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f19190613f55565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030310000000000000000000000000000000000000000000000000000815250906114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a9190613f55565b60405180910390fd5b506114ae8686612a87565b50505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061157f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115769190613f55565b60405180910390fd5b50600060646019476115919190614177565b61159b9190614146565b905060007342a7545ee9d9b16a7b3ce31c031aa281162f143073ffffffffffffffffffffffffffffffffffffffff16826040516115d790613ebe565b60006040518083038185875af1925050503d8060008114611614576040519150601f19603f3d011682016040523d82523d6000602084013e611619565b606091505b505090508061165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490614017565b60405180910390fd5b60007361736bd58833cdae807103b3caf4be52462024cc73ffffffffffffffffffffffffffffffffffffffff168360405161169790613ebe565b60006040518083038185875af1925050503d80600081146116d4576040519150601f19603f3d011682016040523d82523d6000602084013e6116d9565b606091505b505090508061171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490613ff7565b60405180910390fd5b6000735ac46bb905a03adf7073a896378209c069d924c373ffffffffffffffffffffffffffffffffffffffff168460405161175790613ebe565b60006040518083038185875af1925050503d8060008114611794576040519150601f19603f3d011682016040523d82523d6000602084013e611799565b606091505b50509050806117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490613fb7565b60405180910390fd5b600073d0557c7bae8ccea7b21b623abd28d67d9decb2b573ffffffffffffffffffffffffffffffffffffffff168560405161181790613ebe565b60006040518083038185875af1925050503d8060008114611854576040519150601f19603f3d011682016040523d82523d6000602084013e611859565b606091505b505090508061189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613f97565b60405180910390fd5b5050505050565b6118bf83838360405180602001604052806000815250612b3c565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061198c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119839190613f55565b60405180910390fd5b50601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614037565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611a7b600a61310a565b611a83612a08565b5050565b600b60009054906101000a900463ffffffff1681565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b629190613f55565b60405180910390fd5b5080600e8190555050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d9190613f55565b60405180910390fd5b50919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b9190613f55565b60405180910390fd5b5080600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf9190613f55565b60405180910390fd5b50611de282613166565b9050919050565b60116020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec89190613f55565b60405180910390fd5b50601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5690613fd7565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611fc1600a6129f2565b611fc9612a08565b5050565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c59190613f55565b60405180910390fd5b5080600d8190555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606006805461210e906142bc565b80601f016020809104026020016040519081016040528092919081815260200182805461213a906142bc565b80156121875780601f1061215c57610100808354040283529160200191612187565b820191906000526020600020905b81548152906001019060200180831161216a57829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090612259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122509190613f55565b60405180910390fd5b5080600b60046101000a81548163ffffffff021916908363ffffffff16021790555050565b60105481565b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123759190613f3a565b60405180910390a35050565b600e5481565b6123d785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612b3c565b5050505050565b600c5481565b606081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b99190613f55565b60405180910390fd5b506007600084815260200190815260200160002080546124e1906142bc565b80601f016020809104026020016040519081016040528092919081815260200182805461250d906142bc565b801561255a5780601f1061252f5761010080835404028352916020019161255a565b820191906000526020600020905b81548152906001019060200180831161253d57829003601f168201915b5050505050915050919050565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614037565b60405180910390fd5b6010543410156040518060400160405280601a81526020017f4e6f7420656e6f756768204d4154494320696e2077616c6c657400000000000081525090612670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126679190613f55565b60405180910390fd5b5061267b60096129f2565b600061268760096131af565b905061269384826131bd565b6126e18184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506133ab565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a8060000154905081565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061284f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128469190613f55565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3031383030320000000000000000000000000000000000000000000000000000815250906128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef9190613f55565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b6001816000016000828254019250508190555050565b600080612a15600a6131af565b9050600b60009054906101000a900463ffffffff1663ffffffff16811015612a4557600c54600f81905550612a7e565b600b60049054906101000a900463ffffffff1663ffffffff16811015612a7357600d54600f81905550612a7d565b600e54600f819055505b5b600f5491505090565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612ac8826134b5565b612ad281836134ee565b612adc8383613659565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480612c0d57503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80612c9e5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303034000000000000000000000000000000000000000000000000000081525090612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c9190613f55565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090612df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de99190613f55565b60405180910390fd5b5060006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090612ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec89190613f55565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090612f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f719190613f55565b60405180910390fd5b50612f858787612a87565b612fa48773ffffffffffffffffffffffffffffffffffffffff166137e1565b156131005760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401612fea9493929190613eee565b602060405180830381600087803b15801561300457600080fd5b505af1158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c9190613c4e565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f3030333030350000000000000000000000000000000000000000000000000000815250906130fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f49190613f55565b60405180910390fd5b50505b5050505050505050565b60008160000154905060008111613156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314d90613f77565b60405180910390fd5b6001810382600001819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325c9190613f55565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303036000000000000000000000000000000000000000000000000000081525090613340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133379190613f55565b60405180910390fd5b5061334b8282613659565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b81600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090613487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347e9190613f55565b60405180910390fd5b50816007600085815260200190815260200160002090805190602001906134af92919061382c565b50505050565b6002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b8173ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906135c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135be9190613f55565b60405180910390fd5b506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461361891906141d1565b925050819055506001600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303036000000000000000000000000000000000000000000000000000081525090613733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372a9190613f55565b60405180910390fd5b50816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137d691906140f0565b925050819055505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156138235750808214155b92505050919050565b828054613838906142bc565b90600052602060002090601f01602090048101928261385a57600085556138a1565b82601f1061387357805160ff19168380011785556138a1565b828001600101855582156138a1579182015b828111156138a0578251825591602001919060010190613885565b5b5090506138ae91906138b2565b5090565b5b808211156138cb5760008160009055506001016138b3565b5090565b6000813590506138de816144f0565b92915050565b6000813590506138f381614507565b92915050565b6000813590506139088161451e565b92915050565b60008151905061391d8161451e565b92915050565b60008083601f84011261393957613938614380565b5b8235905067ffffffffffffffff8111156139565761395561437b565b5b60208301915083600182028301111561397257613971614385565b5b9250929050565b60008083601f84011261398f5761398e614380565b5b8235905067ffffffffffffffff8111156139ac576139ab61437b565b5b6020830191508360018202830111156139c8576139c7614385565b5b9250929050565b6000813590506139de81614535565b92915050565b6000813590506139f38161454c565b92915050565b600060208284031215613a0f57613a0e61438f565b5b6000613a1d848285016138cf565b91505092915050565b60008060408385031215613a3d57613a3c61438f565b5b6000613a4b858286016138cf565b9250506020613a5c858286016138cf565b9150509250929050565b600080600060608486031215613a7f57613a7e61438f565b5b6000613a8d868287016138cf565b9350506020613a9e868287016138cf565b9250506040613aaf868287016139cf565b9150509250925092565b600080600080600060808688031215613ad557613ad461438f565b5b6000613ae3888289016138cf565b9550506020613af4888289016138cf565b9450506040613b05888289016139cf565b935050606086013567ffffffffffffffff811115613b2657613b2561438a565b5b613b3288828901613923565b92509250509295509295909350565b60008060408385031215613b5857613b5761438f565b5b6000613b66858286016138cf565b9250506020613b77858286016138e4565b9150509250929050565b600080600060408486031215613b9a57613b9961438f565b5b6000613ba8868287016138cf565b935050602084013567ffffffffffffffff811115613bc957613bc861438a565b5b613bd586828701613979565b92509250509250925092565b60008060408385031215613bf857613bf761438f565b5b6000613c06858286016138cf565b9250506020613c17858286016139cf565b9150509250929050565b600060208284031215613c3757613c3661438f565b5b6000613c45848285016138f9565b91505092915050565b600060208284031215613c6457613c6361438f565b5b6000613c728482850161390e565b91505092915050565b600060208284031215613c9157613c9061438f565b5b6000613c9f848285016139cf565b91505092915050565b600060208284031215613cbe57613cbd61438f565b5b6000613ccc848285016139e4565b91505092915050565b613cde81614205565b82525050565b613ced81614217565b82525050565b6000613cfe826140ad565b613d0881856140c3565b9350613d18818560208601614289565b613d2181614394565b840191505092915050565b6000613d37826140b8565b613d4181856140df565b9350613d51818560208601614289565b613d5a81614394565b840191505092915050565b6000613d72601b836140df565b9150613d7d826143a5565b602082019050919050565b6000613d956016836140df565b9150613da0826143ce565b602082019050919050565b6000613db86016836140df565b9150613dc3826143f7565b602082019050919050565b6000613ddb601a836140df565b9150613de682614420565b602082019050919050565b6000613dfe6016836140df565b9150613e0982614449565b602082019050919050565b6000613e216016836140df565b9150613e2c82614472565b602082019050919050565b6000613e446019836140df565b9150613e4f8261449b565b602082019050919050565b6000613e676018836140df565b9150613e72826144c4565b602082019050919050565b6000613e8a6000836140d4565b9150613e95826144ed565b600082019050919050565b613ea98161426f565b82525050565b613eb881614279565b82525050565b6000613ec982613e7d565b9150819050919050565b6000602082019050613ee86000830184613cd5565b92915050565b6000608082019050613f036000830187613cd5565b613f106020830186613cd5565b613f1d6040830185613ea0565b8181036060830152613f2f8184613cf3565b905095945050505050565b6000602082019050613f4f6000830184613ce4565b92915050565b60006020820190508181036000830152613f6f8184613d2c565b905092915050565b60006020820190508181036000830152613f9081613d65565b9050919050565b60006020820190508181036000830152613fb081613d88565b9050919050565b60006020820190508181036000830152613fd081613dab565b9050919050565b60006020820190508181036000830152613ff081613dce565b9050919050565b6000602082019050818103600083015261401081613df1565b9050919050565b6000602082019050818103600083015261403081613e14565b9050919050565b6000602082019050818103600083015261405081613e37565b9050919050565b6000602082019050818103600083015261407081613e5a565b9050919050565b600060208201905061408c6000830184613ea0565b92915050565b60006020820190506140a76000830184613eaf565b92915050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006140fb8261426f565b91506141068361426f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561413b5761413a6142ee565b5b828201905092915050565b60006141518261426f565b915061415c8361426f565b92508261416c5761416b61431d565b5b828204905092915050565b60006141828261426f565b915061418d8361426f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141c6576141c56142ee565b5b828202905092915050565b60006141dc8261426f565b91506141e78361426f565b9250828210156141fa576141f96142ee565b5b828203905092915050565b60006142108261424f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b838110156142a757808201518184015260208101905061428c565b838111156142b6576000848401525b50505050565b600060028204905060018216806142d457607f821691505b602082108114156142e8576142e761434c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f436f756e7465723a2064656372656d656e74206f766572666c6f770000000000600082015250565b7f5472616e7366657220746f204134206661696c65642e00000000000000000000600082015250565b7f5472616e7366657220746f204133206661696c65642e00000000000000000000600082015250565b7f414444524553535f414c52454144595f53554253435249424544000000000000600082015250565b7f5472616e7366657220746f204132206661696c65642e00000000000000000000600082015250565b7f5472616e7366657220746f204131206661696c65642e00000000000000000000600082015250565b7f414444524553535f49535f4e4f545f5355425343524942454400000000000000600082015250565b7f494e56414c49445f535542534352494254494f4e5f4645450000000000000000600082015250565b50565b6144f981614205565b811461450457600080fd5b50565b61451081614217565b811461451b57600080fd5b50565b61452781614223565b811461453257600080fd5b50565b61453e8161426f565b811461454957600080fd5b50565b61455581614279565b811461456057600080fd5b5056fea2646970667358221220150d21c4044a9b58d92bef1fd9c4b56b333417d83759af2e85e6e18cff9d047164736f6c63430008060033

Deployed ByteCode Sourcemap

28322:4197:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28555:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4424:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26502:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20611:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18396:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29449:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28745:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30109:344;;;:::i;:::-;;17622:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31951:565;;;;;;;;;;;;;:::i;:::-;;16867:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30784:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28517:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28645:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29979:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20159:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29585:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19685:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28927:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30465:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1188:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29845:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1308:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26738:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29725:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28799:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19159:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28694:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16247:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28597:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27019:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31550:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21063:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28456:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2133:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1132:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28555:33;;;;;;;;;;;;;:::o;4424:172::-;4534:4;4557:19;:33;4577:12;4557:33;;;;;;;;;;;;;;;;;;;;;;;;;;;4550:40;;4424:172;;;:::o;26502:120::-;26570:19;26609:7;26601:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26502:120;:::o;20611:183::-;20740:7;20716:8;15210:1;15179:33;;:9;:19;15189:8;15179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;15214:13;;;;;;;;;;;;;;;;;15171:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20766:12:::1;:22;20779:8;20766:22;;;;;;;;;;;;;;;;;;;;;20759:29;;20611:183:::0;;;;:::o;18396:352::-;18509:8;14363:18;14384:9;:19;14394:8;14384:19;;;;;;;;;;;;;;;;;;;;;14363:40;;14440:10;14426:24;;:10;:24;;;:68;;;;14454:16;:28;14471:10;14454:28;;;;;;;;;;;;;;;:40;14483:10;14454:40;;;;;;;;;;;;;;;;;;;;;;;;;14426:68;14503:21;;;;;;;;;;;;;;;;;14410:121;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18537:8:::1;15210:1;15179:33;;:9;:19;15189:8;15179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;15214:13;;;;;;;;;;;;;;;;::::0;15171:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18557:18:::2;18578:9;:19;18588:8;18578:19;;;;;;;;;;;;;;;;;;;;;18557:40;;18625:10;18612:23;;:9;:23;;;;18637:8;;;;;;;;;;;;;;;;::::0;18604:42:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18680:9;18655:12;:22;18668:8;18655:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;18733:8;18722:9;18701:41;;18710:10;18701:41;;;;;;;;;;;;18550:198;14538:1:::1;14356:189:::0;18396:352;;;:::o;29449:128::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29551:18:::1;29534:14;:35;;;;29449:128:::0;:::o;28745:47::-;;;;:::o;30109:344::-;30174:19;:31;30194:10;30174:31;;;;;;;;;;;;;;;;;;;;;;;;;30173:32;30165:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30274:9;30255:15;;:28;;30247:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30357:4;30323:19;:31;30343:10;30323:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30372:36;:24;:34;:36::i;:::-;30419:26;:24;:26::i;:::-;;30109:344::o;17622:353::-;17755:8;14743:18;14764:9;:19;14774:8;14764:19;;;;;;;;;;;;;;;;;;;;;14743:40;;14820:10;14806:24;;:10;:24;;;:71;;;;14867:10;14841:36;;:12;:22;14854:8;14841:22;;;;;;;;;;;;;;;;;;;;;:36;;;14806:71;:122;;;;14888:16;:28;14905:10;14888:28;;;;;;;;;;;;;;;:40;14917:10;14888:40;;;;;;;;;;;;;;;;;;;;;;;;;14806:122;14937:30;;;;;;;;;;;;;;;;;14790:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17783:8:::1;15210:1;15179:33;;:9;:19;15189:8;15179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;15214:13;;;;;;;;;;;;;;;;::::0;15171:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17803:18:::2;17824:9;:19;17834:8;17824:19;;;;;;;;;;;;;;;;;;;;;17803:40;;17872:5;17858:19;;:10;:19;;;17879:9;;;;;;;;;;;;;;;;::::0;17850:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17919:1;17904:17;;:3;:17;;;;17923:12;;;;;;;;;;;;;;;;::::0;17896:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17945:24;17955:3;17960:8;17945:9;:24::i;:::-;17796:179;14981:1:::1;14736:252:::0;17622:353;;;;:::o;31951:565::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32001:14:::1;32049:3;32043:2;32019:21;:26;;;;:::i;:::-;32018:34;;;;:::i;:::-;32001:51;;32066:13;29049:42;32085:8;;32101:6;32085:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32065:47;;;32131:8;32123:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;32180:13;29133:42;32199:8;;32215:6;32199:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32179:47;;;32245:8;32237:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;32294:13;29217:42;32313:8;;32329:6;32313:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32293:47;;;32359:8;32351:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;32408:13;29301:42;32427:8;;32443:6;32427:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32407:47;;;32473:8;32465:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;31990:526;;;;;31951:565::o:0;16867:179::-;16997:43;17015:5;17022:3;17027:8;16997:43;;;;;;;;;;;;:17;:43::i;:::-;16867:179;;;:::o;30784:310::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;30877:19:::1;:38;30897:17;30877:38;;;;;;;;;;;;;;;;;;;;;;;;;30869:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30997:5;30956:19;:38;30976:17;30956:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31013:36;:24;:34;:36::i;:::-;31060:26;:24;:26::i;:::-;;30784:310:::0;:::o;28517:31::-;;;;;;;;;;;;;:::o;28645:42::-;;;;:::o;29979:122::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;30077:16:::1;30060:14;:33;;;;29979:122:::0;:::o;20159:208::-;20256:14;20291:9;:19;20301:8;20291:19;;;;;;;;;;;;;;;;;;;;;20282:28;;20343:1;20325:20;;:6;:20;;;;20347:13;;;;;;;;;;;;;;;;;20317:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20159:208;;;:::o;29585:132::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29690:19:::1;29672:15;:37;;;;29585:132:::0;:::o;19685:204::-;19782:7;19827:1;19809:20;;:6;:20;;;;19831:12;;;;;;;;;;;;;;;;;19801:43;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19858:25;19876:6;19858:17;:25::i;:::-;19851:32;;19685:204;;;:::o;28927:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;30465:307::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;30559:19:::1;:36;30579:15;30559:36;;;;;;;;;;;;;;;;;;;;;;;;;30558:37;30550:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30676:4;30637:19;:36;30657:15;30637:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;30691:36;:24;:34;:36::i;:::-;30738:26;:24;:26::i;:::-;;30465:307:::0;:::o;1188:65::-;;;;;;;;;;;;;;;;;;;:::o;29845:126::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29946:17:::1;29928:15;:35;;;;29845:126:::0;:::o;1308:20::-;;;;;;;;;;;;;:::o;26738:128::-;26808:21;26851:9;26841:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26738:128;:::o;29725:112::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29815:14:::1;29801:11;;:28;;;;;;;;;;;;;;;;;;29725:112:::0;:::o;28799:43::-;;;;:::o;19159:232::-;19316:9;19274:16;:28;19291:10;19274:28;;;;;;;;;;;;;;;:39;19303:9;19274:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;19364:9;19337:48;;19352:10;19337:48;;;19375:9;19337:48;;;;;;:::i;:::-;;;;;;;;19159:232;;:::o;28694:42::-;;;;:::o;16247:209::-;16404:46;16422:5;16429:3;16434:8;16444:5;;16404:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;16247:209;;;;;:::o;28597:41::-;;;;:::o;27019:181::-;27145:13;27121:8;15210:1;15179:33;;:9;:19;15189:8;15179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;15214:13;;;;;;;;;;;;;;;;;15171:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;27177:7:::1;:17;27185:8;27177:17;;;;;;;;;;;27170:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27019:181:::0;;;;:::o;31550:393::-;31635:19;:31;31655:10;31635:31;;;;;;;;;;;;;;;;;;;;;;;;;31627:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31728:14;;31715:9;:27;;31744:21;;;;;;;;;;;;;;;;;31707:59;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31777:20;:8;:18;:20::i;:::-;31808:18;31829;:8;:16;:18::i;:::-;31808:39;;31860:28;31872:3;31877:10;31860:11;:28::i;:::-;31899:36;31918:10;31930:4;;31899:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;:36::i;:::-;31616:327;31550:393;;;:::o;21063:192::-;21191:4;21214:16;:24;21231:6;21214:24;;;;;;;;;;;;;;;:35;21239:9;21214:35;;;;;;;;;;;;;;;;;;;;;;;;;21207:42;;21063:192;;;;:::o;28456:48::-;;;;;;;;;:::o;2133:238::-;1926:5;;;;;;;;;;;1912:19;;:10;:19;;;1933:17;;;;;;;;;;;;;;;;;1904:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2255:1:::1;2234:23;;:9;:23;;;;2259:31;;;;;;;;;;;;;;;;::::0;2226:65:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2331:9;2303:38;;2324:5;;;;;;;;;;;2303:38;;;;;;;;;;;;2356:9;2348:5;;:17;;;;;;;;;;;;;;;;;;2133:238:::0;:::o;1132:51::-;;;;;;;;;;;;;;;;;;;:::o;594:127::-;701:1;683:7;:14;;;:19;;;;;;;;;;;594:127;:::o;31102:440::-;31156:7;31176:20;31199:34;:24;:32;:34::i;:::-;31176:57;;31265:10;;;;;;;;;;;31250:25;;:12;:25;31246:254;;;31310:14;;31292:15;:32;;;;31246:254;;;31362:11;;;;;;;;;;;31347:26;;:12;:26;31343:157;;;31408:15;;31390;:33;;;;31343:157;;;31474:14;;31456:15;:32;;;;31343:157;31246:254;31519:15;;31512:22;;;31102:440;:::o;21446:275::-;21535:12;21550:9;:19;21560:8;21550:19;;;;;;;;;;;;;;;;;;;;;21535:34;;21576:24;21591:8;21576:14;:24::i;:::-;21609:30;21624:4;21630:8;21609:14;:30::i;:::-;21646:26;21658:3;21663:8;21646:11;:26::i;:::-;21706:8;21701:3;21686:29;;21695:4;21686:29;;;;;;;;;;;;21528:193;21446:275;;:::o;24848:590::-;24996:8;14743:18;14764:9;:19;14774:8;14764:19;;;;;;;;;;;;;;;;;;;;;14743:40;;14820:10;14806:24;;:10;:24;;;:71;;;;14867:10;14841:36;;:12;:22;14854:8;14841:22;;;;;;;;;;;;;;;;;;;;;:36;;;14806:71;:122;;;;14888:16;:28;14905:10;14888:28;;;;;;;;;;;;;;;:40;14917:10;14888:40;;;;;;;;;;;;;;;;;;;;;;;;;14806:122;14937:30;;;;;;;;;;;;;;;;;14790:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25024:8:::1;15210:1;15179:33;;:9;:19;15189:8;15179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;15214:13;;;;;;;;;;;;;;;;::::0;15171:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25044:18:::2;25065:9;:19;25075:8;25065:19;;;;;;;;;;;;;;;;;;;;;25044:40;;25113:5;25099:19;;:10;:19;;;25120:9;;;;;;;;;;;;;;;;::::0;25091:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25160:1;25145:17;;:3;:17;;;;25164:12;;;;;;;;;;;;;;;;::::0;25137:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25186:24;25196:3;25201:8;25186:9;:24::i;:::-;25223:16;:3;:14;;;:16::i;:::-;25219:214;;;25255:13;25291:3;25271:41;;;25313:10;25325:5;25332:8;25342:5;25271:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25255:93;;13581:10;25375:24;;25365:34;;;:6;:34;;;;25401:23;;;;;;;;;;;;;;;;::::0;25357:68:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25246:187;25219:214;25037:401;14981:1:::1;14736:252:::0;24848:590;;;;;:::o;729:235::-;793:13;809:7;:14;;;793:30;;850:1;842:5;:9;834:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;944:1;936:5;:9;919:7;:14;;:26;;;;782:182;729:235;:::o;24407:163::-;24511:7;24537:19;:27;24557:6;24537:27;;;;;;;;;;;;;;;;24530:34;;24407:163;;;:::o;472:114::-;537:7;564;:14;;;557:21;;472:114;;;:::o;22112:297::-;22233:1;22218:17;;:3;:17;;;;22237:12;;;;;;;;;;;;;;;;;22210:40;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22296:1;22265:33;;:9;:19;22275:8;22265:19;;;;;;;;;;;;;;;;;;;;;:33;;;22300:18;;;;;;;;;;;;;;;;;22257:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22328:26;22340:3;22345:8;22328:11;:26::i;:::-;22394:8;22389:3;22368:35;;22385:1;22368:35;;;;;;;;;;;;22112:297;;:::o;28152:157::-;28259:8;15210:1;15179:33;;:9;:19;15189:8;15179:19;;;;;;;;;;;;;;;;;;;;;:33;;;;15214:13;;;;;;;;;;;;;;;;;15171:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28299:4:::1;28279:7;:17;28287:8;28279:17;;;;;;;;;;;:24;;;;;;;;;;;;:::i;:::-;;28152:157:::0;;;:::o;25571:110::-;25653:12;:22;25666:8;25653:22;;;;;;;;;;;;25646:29;;;;;;;;;;;25571:110;:::o;23369:234::-;23509:5;23486:28;;:9;:19;23496:8;23486:19;;;;;;;;;;;;;;;;;;;;;:28;;;23516:9;;;;;;;;;;;;;;;;;23478:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23563:1;23533:19;:26;23553:5;23533:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;23578:9;:19;23588:8;23578:19;;;;;;;;;;;;23571:26;;;;;;;;;;;23369:234;;:::o;23870:242::-;24013:1;23982:33;;:9;:19;23992:8;23982:19;;;;;;;;;;;;;;;;;;;;;:33;;;24017:18;;;;;;;;;;;;;;;;;23974:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24067:3;24045:9;:19;24055:8;24045:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;24105:1;24077:19;:24;24097:3;24077:24;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;23870:242;;:::o;2591:780::-;2674:17;3115:16;3138:19;3160:66;3138:88;;;;3268:5;3256:18;3244:30;;3334:3;3322:15;;:8;:15;;:42;;;;;3353:11;3341:8;:23;;3322:42;3306:59;;2696:675;;2591:780;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;336:5;374:6;361:20;352:29;;390:32;416:5;390:32;:::i;:::-;342:86;;;;:::o;434:141::-;490:5;521:6;515:13;506:22;;537:32;563:5;537:32;:::i;:::-;496:79;;;;:::o;594:552::-;651:8;661:6;711:3;704:4;696:6;692:17;688:27;678:2;;719:79;;:::i;:::-;678:2;832:6;819:20;809:30;;862:18;854:6;851:30;848:2;;;884:79;;:::i;:::-;848:2;998:4;990:6;986:17;974:29;;1052:3;1044:4;1036:6;1032:17;1022:8;1018:32;1015:41;1012:2;;;1059:79;;:::i;:::-;1012:2;668:478;;;;;:::o;1166:553::-;1224:8;1234:6;1284:3;1277:4;1269:6;1265:17;1261:27;1251:2;;1292:79;;:::i;:::-;1251:2;1405:6;1392:20;1382:30;;1435:18;1427:6;1424:30;1421:2;;;1457:79;;:::i;:::-;1421:2;1571:4;1563:6;1559:17;1547:29;;1625:3;1617:4;1609:6;1605:17;1595:8;1591:32;1588:41;1585:2;;;1632:79;;:::i;:::-;1585:2;1241:478;;;;;:::o;1725:139::-;1771:5;1809:6;1796:20;1787:29;;1825:33;1852:5;1825:33;:::i;:::-;1777:87;;;;:::o;1870:137::-;1915:5;1953:6;1940:20;1931:29;;1969:32;1995:5;1969:32;:::i;:::-;1921:86;;;;:::o;2013:329::-;2072:6;2121:2;2109:9;2100:7;2096:23;2092:32;2089:2;;;2127:79;;:::i;:::-;2089:2;2247:1;2272:53;2317:7;2308:6;2297:9;2293:22;2272:53;:::i;:::-;2262:63;;2218:117;2079:263;;;;:::o;2348:474::-;2416:6;2424;2473:2;2461:9;2452:7;2448:23;2444:32;2441:2;;;2479:79;;:::i;:::-;2441:2;2599:1;2624:53;2669:7;2660:6;2649:9;2645:22;2624:53;:::i;:::-;2614:63;;2570:117;2726:2;2752:53;2797:7;2788:6;2777:9;2773:22;2752:53;:::i;:::-;2742:63;;2697:118;2431:391;;;;;:::o;2828:619::-;2905:6;2913;2921;2970:2;2958:9;2949:7;2945:23;2941:32;2938:2;;;2976:79;;:::i;:::-;2938:2;3096:1;3121:53;3166:7;3157:6;3146:9;3142:22;3121:53;:::i;:::-;3111:63;;3067:117;3223:2;3249:53;3294:7;3285:6;3274:9;3270:22;3249:53;:::i;:::-;3239:63;;3194:118;3351:2;3377:53;3422:7;3413:6;3402:9;3398:22;3377:53;:::i;:::-;3367:63;;3322:118;2928:519;;;;;:::o;3453:963::-;3550:6;3558;3566;3574;3582;3631:3;3619:9;3610:7;3606:23;3602:33;3599:2;;;3638:79;;:::i;:::-;3599:2;3758:1;3783:53;3828:7;3819:6;3808:9;3804:22;3783:53;:::i;:::-;3773:63;;3729:117;3885:2;3911:53;3956:7;3947:6;3936:9;3932:22;3911:53;:::i;:::-;3901:63;;3856:118;4013:2;4039:53;4084:7;4075:6;4064:9;4060:22;4039:53;:::i;:::-;4029:63;;3984:118;4169:2;4158:9;4154:18;4141:32;4200:18;4192:6;4189:30;4186:2;;;4222:79;;:::i;:::-;4186:2;4335:64;4391:7;4382:6;4371:9;4367:22;4335:64;:::i;:::-;4317:82;;;;4112:297;3589:827;;;;;;;;:::o;4422:468::-;4487:6;4495;4544:2;4532:9;4523:7;4519:23;4515:32;4512:2;;;4550:79;;:::i;:::-;4512:2;4670:1;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4641:117;4797:2;4823:50;4865:7;4856:6;4845:9;4841:22;4823:50;:::i;:::-;4813:60;;4768:115;4502:388;;;;;:::o;4896:674::-;4976:6;4984;4992;5041:2;5029:9;5020:7;5016:23;5012:32;5009:2;;;5047:79;;:::i;:::-;5009:2;5167:1;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5138:117;5322:2;5311:9;5307:18;5294:32;5353:18;5345:6;5342:30;5339:2;;;5375:79;;:::i;:::-;5339:2;5488:65;5545:7;5536:6;5525:9;5521:22;5488:65;:::i;:::-;5470:83;;;;5265:298;4999:571;;;;;:::o;5576:474::-;5644:6;5652;5701:2;5689:9;5680:7;5676:23;5672:32;5669:2;;;5707:79;;:::i;:::-;5669:2;5827:1;5852:53;5897:7;5888:6;5877:9;5873:22;5852:53;:::i;:::-;5842:63;;5798:117;5954:2;5980:53;6025:7;6016:6;6005:9;6001:22;5980:53;:::i;:::-;5970:63;;5925:118;5659:391;;;;;:::o;6056:327::-;6114:6;6163:2;6151:9;6142:7;6138:23;6134:32;6131:2;;;6169:79;;:::i;:::-;6131:2;6289:1;6314:52;6358:7;6349:6;6338:9;6334:22;6314:52;:::i;:::-;6304:62;;6260:116;6121:262;;;;:::o;6389:349::-;6458:6;6507:2;6495:9;6486:7;6482:23;6478:32;6475:2;;;6513:79;;:::i;:::-;6475:2;6633:1;6658:63;6713:7;6704:6;6693:9;6689:22;6658:63;:::i;:::-;6648:73;;6604:127;6465:273;;;;:::o;6744:329::-;6803:6;6852:2;6840:9;6831:7;6827:23;6823:32;6820:2;;;6858:79;;:::i;:::-;6820:2;6978:1;7003:53;7048:7;7039:6;7028:9;7024:22;7003:53;:::i;:::-;6993:63;;6949:117;6810:263;;;;:::o;7079:327::-;7137:6;7186:2;7174:9;7165:7;7161:23;7157:32;7154:2;;;7192:79;;:::i;:::-;7154:2;7312:1;7337:52;7381:7;7372:6;7361:9;7357:22;7337:52;:::i;:::-;7327:62;;7283:116;7144:262;;;;:::o;7412:118::-;7499:24;7517:5;7499:24;:::i;:::-;7494:3;7487:37;7477:53;;:::o;7536:109::-;7617:21;7632:5;7617:21;:::i;:::-;7612:3;7605:34;7595:50;;:::o;7651:360::-;7737:3;7765:38;7797:5;7765:38;:::i;:::-;7819:70;7882:6;7877:3;7819:70;:::i;:::-;7812:77;;7898:52;7943:6;7938:3;7931:4;7924:5;7920:16;7898:52;:::i;:::-;7975:29;7997:6;7975:29;:::i;:::-;7970:3;7966:39;7959:46;;7741:270;;;;;:::o;8017:364::-;8105:3;8133:39;8166:5;8133:39;:::i;:::-;8188:71;8252:6;8247:3;8188:71;:::i;:::-;8181:78;;8268:52;8313:6;8308:3;8301:4;8294:5;8290:16;8268:52;:::i;:::-;8345:29;8367:6;8345:29;:::i;:::-;8340:3;8336:39;8329:46;;8109:272;;;;;:::o;8387:366::-;8529:3;8550:67;8614:2;8609:3;8550:67;:::i;:::-;8543:74;;8626:93;8715:3;8626:93;:::i;:::-;8744:2;8739:3;8735:12;8728:19;;8533:220;;;:::o;8759:366::-;8901:3;8922:67;8986:2;8981:3;8922:67;:::i;:::-;8915:74;;8998:93;9087:3;8998:93;:::i;:::-;9116:2;9111:3;9107:12;9100:19;;8905:220;;;:::o;9131:366::-;9273:3;9294:67;9358:2;9353:3;9294:67;:::i;:::-;9287:74;;9370:93;9459:3;9370:93;:::i;:::-;9488:2;9483:3;9479:12;9472:19;;9277:220;;;:::o;9503:366::-;9645:3;9666:67;9730:2;9725:3;9666:67;:::i;:::-;9659:74;;9742:93;9831:3;9742:93;:::i;:::-;9860:2;9855:3;9851:12;9844:19;;9649:220;;;:::o;9875:366::-;10017:3;10038:67;10102:2;10097:3;10038:67;:::i;:::-;10031:74;;10114:93;10203:3;10114:93;:::i;:::-;10232:2;10227:3;10223:12;10216:19;;10021:220;;;:::o;10247:366::-;10389:3;10410:67;10474:2;10469:3;10410:67;:::i;:::-;10403:74;;10486:93;10575:3;10486:93;:::i;:::-;10604:2;10599:3;10595:12;10588:19;;10393:220;;;:::o;10619:366::-;10761:3;10782:67;10846:2;10841:3;10782:67;:::i;:::-;10775:74;;10858:93;10947:3;10858:93;:::i;:::-;10976:2;10971:3;10967:12;10960:19;;10765:220;;;:::o;10991:366::-;11133:3;11154:67;11218:2;11213:3;11154:67;:::i;:::-;11147:74;;11230:93;11319:3;11230:93;:::i;:::-;11348:2;11343:3;11339:12;11332:19;;11137:220;;;:::o;11363:398::-;11522:3;11543:83;11624:1;11619:3;11543:83;:::i;:::-;11536:90;;11635:93;11724:3;11635:93;:::i;:::-;11753:1;11748:3;11744:11;11737:18;;11526:235;;;:::o;11767:118::-;11854:24;11872:5;11854:24;:::i;:::-;11849:3;11842:37;11832:53;;:::o;11891:115::-;11976:23;11993:5;11976:23;:::i;:::-;11971:3;11964:36;11954:52;;:::o;12012:379::-;12196:3;12218:147;12361:3;12218:147;:::i;:::-;12211:154;;12382:3;12375:10;;12200:191;;;:::o;12397:222::-;12490:4;12528:2;12517:9;12513:18;12505:26;;12541:71;12609:1;12598:9;12594:17;12585:6;12541:71;:::i;:::-;12495:124;;;;:::o;12625:640::-;12820:4;12858:3;12847:9;12843:19;12835:27;;12872:71;12940:1;12929:9;12925:17;12916:6;12872:71;:::i;:::-;12953:72;13021:2;13010:9;13006:18;12997:6;12953:72;:::i;:::-;13035;13103:2;13092:9;13088:18;13079:6;13035:72;:::i;:::-;13154:9;13148:4;13144:20;13139:2;13128:9;13124:18;13117:48;13182:76;13253:4;13244:6;13182:76;:::i;:::-;13174:84;;12825:440;;;;;;;:::o;13271:210::-;13358:4;13396:2;13385:9;13381:18;13373:26;;13409:65;13471:1;13460:9;13456:17;13447:6;13409:65;:::i;:::-;13363:118;;;;:::o;13487:313::-;13600:4;13638:2;13627:9;13623:18;13615:26;;13687:9;13681:4;13677:20;13673:1;13662:9;13658:17;13651:47;13715:78;13788:4;13779:6;13715:78;:::i;:::-;13707:86;;13605:195;;;;:::o;13806:419::-;13972:4;14010:2;13999:9;13995:18;13987:26;;14059:9;14053:4;14049:20;14045:1;14034:9;14030:17;14023:47;14087:131;14213:4;14087:131;:::i;:::-;14079:139;;13977:248;;;:::o;14231:419::-;14397:4;14435:2;14424:9;14420:18;14412:26;;14484:9;14478:4;14474:20;14470:1;14459:9;14455:17;14448:47;14512:131;14638:4;14512:131;:::i;:::-;14504:139;;14402:248;;;:::o;14656:419::-;14822:4;14860:2;14849:9;14845:18;14837:26;;14909:9;14903:4;14899:20;14895:1;14884:9;14880:17;14873:47;14937:131;15063:4;14937:131;:::i;:::-;14929:139;;14827:248;;;:::o;15081:419::-;15247:4;15285:2;15274:9;15270:18;15262:26;;15334:9;15328:4;15324:20;15320:1;15309:9;15305:17;15298:47;15362:131;15488:4;15362:131;:::i;:::-;15354:139;;15252:248;;;:::o;15506:419::-;15672:4;15710:2;15699:9;15695:18;15687:26;;15759:9;15753:4;15749:20;15745:1;15734:9;15730:17;15723:47;15787:131;15913:4;15787:131;:::i;:::-;15779:139;;15677:248;;;:::o;15931:419::-;16097:4;16135:2;16124:9;16120:18;16112:26;;16184:9;16178:4;16174:20;16170:1;16159:9;16155:17;16148:47;16212:131;16338:4;16212:131;:::i;:::-;16204:139;;16102:248;;;:::o;16356:419::-;16522:4;16560:2;16549:9;16545:18;16537:26;;16609:9;16603:4;16599:20;16595:1;16584:9;16580:17;16573:47;16637:131;16763:4;16637:131;:::i;:::-;16629:139;;16527:248;;;:::o;16781:419::-;16947:4;16985:2;16974:9;16970:18;16962:26;;17034:9;17028:4;17024:20;17020:1;17009:9;17005:17;16998:47;17062:131;17188:4;17062:131;:::i;:::-;17054:139;;16952:248;;;:::o;17206:222::-;17299:4;17337:2;17326:9;17322:18;17314:26;;17350:71;17418:1;17407:9;17403:17;17394:6;17350:71;:::i;:::-;17304:124;;;;:::o;17434:218::-;17525:4;17563:2;17552:9;17548:18;17540:26;;17576:69;17642:1;17631:9;17627:17;17618:6;17576:69;:::i;:::-;17530:122;;;;:::o;17739:98::-;17790:6;17824:5;17818:12;17808:22;;17797:40;;;:::o;17843:99::-;17895:6;17929:5;17923:12;17913:22;;17902:40;;;:::o;17948:168::-;18031:11;18065:6;18060:3;18053:19;18105:4;18100:3;18096:14;18081:29;;18043:73;;;;:::o;18122:147::-;18223:11;18260:3;18245:18;;18235:34;;;;:::o;18275:169::-;18359:11;18393:6;18388:3;18381:19;18433:4;18428:3;18424:14;18409:29;;18371:73;;;;:::o;18450:305::-;18490:3;18509:20;18527:1;18509:20;:::i;:::-;18504:25;;18543:20;18561:1;18543:20;:::i;:::-;18538:25;;18697:1;18629:66;18625:74;18622:1;18619:81;18616:2;;;18703:18;;:::i;:::-;18616:2;18747:1;18744;18740:9;18733:16;;18494:261;;;;:::o;18761:185::-;18801:1;18818:20;18836:1;18818:20;:::i;:::-;18813:25;;18852:20;18870:1;18852:20;:::i;:::-;18847:25;;18891:1;18881:2;;18896:18;;:::i;:::-;18881:2;18938:1;18935;18931:9;18926:14;;18803:143;;;;:::o;18952:348::-;18992:7;19015:20;19033:1;19015:20;:::i;:::-;19010:25;;19049:20;19067:1;19049:20;:::i;:::-;19044:25;;19237:1;19169:66;19165:74;19162:1;19159:81;19154:1;19147:9;19140:17;19136:105;19133:2;;;19244:18;;:::i;:::-;19133:2;19292:1;19289;19285:9;19274:20;;19000:300;;;;:::o;19306:191::-;19346:4;19366:20;19384:1;19366:20;:::i;:::-;19361:25;;19400:20;19418:1;19400:20;:::i;:::-;19395:25;;19439:1;19436;19433:8;19430:2;;;19444:18;;:::i;:::-;19430:2;19489:1;19486;19482:9;19474:17;;19351:146;;;;:::o;19503:96::-;19540:7;19569:24;19587:5;19569:24;:::i;:::-;19558:35;;19548:51;;;:::o;19605:90::-;19639:7;19682:5;19675:13;19668:21;19657:32;;19647:48;;;:::o;19701:149::-;19737:7;19777:66;19770:5;19766:78;19755:89;;19745:105;;;:::o;19856:126::-;19893:7;19933:42;19926:5;19922:54;19911:65;;19901:81;;;:::o;19988:77::-;20025:7;20054:5;20043:16;;20033:32;;;:::o;20071:93::-;20107:7;20147:10;20140:5;20136:22;20125:33;;20115:49;;;:::o;20170:307::-;20238:1;20248:113;20262:6;20259:1;20256:13;20248:113;;;20347:1;20342:3;20338:11;20332:18;20328:1;20323:3;20319:11;20312:39;20284:2;20281:1;20277:10;20272:15;;20248:113;;;20379:6;20376:1;20373:13;20370:2;;;20459:1;20450:6;20445:3;20441:16;20434:27;20370:2;20219:258;;;;:::o;20483:320::-;20527:6;20564:1;20558:4;20554:12;20544:22;;20611:1;20605:4;20601:12;20632:18;20622:2;;20688:4;20680:6;20676:17;20666:27;;20622:2;20750;20742:6;20739:14;20719:18;20716:38;20713:2;;;20769:18;;:::i;:::-;20713:2;20534:269;;;;:::o;20809:180::-;20857:77;20854:1;20847:88;20954:4;20951:1;20944:15;20978:4;20975:1;20968:15;20995:180;21043:77;21040:1;21033:88;21140:4;21137:1;21130:15;21164:4;21161:1;21154:15;21181:180;21229:77;21226:1;21219:88;21326:4;21323:1;21316:15;21350:4;21347:1;21340:15;21367:117;21476:1;21473;21466:12;21490:117;21599:1;21596;21589:12;21613:117;21722:1;21719;21712:12;21736:117;21845:1;21842;21835:12;21859:117;21968:1;21965;21958:12;21982:102;22023:6;22074:2;22070:7;22065:2;22058:5;22054:14;22050:28;22040:38;;22030:54;;;:::o;22090:177::-;22230:29;22226:1;22218:6;22214:14;22207:53;22196:71;:::o;22273:172::-;22413:24;22409:1;22401:6;22397:14;22390:48;22379:66;:::o;22451:172::-;22591:24;22587:1;22579:6;22575:14;22568:48;22557:66;:::o;22629:176::-;22769:28;22765:1;22757:6;22753:14;22746:52;22735:70;:::o;22811:172::-;22951:24;22947:1;22939:6;22935:14;22928:48;22917:66;:::o;22989:172::-;23129:24;23125:1;23117:6;23113:14;23106:48;23095:66;:::o;23167:175::-;23307:27;23303:1;23295:6;23291:14;23284:51;23273:69;:::o;23348:174::-;23488:26;23484:1;23476:6;23472:14;23465:50;23454:68;:::o;23528:114::-;23634:8;:::o;23648:122::-;23721:24;23739:5;23721:24;:::i;:::-;23714:5;23711:35;23701:2;;23760:1;23757;23750:12;23701:2;23691:79;:::o;23776:116::-;23846:21;23861:5;23846:21;:::i;:::-;23839:5;23836:32;23826:2;;23882:1;23879;23872:12;23826:2;23816:76;:::o;23898:120::-;23970:23;23987:5;23970:23;:::i;:::-;23963:5;23960:34;23950:2;;24008:1;24005;23998:12;23950:2;23940:78;:::o;24024:122::-;24097:24;24115:5;24097:24;:::i;:::-;24090:5;24087:35;24077:2;;24136:1;24133;24126:12;24077:2;24067:79;:::o;24152:120::-;24224:23;24241:5;24224:23;:::i;:::-;24217:5;24214:34;24204:2;;24262:1;24259;24252:12;24204:2;24194:78;:::o

Swarm Source

ipfs://150d21c4044a9b58d92bef1fd9c4b56b333417d83759af2e85e6e18cff9d0471
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.