ETH Price: $3,404.47 (+2.79%)

Contract

0xEeca143947Ae66D5F74aCB0dBB105Faf47b29596
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...211547472024-11-10 4:02:2313 days ago1731211343IN
0xEeca1439...f47b29596
0 ETH0.000401868.61329781
Set Approval For...210693022024-10-29 5:47:5925 days ago1730180879IN
0xEeca1439...f47b29596
0 ETH0.000363037.78112043
Set Approval For...206498922024-08-31 16:57:5984 days ago1725123479IN
0xEeca1439...f47b29596
0 ETH0.000043810.93900194
Set Approval For...206099252024-08-26 2:57:1189 days ago1724641031IN
0xEeca1439...f47b29596
0 ETH0.000032270.69174108
Transfer From198939582024-05-18 2:48:35189 days ago1716000515IN
0xEeca1439...f47b29596
0 ETH0.000186473.19257965
Set Approval For...190975462024-01-27 11:13:59301 days ago1706354039IN
0xEeca1439...f47b29596
0 ETH0.0003022212.21401312
Transfer From189898102024-01-12 9:05:35316 days ago1705050335IN
0xEeca1439...f47b29596
0 ETH0.0010713916.95319388
Transfer From178981542023-08-12 10:20:47469 days ago1691835647IN
0xEeca1439...f47b29596
0 ETH0.0007363112.60880736
Set Approval For...170671582023-04-17 14:43:11586 days ago1681742591IN
0xEeca1439...f47b29596
0 ETH0.002119645.43052136
Set Approval For...170172522023-04-10 10:36:47593 days ago1681123007IN
0xEeca1439...f47b29596
0 ETH0.0008474918.15551971
Set Approval For...168288042023-03-14 21:16:47620 days ago1678828607IN
0xEeca1439...f47b29596
0 ETH0.00179938.53903559
Set Approval For...168171042023-03-13 5:51:47621 days ago1678686707IN
0xEeca1439...f47b29596
0 ETH0.0007883716.89750868
Set Approval For...167558872023-03-04 15:11:59630 days ago1677942719IN
0xEeca1439...f47b29596
0 ETH0.0014546631.13572146
Set Approval For...167324442023-03-01 8:00:11633 days ago1677657611IN
0xEeca1439...f47b29596
0 ETH0.0012025925.76263856
Set Approval For...167022552023-02-25 2:11:59637 days ago1677291119IN
0xEeca1439...f47b29596
0 ETH0.0009934721.28259899
Set Approval For...166590302023-02-19 0:19:11643 days ago1676765951IN
0xEeca1439...f47b29596
0 ETH0.0011008323.59472079
Set Approval For...166338732023-02-15 11:34:11647 days ago1676460851IN
0xEeca1439...f47b29596
0 ETH0.0012026225.76317733
Set Approval For...166334762023-02-15 10:13:47647 days ago1676456027IN
0xEeca1439...f47b29596
0 ETH0.0010878423.31621754
Set Approval For...166317032023-02-15 4:17:11647 days ago1676434631IN
0xEeca1439...f47b29596
0 ETH0.0015152932.46127663
Set Approval For...165824272023-02-08 6:59:35654 days ago1675839575IN
0xEeca1439...f47b29596
0 ETH0.0012045125.77054161
Set Approval For...165250682023-01-31 6:38:47662 days ago1675147127IN
0xEeca1439...f47b29596
0 ETH0.0006653414.26063211
Set Approval For...164945412023-01-27 0:21:11666 days ago1674778871IN
0xEeca1439...f47b29596
0 ETH0.0008547218.31980331
Set Approval For...164940852023-01-26 22:49:59666 days ago1674773399IN
0xEeca1439...f47b29596
0 ETH0.001295427.76493916
Set Approval For...164940452023-01-26 22:41:59666 days ago1674772919IN
0xEeca1439...f47b29596
0 ETH0.0014314930.68195223
Set Approval For...164102432023-01-15 5:53:59678 days ago1673762039IN
0xEeca1439...f47b29596
0 ETH0.0007331115.71317189
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SeriesTwo

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-24
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-23
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-22
*/

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

library Strings {
  bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
  uint8 private constant _ADDRESS_LENGTH = 20;

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

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

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

  function toHexString(address addr) internal pure returns (string memory) {
    return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
  }
}

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

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

abstract contract Ownable is Context {
  address private _owner;

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

  constructor() {
    _transferOwnership(_msgSender());
  }

  modifier onlyOwner() {
    _checkOwner();
    _;
  }

  function owner() public view virtual returns (address) {
    return _owner;
  }

  function _checkOwner() internal view virtual {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
  }

  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }

  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal virtual {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
}

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

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

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

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

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

abstract contract Pausable is Context {
  event Paused(address account);
  event Unpaused(address account);
  bool private _paused;

  constructor() {
    _paused = false;
  }

  modifier whenNotPaused() {
    _requireNotPaused();
    _;
  }
  modifier whenPaused() {
    _requirePaused();
    _;
  }

  function paused() public view virtual returns (bool) {
    return _paused;
  }

  function _requireNotPaused() internal view virtual {
    require(!paused(), "Pausable: paused");
  }

  function _requirePaused() internal view virtual {
    require(paused(), "Pausable: not paused");
  }

  function _pause() internal virtual whenNotPaused {
    _paused = true;
    emit Paused(_msgSender());
  }

  function _unpause() internal virtual whenPaused {
    _paused = false;
    emit Unpaused(_msgSender());
  }
}

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

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

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

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

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

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

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

  function approve(address to, uint256 tokenId) external;

  function setApprovalForAll(address operator, bool _approved) external;

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

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

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

interface IERC721Metadata is IERC721 {
  function name() external view returns (string memory);

  function symbol() external view returns (string memory);

  function tokenURI(uint256 tokenId) external view returns (string memory);
}

library Address {
  function isContract(address account) internal view returns (bool) {
    return account.code.length > 0;
  }

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

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

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

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

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

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

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

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

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

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

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

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

  function verifyCallResult(
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal pure returns (bytes memory) {
    if (success) {
      return returndata;
    } else {
      if (returndata.length > 0) {
        assembly {
          let returndata_size := mload(returndata)
          revert(add(32, returndata), returndata_size)
        }
      } else {
        revert(errorMessage);
      }
    }
  }
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
  using Address for address;
  using Strings for uint256;
  string private _name;
  string private _symbol;
  mapping(uint256 => address) private _owners;
  mapping(address => uint256) private _balances;
  mapping(uint256 => address) private _tokenApprovals;
  mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

  function balanceOf(address owner) public view virtual override returns (uint256) {
    require(owner != address(0), "ERC721: address zero is not a valid owner");
    return _balances[owner];
  }

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

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

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

  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    _requireMinted(tokenId);

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

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

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

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

    _approve(to, tokenId);
  }

  function getApproved(uint256 tokenId) public view virtual override returns (address) {
    _requireMinted(tokenId);

    return _tokenApprovals[tokenId];
  }

  function setApprovalForAll(address operator, bool approved) public virtual override {
    _setApprovalForAll(_msgSender(), operator, approved);
  }

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

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

    _transfer(from, to, tokenId);
  }

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

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

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

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

  function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
    address owner = ERC721.ownerOf(tokenId);
    return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
  }

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

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

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

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

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

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

    _afterTokenTransfer(address(0), to, tokenId);
  }

  function _burn(uint256 tokenId) internal virtual {
    address owner = ERC721.ownerOf(tokenId);
    _beforeTokenTransfer(owner, address(0), tokenId);
    _approve(address(0), tokenId);
    _balances[owner] -= 1;
    delete _owners[tokenId];
    emit Transfer(owner, address(0), tokenId);
    _afterTokenTransfer(owner, address(0), tokenId);
  }

  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual {
    require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
    require(to != address(0), "ERC721: transfer to the zero address");
    _beforeTokenTransfer(from, to, tokenId);
    _approve(address(0), tokenId);
    _balances[from] -= 1;
    _balances[to] += 1;
    _owners[tokenId] = to;

    emit Transfer(from, to, tokenId);

    _afterTokenTransfer(from, to, tokenId);
  }

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

  function _setApprovalForAll(
    address owner,
    address operator,
    bool approved
  ) internal virtual {
    require(owner != operator, "ERC721: approve to caller");
    _operatorApprovals[owner][operator] = approved;
    emit ApprovalForAll(owner, operator, approved);
  }

  function _requireMinted(uint256 tokenId) internal view virtual {
    require(_exists(tokenId), "ERC721: invalid token ID");
  }

  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory data
  ) private returns (bool) {
    if (to.isContract()) {
      try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
        return retval == IERC721Receiver.onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721: transfer to non ERC721Receiver implementer");
        } else {
          /// @solidity memory-safe-assembly
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual {}

  function _afterTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual {}
}

library MerkleProof {
  function verify(
    bytes32[] memory proof,
    bytes32 root,
    bytes32 leaf
  ) internal pure returns (bool) {
    return processProof(proof, leaf) == root;
  }

  function verifyCalldata(
    bytes32[] calldata proof,
    bytes32 root,
    bytes32 leaf
  ) internal pure returns (bool) {
    return processProofCalldata(proof, leaf) == root;
  }

  function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
    bytes32 computedHash = leaf;
    for (uint256 i = 0; i < proof.length; i++) {
      computedHash = _hashPair(computedHash, proof[i]);
    }
    return computedHash;
  }

  function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
    bytes32 computedHash = leaf;
    for (uint256 i = 0; i < proof.length; i++) {
      computedHash = _hashPair(computedHash, proof[i]);
    }
    return computedHash;
  }

  function multiProofVerify(
    bytes32[] memory proof,
    bool[] memory proofFlags,
    bytes32 root,
    bytes32[] memory leaves
  ) internal pure returns (bool) {
    return processMultiProof(proof, proofFlags, leaves) == root;
  }

  function multiProofVerifyCalldata(
    bytes32[] calldata proof,
    bool[] calldata proofFlags,
    bytes32 root,
    bytes32[] memory leaves
  ) internal pure returns (bool) {
    return processMultiProofCalldata(proof, proofFlags, leaves) == root;
  }

  function processMultiProof(
    bytes32[] memory proof,
    bool[] memory proofFlags,
    bytes32[] memory leaves
  ) internal pure returns (bytes32 merkleRoot) {
    uint256 leavesLen = leaves.length;
    uint256 totalHashes = proofFlags.length;
    require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

    bytes32[] memory hashes = new bytes32[](totalHashes);
    uint256 leafPos = 0;
    uint256 hashPos = 0;
    uint256 proofPos = 0;

    for (uint256 i = 0; i < totalHashes; i++) {
      bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
      bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
      hashes[i] = _hashPair(a, b);
    }

    if (totalHashes > 0) {
      return hashes[totalHashes - 1];
    } else if (leavesLen > 0) {
      return leaves[0];
    } else {
      return proof[0];
    }
  }

  function processMultiProofCalldata(
    bytes32[] calldata proof,
    bool[] calldata proofFlags,
    bytes32[] memory leaves
  ) internal pure returns (bytes32 merkleRoot) {
    uint256 leavesLen = leaves.length;
    uint256 totalHashes = proofFlags.length;

    require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

    bytes32[] memory hashes = new bytes32[](totalHashes);
    uint256 leafPos = 0;
    uint256 hashPos = 0;
    uint256 proofPos = 0;

    for (uint256 i = 0; i < totalHashes; i++) {
      bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
      bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
      hashes[i] = _hashPair(a, b);
    }

    if (totalHashes > 0) {
      return hashes[totalHashes - 1];
    } else if (leavesLen > 0) {
      return leaves[0];
    } else {
      return proof[0];
    }
  }

  function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
    return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
  }

  function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
    assembly {
      mstore(0x00, a)
      mstore(0x20, b)
      value := keccak256(0x00, 0x40)
    }
  }
}

abstract contract ERC721URIStorage is ERC721 {
  using Strings for uint256;

  mapping(uint256 => string) private _tokenURIs;

  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    _requireMinted(tokenId);

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

    if (bytes(base).length == 0) {
      return _tokenURI;
    }
    if (bytes(_tokenURI).length > 0) {
      return string(abi.encodePacked(base, _tokenURI));
    }

    return super.tokenURI(tokenId);
  }

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

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

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

contract SeriesTwo is ERC721, ERC721URIStorage, Ownable, Pausable {
  using Counters for Counters.Counter;
  using Strings for uint256;

  string public baseURI;
  uint40 public preMintStart = 1661349600; // 2:00 PM Wednesday, Coordinated Universal Time (UTC)
  uint40 public preMintEnd = 1661436000; // 2:00 PM Thursday, Coordinated Universal Time (UTC)
  uint256 public mintLimit = 10000;
  bool public salePaused = false;
  IERC721 public seriesOne;

  bytes32 private _root;
  Counters.Counter public mintCount;
  mapping(address => uint256) private count;

  constructor() ERC721("Ethnology Series 2: Gods and Demons", "Gods and Demons S2") {
    setBaseURI("ipfs://QmSRgQkKJ8rWMJxuHDSzaq1fT6PGvBpdkKmpktFE7qJ3p4/");
    setSeriesOne(0xA8D6Ab1e26d90De9837f2828545a0357967F6251);
    setRoot(0x1dfbc8daa0d5622674cf94465236b6e03e631c0e4f9d43ceb8b582f395dad4eb);
  }

  function mintSale(uint256 amount, bytes32[] memory _proof) external {
    require(!salePaused, "Sale is paused");
    require(amount > 0, "Invalid amount");
    require(preMintStart < getCurrentTime(), "Minting Not Started Yet");
    require(mintCount.current() <= mintLimit, "Max Mint Limit Reached");
    if (preMintStart <= getCurrentTime() && preMintEnd > getCurrentTime()) {
      uint8 mintingLimit = checkLimit(msg.sender, _proof);
      require(mintingLimit > 0, "MINT NOT ALLOWED");
      require(count[msg.sender] + amount <= mintingLimit, "Limit exceeded");
      for (uint256 _iter = 0; _iter < amount; ) {
        _mintSale();
        unchecked {
          _iter++;
        }
      }
    } else {
      require(count[msg.sender] < 1, "You reached Max Minting limit");
      _mintSale();
    }
  }

  function _mintSale() private {
    mintCount.increment();
    mint(msg.sender, mintCount.current());
    count[msg.sender] += 1;
  }

  function getCurrentTime() private view returns (uint256) {
    return block.timestamp;
  }

  function seriesOneBal(address _owner) internal view returns (uint256) {
    return seriesOne.balanceOf(_owner);
  }

  // The following functions are overrides required by Solidity.

  function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
    super._burn(tokenId);
  }

  function isWhiteListed(
    bytes32[] memory _prof,
    bytes32 _rot,
    bytes32 _leaf
  ) public pure returns (bool) {
    return MerkleProof.verify(_prof, _rot, _leaf);
  }

  function switchSale() public onlyOwner {
    salePaused = !salePaused;
  }

  function setSeriesOne(address _seriesOne) public onlyOwner {
    seriesOne = IERC721(_seriesOne);
  }

  function setRoot(bytes32 root) public onlyOwner {
    _root = root;
  }

  function setMintTimeStart(uint40 _preMint, uint40 _mainMint) public onlyOwner {
    preMintStart = _preMint;
    preMintEnd = _mainMint;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function mint(address to, uint256 _tokenId) internal {
    _safeMint(to, _tokenId);
  }

  function tokenURI(uint256 tokenId) public view virtual override(ERC721, ERC721URIStorage) returns (string memory) {
    require(_exists(tokenId), "Querying Nonexistent token");

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

  function getMarkleLeaf(address _user) internal pure returns (bytes32) {
    return keccak256(abi.encodePacked(_user));
  }

  function checkLimit(address _user, bytes32[] memory _proof) public view returns (uint8) {
    return (seriesOneBal(_user) >= 1) ? 5 : (isWhiteListed(_proof, _root, getMarkleLeaf(_user))) ? 3 : 0;
  }
}

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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"checkLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"bytes32[]","name":"_prof","type":"bytes32[]"},{"internalType":"bytes32","name":"_rot","type":"bytes32"},{"internalType":"bytes32","name":"_leaf","type":"bytes32"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"mintCount","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintEnd","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintStart","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seriesOne","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"_preMint","type":"uint40"},{"internalType":"uint40","name":"_mainMint","type":"uint40"}],"name":"setMintTimeStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_seriesOne","type":"address"}],"name":"setSeriesOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

60806040526363062ee0600960006101000a81548164ffffffffff021916908364ffffffffff1602179055506363078060600960056101000a81548164ffffffffff021916908364ffffffffff160217905550612710600a556000600b60006101000a81548160ff0219169083151502179055503480156200008057600080fd5b50604051806060016040528060238152602001620042c6602391396040518060400160405280601281526020017f476f647320616e642044656d6f6e7320533200000000000000000000000000008152508160009080519060200190620000e9929190620003ec565b50806001908051906020019062000102929190620003ec565b5050506200012562000119620001c960201b60201c565b620001d160201b60201c565b6000600760146101000a81548160ff0219169083151502179055506200016a604051806060016040528060368152602001620042e9603691396200029760201b60201c565b6200018f73a8d6ab1e26d90de9837f2828545a0357967f6251620002c360201b60201c565b620001c37f1dfbc8daa0d5622674cf94465236b6e03e631c0e4f9d43ceb8b582f395dad4eb60001b6200031760201b60201c565b62000584565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a76200033160201b60201c565b8060089080519060200190620002bf929190620003ec565b5050565b620002d36200033160201b60201c565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620003276200033160201b60201c565b80600c8190555050565b62000341620001c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000367620003c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b790620004c3565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003fa90620004f6565b90600052602060002090601f0160209004810192826200041e57600085556200046a565b82601f106200043957805160ff19168380011785556200046a565b828001600101855582156200046a579182015b82811115620004695782518255916020019190600101906200044c565b5b5090506200047991906200047d565b5090565b5b80821115620004985760008160009055506001016200047e565b5090565b6000620004ab602083620004e5565b9150620004b8826200055b565b602082019050919050565b60006020820190508181036000830152620004de816200049c565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200050f57607f821691505b602082108114156200052657620005256200052c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613d3280620005946000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a921b7b1116100a2578063d3d9aeeb11610071578063d3d9aeeb14610581578063dab5f3401461059f578063e985e9c5146105bb578063f2fde38b146105eb576101f0565b8063a921b7b1146104e7578063b88d4fde14610517578063c435c7a114610533578063c87b56dd14610551576101f0565b80639659867e116100de5780639659867e14610473578063996517cf146104915780639a1a0761146104af578063a22cb465146104cb576101f0565b806370a08231146103fd578063715018a61461042d5780638da5cb5b1461043757806395d89b4114610455576101f0565b80634d7ce134116101875780635c975abb116101565780635c975abb146103735780635d08c1ae146103915780636352211e146103af5780636c0360eb146103df576101f0565b80634d7ce134146102ff5780634edd147e1461032f5780635322f9d11461034d57806355f804b314610357576101f0565b806323b872dd116101c357806323b872dd1461028f5780632f8af9df146102ab5780633ea5e4c2146102c757806342842e0e146102e3576101f0565b806301ffc9a7146101f557806306fdde0314610225578063081812fc14610243578063095ea7b314610273575b600080fd5b61020f600480360381019061020a919061292b565b610607565b60405161021c9190612f8b565b60405180910390f35b61022d6106e9565b60405161023a9190612fc1565b60405180910390f35b61025d600480360381019061025891906129ce565b61077b565b60405161026a9190612f24565b60405180910390f35b61028d6004803603810190610288919061284f565b6107c1565b005b6102a960048036038101906102a491906126dd565b6108d9565b005b6102c560048036038101906102c09190612a28565b610939565b005b6102e160048036038101906102dc9190612670565b610c6d565b005b6102fd60048036038101906102f891906126dd565b610cb9565b005b6103196004803603810190610314919061288f565b610cd9565b6040516103269190612f8b565b60405180910390f35b610337610cef565b6040516103449190612fa6565b60405180910390f35b610355610d15565b005b610371600480360381019061036c9190612985565b610d49565b005b61037b610d6b565b6040516103889190612f8b565b60405180910390f35b610399610d82565b6040516103a69190612f8b565b60405180910390f35b6103c960048036038101906103c491906129ce565b610d95565b6040516103d69190612f24565b60405180910390f35b6103e7610e47565b6040516103f49190612fc1565b60405180910390f35b61041760048036038101906104129190612670565b610ed5565b6040516104249190613283565b60405180910390f35b610435610f8d565b005b61043f610fa1565b60405161044c9190612f24565b60405180910390f35b61045d610fcb565b60405161046a9190612fc1565b60405180910390f35b61047b61105d565b6040516104889190613283565b60405180910390f35b610499611069565b6040516104a69190613283565b60405180910390f35b6104c960048036038101906104c49190612a84565b61106f565b005b6104e560048036038101906104e0919061280f565b6110c1565b005b61050160048036038101906104fc91906127b3565b6110d7565b60405161050e91906132b9565b60405180910390f35b610531600480360381019061052c9190612730565b61111d565b005b61053b61117f565b604051610548919061329e565b60405180910390f35b61056b600480360381019061056691906129ce565b611196565b6040516105789190612fc1565b60405180910390f35b6105896112c0565b604051610596919061329e565b60405180910390f35b6105b960048036038101906105b491906128fe565b6112d7565b005b6105d560048036038101906105d0919061269d565b6112e9565b6040516105e29190612f8b565b60405180910390f35b61060560048036038101906106009190612670565b61137d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e257506106e182611401565b5b9050919050565b6060600080546106f890613599565b80601f016020809104026020016040519081016040528092919081815260200182805461072490613599565b80156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b5050505050905090565b60006107868261146b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107cc82610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490613203565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661085c6114b6565b73ffffffffffffffffffffffffffffffffffffffff16148061088b575061088a816108856114b6565b6112e9565b5b6108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c190613183565b60405180910390fd5b6108d483836114be565b505050565b6108ea6108e46114b6565b82611577565b610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090613263565b60405180910390fd5b61093483838361160c565b505050565b600b60009054906101000a900460ff1615610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098090613243565b60405180910390fd5b600082116109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906130a3565b60405180910390fd5b6109d4611873565b600960009054906101000a900464ffffffffff1664ffffffffff1610610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690613003565b60405180910390fd5b600a54610a3c600d61187b565b1115610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490612fe3565b60405180910390fd5b610a85611873565b600960009054906101000a900464ffffffffff1664ffffffffff1611158015610ace5750610ab1611873565b600960059054906101000a900464ffffffffff1664ffffffffff16115b15610bde576000610adf33836110d7565b905060008160ff1611610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613143565b60405180910390fd5b8060ff1683600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7691906133ca565b1115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906130c3565b60405180910390fd5b60005b83811015610bd757610bca611889565b8080600101915050610bba565b5050610c69565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613223565b60405180910390fd5b610c68611889565b5b5050565b610c756118ff565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cd48383836040518060200160405280600081525061111d565b505050565b6000610ce684848461197d565b90509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1d6118ff565b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610d516118ff565b8060089080519060200190610d679291906123a7565b5050565b6000600760149054906101000a900460ff16905090565b600b60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e35906131e3565b60405180910390fd5b80915050919050565b60088054610e5490613599565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8090613599565b8015610ecd5780601f10610ea257610100808354040283529160200191610ecd565b820191906000526020600020905b815481529060010190602001808311610eb057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613123565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f956118ff565b610f9f6000611994565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fda90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461100690613599565b80156110535780601f1061102857610100808354040283529160200191611053565b820191906000526020600020905b81548152906001019060200180831161103657829003601f168201915b5050505050905090565b600d8060000154905081565b600a5481565b6110776118ff565b81600960006101000a81548164ffffffffff021916908364ffffffffff16021790555080600960056101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b6110d36110cc6114b6565b8383611a5a565b5050565b600060016110e484611bc7565b1015611112576110ff82600c546110fa86611c7b565b610cd9565b61110a57600061110d565b60035b611115565b60055b905092915050565b61112e6111286114b6565b83611577565b61116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613263565b60405180910390fd5b61117984848484611cab565b50505050565b600960009054906101000a900464ffffffffff1681565b60606111a182611d07565b6111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613163565b60405180910390fd5b6000600880546111ef90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461121b90613599565b80156112685780601f1061123d57610100808354040283529160200191611268565b820191906000526020600020905b81548152906001019060200180831161124b57829003601f168201915b50505050509050600081511161128d57604051806020016040528060008152506112b8565b8061129784611d73565b6040516020016112a8929190612ef5565b6040516020818303038152906040525b915050919050565b600960059054906101000a900464ffffffffff1681565b6112df6118ff565b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113856118ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90613043565b60405180910390fd5b6113fe81611994565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61147481611d07565b6114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa906131e3565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661153183610d95565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061158383610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115c557506115c481856112e9565b5b8061160357508373ffffffffffffffffffffffffffffffffffffffff166115eb8461077b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661162c82610d95565b73ffffffffffffffffffffffffffffffffffffffff1614611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613063565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906130e3565b60405180910390fd5b6116fd838383611ed4565b6117086000826114be565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117589190613451565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117af91906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461186e838383611ed9565b505050565b600042905090565b600081600001549050919050565b611893600d611ede565b6118a6336118a1600d61187b565b611ef4565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f691906133ca565b92505081905550565b6119076114b6565b73ffffffffffffffffffffffffffffffffffffffff16611925610fa1565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906131c3565b60405180910390fd5b565b60008261198a8584611f02565b1490509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613103565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bba9190612f8b565b60405180910390a3505050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611c249190612f24565b60206040518083038186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7491906129fb565b9050919050565b600081604051602001611c8e9190612eda565b604051602081830303815290604052805190602001209050919050565b611cb684848461160c565b611cc284848484611f58565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613023565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606000821415611dbb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ecf565b600082905060005b60008214611ded578080611dd6906135fc565b915050600a82611de69190613420565b9150611dc3565b60008167ffffffffffffffff811115611e0957611e08613756565b5b6040519080825280601f01601f191660200182016040528015611e3b5781602001600182028036833780820191505090505b5090505b60008514611ec857600182611e549190613451565b9150600a85611e639190613669565b6030611e6f91906133ca565b60f81b818381518110611e8557611e84613727565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ec19190613420565b9450611e3f565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b611efe82826120ef565b5050565b60008082905060005b8451811015611f4d57611f3882868381518110611f2b57611f2a613727565b5b602002602001015161210d565b91508080611f45906135fc565b915050611f0b565b508091505092915050565b6000611f798473ffffffffffffffffffffffffffffffffffffffff16612138565b156120e2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fa26114b6565b8786866040518563ffffffff1660e01b8152600401611fc49493929190612f3f565b602060405180830381600087803b158015611fde57600080fd5b505af192505050801561200f57506040513d601f19601f8201168201806040525081019061200c9190612958565b60015b612092573d806000811461203f576040519150601f19603f3d011682016040523d82523d6000602084013e612044565b606091505b5060008151141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613023565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120e7565b600190505b949350505050565b61210982826040518060200160405280600081525061215b565b5050565b60008183106121255761212082846121b6565b612130565b61212f83836121b6565b5b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61216583836121cd565b6121726000848484611f58565b6121b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a890613023565b60405180910390fd5b505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906131a3565b60405180910390fd5b61224681611d07565b15612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613083565b60405180910390fd5b61229260008383611ed4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e291906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123a360008383611ed9565b5050565b8280546123b390613599565b90600052602060002090601f0160209004810192826123d5576000855561241c565b82601f106123ee57805160ff191683800117855561241c565b8280016001018555821561241c579182015b8281111561241b578251825591602001919060010190612400565b5b509050612429919061242d565b5090565b5b8082111561244657600081600090555060010161242e565b5090565b600061245d612458846132f9565b6132d4565b905080838252602082019050828560208602820111156124805761247f61378a565b5b60005b858110156124b057816124968882612596565b845260208401935060208301925050600181019050612483565b5050509392505050565b60006124cd6124c884613325565b6132d4565b9050828152602081018484840111156124e9576124e861378f565b5b6124f4848285613557565b509392505050565b600061250f61250a84613356565b6132d4565b90508281526020810184848401111561252b5761252a61378f565b5b612536848285613557565b509392505050565b60008135905061254d81613c72565b92915050565b600082601f83011261256857612567613785565b5b813561257884826020860161244a565b91505092915050565b60008135905061259081613c89565b92915050565b6000813590506125a581613ca0565b92915050565b6000813590506125ba81613cb7565b92915050565b6000815190506125cf81613cb7565b92915050565b600082601f8301126125ea576125e9613785565b5b81356125fa8482602086016124ba565b91505092915050565b600082601f83011261261857612617613785565b5b81356126288482602086016124fc565b91505092915050565b60008135905061264081613cce565b92915050565b60008151905061265581613cce565b92915050565b60008135905061266a81613ce5565b92915050565b60006020828403121561268657612685613799565b5b60006126948482850161253e565b91505092915050565b600080604083850312156126b4576126b3613799565b5b60006126c28582860161253e565b92505060206126d38582860161253e565b9150509250929050565b6000806000606084860312156126f6576126f5613799565b5b60006127048682870161253e565b93505060206127158682870161253e565b925050604061272686828701612631565b9150509250925092565b6000806000806080858703121561274a57612749613799565b5b60006127588782880161253e565b94505060206127698782880161253e565b935050604061277a87828801612631565b925050606085013567ffffffffffffffff81111561279b5761279a613794565b5b6127a7878288016125d5565b91505092959194509250565b600080604083850312156127ca576127c9613799565b5b60006127d88582860161253e565b925050602083013567ffffffffffffffff8111156127f9576127f8613794565b5b61280585828601612553565b9150509250929050565b6000806040838503121561282657612825613799565b5b60006128348582860161253e565b925050602061284585828601612581565b9150509250929050565b6000806040838503121561286657612865613799565b5b60006128748582860161253e565b925050602061288585828601612631565b9150509250929050565b6000806000606084860312156128a8576128a7613799565b5b600084013567ffffffffffffffff8111156128c6576128c5613794565b5b6128d286828701612553565b93505060206128e386828701612596565b92505060406128f486828701612596565b9150509250925092565b60006020828403121561291457612913613799565b5b600061292284828501612596565b91505092915050565b60006020828403121561294157612940613799565b5b600061294f848285016125ab565b91505092915050565b60006020828403121561296e5761296d613799565b5b600061297c848285016125c0565b91505092915050565b60006020828403121561299b5761299a613799565b5b600082013567ffffffffffffffff8111156129b9576129b8613794565b5b6129c584828501612603565b91505092915050565b6000602082840312156129e4576129e3613799565b5b60006129f284828501612631565b91505092915050565b600060208284031215612a1157612a10613799565b5b6000612a1f84828501612646565b91505092915050565b60008060408385031215612a3f57612a3e613799565b5b6000612a4d85828601612631565b925050602083013567ffffffffffffffff811115612a6e57612a6d613794565b5b612a7a85828601612553565b9150509250929050565b60008060408385031215612a9b57612a9a613799565b5b6000612aa98582860161265b565b9250506020612aba8582860161265b565b9150509250929050565b612acd81613485565b82525050565b612ae4612adf82613485565b613645565b82525050565b612af381613497565b82525050565b6000612b0482613387565b612b0e818561339d565b9350612b1e818560208601613566565b612b278161379e565b840191505092915050565b612b3b81613521565b82525050565b6000612b4c82613392565b612b5681856133ae565b9350612b66818560208601613566565b612b6f8161379e565b840191505092915050565b6000612b8582613392565b612b8f81856133bf565b9350612b9f818560208601613566565b80840191505092915050565b6000612bb86016836133ae565b9150612bc3826137bc565b602082019050919050565b6000612bdb6017836133ae565b9150612be6826137e5565b602082019050919050565b6000612bfe6032836133ae565b9150612c098261380e565b604082019050919050565b6000612c216026836133ae565b9150612c2c8261385d565b604082019050919050565b6000612c446025836133ae565b9150612c4f826138ac565b604082019050919050565b6000612c67601c836133ae565b9150612c72826138fb565b602082019050919050565b6000612c8a600e836133ae565b9150612c9582613924565b602082019050919050565b6000612cad600e836133ae565b9150612cb88261394d565b602082019050919050565b6000612cd06024836133ae565b9150612cdb82613976565b604082019050919050565b6000612cf36019836133ae565b9150612cfe826139c5565b602082019050919050565b6000612d166029836133ae565b9150612d21826139ee565b604082019050919050565b6000612d396010836133ae565b9150612d4482613a3d565b602082019050919050565b6000612d5c601a836133ae565b9150612d6782613a66565b602082019050919050565b6000612d7f603e836133ae565b9150612d8a82613a8f565b604082019050919050565b6000612da26020836133ae565b9150612dad82613ade565b602082019050919050565b6000612dc56005836133bf565b9150612dd082613b07565b600582019050919050565b6000612de86020836133ae565b9150612df382613b30565b602082019050919050565b6000612e0b6018836133ae565b9150612e1682613b59565b602082019050919050565b6000612e2e6021836133ae565b9150612e3982613b82565b604082019050919050565b6000612e51601d836133ae565b9150612e5c82613bd1565b602082019050919050565b6000612e74600e836133ae565b9150612e7f82613bfa565b602082019050919050565b6000612e97602e836133ae565b9150612ea282613c23565b604082019050919050565b612eb6816134f9565b82525050565b612ec581613503565b82525050565b612ed481613514565b82525050565b6000612ee68284612ad3565b60148201915081905092915050565b6000612f018285612b7a565b9150612f0d8284612b7a565b9150612f1882612db8565b91508190509392505050565b6000602082019050612f396000830184612ac4565b92915050565b6000608082019050612f546000830187612ac4565b612f616020830186612ac4565b612f6e6040830185612ead565b8181036060830152612f808184612af9565b905095945050505050565b6000602082019050612fa06000830184612aea565b92915050565b6000602082019050612fbb6000830184612b32565b92915050565b60006020820190508181036000830152612fdb8184612b41565b905092915050565b60006020820190508181036000830152612ffc81612bab565b9050919050565b6000602082019050818103600083015261301c81612bce565b9050919050565b6000602082019050818103600083015261303c81612bf1565b9050919050565b6000602082019050818103600083015261305c81612c14565b9050919050565b6000602082019050818103600083015261307c81612c37565b9050919050565b6000602082019050818103600083015261309c81612c5a565b9050919050565b600060208201905081810360008301526130bc81612c7d565b9050919050565b600060208201905081810360008301526130dc81612ca0565b9050919050565b600060208201905081810360008301526130fc81612cc3565b9050919050565b6000602082019050818103600083015261311c81612ce6565b9050919050565b6000602082019050818103600083015261313c81612d09565b9050919050565b6000602082019050818103600083015261315c81612d2c565b9050919050565b6000602082019050818103600083015261317c81612d4f565b9050919050565b6000602082019050818103600083015261319c81612d72565b9050919050565b600060208201905081810360008301526131bc81612d95565b9050919050565b600060208201905081810360008301526131dc81612ddb565b9050919050565b600060208201905081810360008301526131fc81612dfe565b9050919050565b6000602082019050818103600083015261321c81612e21565b9050919050565b6000602082019050818103600083015261323c81612e44565b9050919050565b6000602082019050818103600083015261325c81612e67565b9050919050565b6000602082019050818103600083015261327c81612e8a565b9050919050565b60006020820190506132986000830184612ead565b92915050565b60006020820190506132b36000830184612ebc565b92915050565b60006020820190506132ce6000830184612ecb565b92915050565b60006132de6132ef565b90506132ea82826135cb565b919050565b6000604051905090565b600067ffffffffffffffff82111561331457613313613756565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133405761333f613756565b5b6133498261379e565b9050602081019050919050565b600067ffffffffffffffff82111561337157613370613756565b5b61337a8261379e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d5826134f9565b91506133e0836134f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134155761341461369a565b5b828201905092915050565b600061342b826134f9565b9150613436836134f9565b925082613446576134456136c9565b5b828204905092915050565b600061345c826134f9565b9150613467836134f9565b92508282101561347a5761347961369a565b5b828203905092915050565b6000613490826134d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b600060ff82169050919050565b600061352c82613533565b9050919050565b600061353e82613545565b9050919050565b6000613550826134d9565b9050919050565b82818337600083830152505050565b60005b83811015613584578082015181840152602081019050613569565b83811115613593576000848401525b50505050565b600060028204905060018216806135b157607f821691505b602082108114156135c5576135c46136f8565b5b50919050565b6135d48261379e565b810181811067ffffffffffffffff821117156135f3576135f2613756565b5b80604052505050565b6000613607826134f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363a5761363961369a565b5b600182019050919050565b600061365082613657565b9050919050565b6000613662826137af565b9050919050565b6000613674826134f9565b915061367f836134f9565b92508261368f5761368e6136c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d6178204d696e74204c696d6974205265616368656400000000000000000000600082015250565b7f4d696e74696e67204e6f74205374617274656420596574000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4c696d6974206578636565646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4d494e54204e4f5420414c4c4f57454400000000000000000000000000000000600082015250565b7f5175657279696e67204e6f6e6578697374656e7420746f6b656e000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752072656163686564204d6178204d696e74696e67206c696d6974000000600082015250565b7f53616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613c7b81613485565b8114613c8657600080fd5b50565b613c9281613497565b8114613c9d57600080fd5b50565b613ca9816134a3565b8114613cb457600080fd5b50565b613cc0816134ad565b8114613ccb57600080fd5b50565b613cd7816134f9565b8114613ce257600080fd5b50565b613cee81613503565b8114613cf957600080fd5b5056fea2646970667358221220c38a6f7f65e2fcb749438d7b584319940ba8f466782595e84cff358604d6fdf964736f6c634300080700334574686e6f6c6f67792053657269657320323a20476f647320616e642044656d6f6e73697066733a2f2f516d535267516b4b4a3872574d4a78754844537a6171316654365047764270646b4b6d706b74464537714a3370342f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a921b7b1116100a2578063d3d9aeeb11610071578063d3d9aeeb14610581578063dab5f3401461059f578063e985e9c5146105bb578063f2fde38b146105eb576101f0565b8063a921b7b1146104e7578063b88d4fde14610517578063c435c7a114610533578063c87b56dd14610551576101f0565b80639659867e116100de5780639659867e14610473578063996517cf146104915780639a1a0761146104af578063a22cb465146104cb576101f0565b806370a08231146103fd578063715018a61461042d5780638da5cb5b1461043757806395d89b4114610455576101f0565b80634d7ce134116101875780635c975abb116101565780635c975abb146103735780635d08c1ae146103915780636352211e146103af5780636c0360eb146103df576101f0565b80634d7ce134146102ff5780634edd147e1461032f5780635322f9d11461034d57806355f804b314610357576101f0565b806323b872dd116101c357806323b872dd1461028f5780632f8af9df146102ab5780633ea5e4c2146102c757806342842e0e146102e3576101f0565b806301ffc9a7146101f557806306fdde0314610225578063081812fc14610243578063095ea7b314610273575b600080fd5b61020f600480360381019061020a919061292b565b610607565b60405161021c9190612f8b565b60405180910390f35b61022d6106e9565b60405161023a9190612fc1565b60405180910390f35b61025d600480360381019061025891906129ce565b61077b565b60405161026a9190612f24565b60405180910390f35b61028d6004803603810190610288919061284f565b6107c1565b005b6102a960048036038101906102a491906126dd565b6108d9565b005b6102c560048036038101906102c09190612a28565b610939565b005b6102e160048036038101906102dc9190612670565b610c6d565b005b6102fd60048036038101906102f891906126dd565b610cb9565b005b6103196004803603810190610314919061288f565b610cd9565b6040516103269190612f8b565b60405180910390f35b610337610cef565b6040516103449190612fa6565b60405180910390f35b610355610d15565b005b610371600480360381019061036c9190612985565b610d49565b005b61037b610d6b565b6040516103889190612f8b565b60405180910390f35b610399610d82565b6040516103a69190612f8b565b60405180910390f35b6103c960048036038101906103c491906129ce565b610d95565b6040516103d69190612f24565b60405180910390f35b6103e7610e47565b6040516103f49190612fc1565b60405180910390f35b61041760048036038101906104129190612670565b610ed5565b6040516104249190613283565b60405180910390f35b610435610f8d565b005b61043f610fa1565b60405161044c9190612f24565b60405180910390f35b61045d610fcb565b60405161046a9190612fc1565b60405180910390f35b61047b61105d565b6040516104889190613283565b60405180910390f35b610499611069565b6040516104a69190613283565b60405180910390f35b6104c960048036038101906104c49190612a84565b61106f565b005b6104e560048036038101906104e0919061280f565b6110c1565b005b61050160048036038101906104fc91906127b3565b6110d7565b60405161050e91906132b9565b60405180910390f35b610531600480360381019061052c9190612730565b61111d565b005b61053b61117f565b604051610548919061329e565b60405180910390f35b61056b600480360381019061056691906129ce565b611196565b6040516105789190612fc1565b60405180910390f35b6105896112c0565b604051610596919061329e565b60405180910390f35b6105b960048036038101906105b491906128fe565b6112d7565b005b6105d560048036038101906105d0919061269d565b6112e9565b6040516105e29190612f8b565b60405180910390f35b61060560048036038101906106009190612670565b61137d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e257506106e182611401565b5b9050919050565b6060600080546106f890613599565b80601f016020809104026020016040519081016040528092919081815260200182805461072490613599565b80156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b5050505050905090565b60006107868261146b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107cc82610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490613203565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661085c6114b6565b73ffffffffffffffffffffffffffffffffffffffff16148061088b575061088a816108856114b6565b6112e9565b5b6108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c190613183565b60405180910390fd5b6108d483836114be565b505050565b6108ea6108e46114b6565b82611577565b610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090613263565b60405180910390fd5b61093483838361160c565b505050565b600b60009054906101000a900460ff1615610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098090613243565b60405180910390fd5b600082116109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906130a3565b60405180910390fd5b6109d4611873565b600960009054906101000a900464ffffffffff1664ffffffffff1610610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690613003565b60405180910390fd5b600a54610a3c600d61187b565b1115610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490612fe3565b60405180910390fd5b610a85611873565b600960009054906101000a900464ffffffffff1664ffffffffff1611158015610ace5750610ab1611873565b600960059054906101000a900464ffffffffff1664ffffffffff16115b15610bde576000610adf33836110d7565b905060008160ff1611610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613143565b60405180910390fd5b8060ff1683600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7691906133ca565b1115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906130c3565b60405180910390fd5b60005b83811015610bd757610bca611889565b8080600101915050610bba565b5050610c69565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613223565b60405180910390fd5b610c68611889565b5b5050565b610c756118ff565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cd48383836040518060200160405280600081525061111d565b505050565b6000610ce684848461197d565b90509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1d6118ff565b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610d516118ff565b8060089080519060200190610d679291906123a7565b5050565b6000600760149054906101000a900460ff16905090565b600b60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e35906131e3565b60405180910390fd5b80915050919050565b60088054610e5490613599565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8090613599565b8015610ecd5780601f10610ea257610100808354040283529160200191610ecd565b820191906000526020600020905b815481529060010190602001808311610eb057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613123565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f956118ff565b610f9f6000611994565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fda90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461100690613599565b80156110535780601f1061102857610100808354040283529160200191611053565b820191906000526020600020905b81548152906001019060200180831161103657829003601f168201915b5050505050905090565b600d8060000154905081565b600a5481565b6110776118ff565b81600960006101000a81548164ffffffffff021916908364ffffffffff16021790555080600960056101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b6110d36110cc6114b6565b8383611a5a565b5050565b600060016110e484611bc7565b1015611112576110ff82600c546110fa86611c7b565b610cd9565b61110a57600061110d565b60035b611115565b60055b905092915050565b61112e6111286114b6565b83611577565b61116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613263565b60405180910390fd5b61117984848484611cab565b50505050565b600960009054906101000a900464ffffffffff1681565b60606111a182611d07565b6111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613163565b60405180910390fd5b6000600880546111ef90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461121b90613599565b80156112685780601f1061123d57610100808354040283529160200191611268565b820191906000526020600020905b81548152906001019060200180831161124b57829003601f168201915b50505050509050600081511161128d57604051806020016040528060008152506112b8565b8061129784611d73565b6040516020016112a8929190612ef5565b6040516020818303038152906040525b915050919050565b600960059054906101000a900464ffffffffff1681565b6112df6118ff565b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113856118ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90613043565b60405180910390fd5b6113fe81611994565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61147481611d07565b6114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa906131e3565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661153183610d95565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061158383610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115c557506115c481856112e9565b5b8061160357508373ffffffffffffffffffffffffffffffffffffffff166115eb8461077b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661162c82610d95565b73ffffffffffffffffffffffffffffffffffffffff1614611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613063565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906130e3565b60405180910390fd5b6116fd838383611ed4565b6117086000826114be565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117589190613451565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117af91906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461186e838383611ed9565b505050565b600042905090565b600081600001549050919050565b611893600d611ede565b6118a6336118a1600d61187b565b611ef4565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f691906133ca565b92505081905550565b6119076114b6565b73ffffffffffffffffffffffffffffffffffffffff16611925610fa1565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906131c3565b60405180910390fd5b565b60008261198a8584611f02565b1490509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613103565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bba9190612f8b565b60405180910390a3505050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611c249190612f24565b60206040518083038186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7491906129fb565b9050919050565b600081604051602001611c8e9190612eda565b604051602081830303815290604052805190602001209050919050565b611cb684848461160c565b611cc284848484611f58565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613023565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606000821415611dbb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ecf565b600082905060005b60008214611ded578080611dd6906135fc565b915050600a82611de69190613420565b9150611dc3565b60008167ffffffffffffffff811115611e0957611e08613756565b5b6040519080825280601f01601f191660200182016040528015611e3b5781602001600182028036833780820191505090505b5090505b60008514611ec857600182611e549190613451565b9150600a85611e639190613669565b6030611e6f91906133ca565b60f81b818381518110611e8557611e84613727565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ec19190613420565b9450611e3f565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b611efe82826120ef565b5050565b60008082905060005b8451811015611f4d57611f3882868381518110611f2b57611f2a613727565b5b602002602001015161210d565b91508080611f45906135fc565b915050611f0b565b508091505092915050565b6000611f798473ffffffffffffffffffffffffffffffffffffffff16612138565b156120e2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fa26114b6565b8786866040518563ffffffff1660e01b8152600401611fc49493929190612f3f565b602060405180830381600087803b158015611fde57600080fd5b505af192505050801561200f57506040513d601f19601f8201168201806040525081019061200c9190612958565b60015b612092573d806000811461203f576040519150601f19603f3d011682016040523d82523d6000602084013e612044565b606091505b5060008151141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613023565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120e7565b600190505b949350505050565b61210982826040518060200160405280600081525061215b565b5050565b60008183106121255761212082846121b6565b612130565b61212f83836121b6565b5b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61216583836121cd565b6121726000848484611f58565b6121b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a890613023565b60405180910390fd5b505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906131a3565b60405180910390fd5b61224681611d07565b15612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613083565b60405180910390fd5b61229260008383611ed4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e291906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123a360008383611ed9565b5050565b8280546123b390613599565b90600052602060002090601f0160209004810192826123d5576000855561241c565b82601f106123ee57805160ff191683800117855561241c565b8280016001018555821561241c579182015b8281111561241b578251825591602001919060010190612400565b5b509050612429919061242d565b5090565b5b8082111561244657600081600090555060010161242e565b5090565b600061245d612458846132f9565b6132d4565b905080838252602082019050828560208602820111156124805761247f61378a565b5b60005b858110156124b057816124968882612596565b845260208401935060208301925050600181019050612483565b5050509392505050565b60006124cd6124c884613325565b6132d4565b9050828152602081018484840111156124e9576124e861378f565b5b6124f4848285613557565b509392505050565b600061250f61250a84613356565b6132d4565b90508281526020810184848401111561252b5761252a61378f565b5b612536848285613557565b509392505050565b60008135905061254d81613c72565b92915050565b600082601f83011261256857612567613785565b5b813561257884826020860161244a565b91505092915050565b60008135905061259081613c89565b92915050565b6000813590506125a581613ca0565b92915050565b6000813590506125ba81613cb7565b92915050565b6000815190506125cf81613cb7565b92915050565b600082601f8301126125ea576125e9613785565b5b81356125fa8482602086016124ba565b91505092915050565b600082601f83011261261857612617613785565b5b81356126288482602086016124fc565b91505092915050565b60008135905061264081613cce565b92915050565b60008151905061265581613cce565b92915050565b60008135905061266a81613ce5565b92915050565b60006020828403121561268657612685613799565b5b60006126948482850161253e565b91505092915050565b600080604083850312156126b4576126b3613799565b5b60006126c28582860161253e565b92505060206126d38582860161253e565b9150509250929050565b6000806000606084860312156126f6576126f5613799565b5b60006127048682870161253e565b93505060206127158682870161253e565b925050604061272686828701612631565b9150509250925092565b6000806000806080858703121561274a57612749613799565b5b60006127588782880161253e565b94505060206127698782880161253e565b935050604061277a87828801612631565b925050606085013567ffffffffffffffff81111561279b5761279a613794565b5b6127a7878288016125d5565b91505092959194509250565b600080604083850312156127ca576127c9613799565b5b60006127d88582860161253e565b925050602083013567ffffffffffffffff8111156127f9576127f8613794565b5b61280585828601612553565b9150509250929050565b6000806040838503121561282657612825613799565b5b60006128348582860161253e565b925050602061284585828601612581565b9150509250929050565b6000806040838503121561286657612865613799565b5b60006128748582860161253e565b925050602061288585828601612631565b9150509250929050565b6000806000606084860312156128a8576128a7613799565b5b600084013567ffffffffffffffff8111156128c6576128c5613794565b5b6128d286828701612553565b93505060206128e386828701612596565b92505060406128f486828701612596565b9150509250925092565b60006020828403121561291457612913613799565b5b600061292284828501612596565b91505092915050565b60006020828403121561294157612940613799565b5b600061294f848285016125ab565b91505092915050565b60006020828403121561296e5761296d613799565b5b600061297c848285016125c0565b91505092915050565b60006020828403121561299b5761299a613799565b5b600082013567ffffffffffffffff8111156129b9576129b8613794565b5b6129c584828501612603565b91505092915050565b6000602082840312156129e4576129e3613799565b5b60006129f284828501612631565b91505092915050565b600060208284031215612a1157612a10613799565b5b6000612a1f84828501612646565b91505092915050565b60008060408385031215612a3f57612a3e613799565b5b6000612a4d85828601612631565b925050602083013567ffffffffffffffff811115612a6e57612a6d613794565b5b612a7a85828601612553565b9150509250929050565b60008060408385031215612a9b57612a9a613799565b5b6000612aa98582860161265b565b9250506020612aba8582860161265b565b9150509250929050565b612acd81613485565b82525050565b612ae4612adf82613485565b613645565b82525050565b612af381613497565b82525050565b6000612b0482613387565b612b0e818561339d565b9350612b1e818560208601613566565b612b278161379e565b840191505092915050565b612b3b81613521565b82525050565b6000612b4c82613392565b612b5681856133ae565b9350612b66818560208601613566565b612b6f8161379e565b840191505092915050565b6000612b8582613392565b612b8f81856133bf565b9350612b9f818560208601613566565b80840191505092915050565b6000612bb86016836133ae565b9150612bc3826137bc565b602082019050919050565b6000612bdb6017836133ae565b9150612be6826137e5565b602082019050919050565b6000612bfe6032836133ae565b9150612c098261380e565b604082019050919050565b6000612c216026836133ae565b9150612c2c8261385d565b604082019050919050565b6000612c446025836133ae565b9150612c4f826138ac565b604082019050919050565b6000612c67601c836133ae565b9150612c72826138fb565b602082019050919050565b6000612c8a600e836133ae565b9150612c9582613924565b602082019050919050565b6000612cad600e836133ae565b9150612cb88261394d565b602082019050919050565b6000612cd06024836133ae565b9150612cdb82613976565b604082019050919050565b6000612cf36019836133ae565b9150612cfe826139c5565b602082019050919050565b6000612d166029836133ae565b9150612d21826139ee565b604082019050919050565b6000612d396010836133ae565b9150612d4482613a3d565b602082019050919050565b6000612d5c601a836133ae565b9150612d6782613a66565b602082019050919050565b6000612d7f603e836133ae565b9150612d8a82613a8f565b604082019050919050565b6000612da26020836133ae565b9150612dad82613ade565b602082019050919050565b6000612dc56005836133bf565b9150612dd082613b07565b600582019050919050565b6000612de86020836133ae565b9150612df382613b30565b602082019050919050565b6000612e0b6018836133ae565b9150612e1682613b59565b602082019050919050565b6000612e2e6021836133ae565b9150612e3982613b82565b604082019050919050565b6000612e51601d836133ae565b9150612e5c82613bd1565b602082019050919050565b6000612e74600e836133ae565b9150612e7f82613bfa565b602082019050919050565b6000612e97602e836133ae565b9150612ea282613c23565b604082019050919050565b612eb6816134f9565b82525050565b612ec581613503565b82525050565b612ed481613514565b82525050565b6000612ee68284612ad3565b60148201915081905092915050565b6000612f018285612b7a565b9150612f0d8284612b7a565b9150612f1882612db8565b91508190509392505050565b6000602082019050612f396000830184612ac4565b92915050565b6000608082019050612f546000830187612ac4565b612f616020830186612ac4565b612f6e6040830185612ead565b8181036060830152612f808184612af9565b905095945050505050565b6000602082019050612fa06000830184612aea565b92915050565b6000602082019050612fbb6000830184612b32565b92915050565b60006020820190508181036000830152612fdb8184612b41565b905092915050565b60006020820190508181036000830152612ffc81612bab565b9050919050565b6000602082019050818103600083015261301c81612bce565b9050919050565b6000602082019050818103600083015261303c81612bf1565b9050919050565b6000602082019050818103600083015261305c81612c14565b9050919050565b6000602082019050818103600083015261307c81612c37565b9050919050565b6000602082019050818103600083015261309c81612c5a565b9050919050565b600060208201905081810360008301526130bc81612c7d565b9050919050565b600060208201905081810360008301526130dc81612ca0565b9050919050565b600060208201905081810360008301526130fc81612cc3565b9050919050565b6000602082019050818103600083015261311c81612ce6565b9050919050565b6000602082019050818103600083015261313c81612d09565b9050919050565b6000602082019050818103600083015261315c81612d2c565b9050919050565b6000602082019050818103600083015261317c81612d4f565b9050919050565b6000602082019050818103600083015261319c81612d72565b9050919050565b600060208201905081810360008301526131bc81612d95565b9050919050565b600060208201905081810360008301526131dc81612ddb565b9050919050565b600060208201905081810360008301526131fc81612dfe565b9050919050565b6000602082019050818103600083015261321c81612e21565b9050919050565b6000602082019050818103600083015261323c81612e44565b9050919050565b6000602082019050818103600083015261325c81612e67565b9050919050565b6000602082019050818103600083015261327c81612e8a565b9050919050565b60006020820190506132986000830184612ead565b92915050565b60006020820190506132b36000830184612ebc565b92915050565b60006020820190506132ce6000830184612ecb565b92915050565b60006132de6132ef565b90506132ea82826135cb565b919050565b6000604051905090565b600067ffffffffffffffff82111561331457613313613756565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133405761333f613756565b5b6133498261379e565b9050602081019050919050565b600067ffffffffffffffff82111561337157613370613756565b5b61337a8261379e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d5826134f9565b91506133e0836134f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134155761341461369a565b5b828201905092915050565b600061342b826134f9565b9150613436836134f9565b925082613446576134456136c9565b5b828204905092915050565b600061345c826134f9565b9150613467836134f9565b92508282101561347a5761347961369a565b5b828203905092915050565b6000613490826134d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b600060ff82169050919050565b600061352c82613533565b9050919050565b600061353e82613545565b9050919050565b6000613550826134d9565b9050919050565b82818337600083830152505050565b60005b83811015613584578082015181840152602081019050613569565b83811115613593576000848401525b50505050565b600060028204905060018216806135b157607f821691505b602082108114156135c5576135c46136f8565b5b50919050565b6135d48261379e565b810181811067ffffffffffffffff821117156135f3576135f2613756565b5b80604052505050565b6000613607826134f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363a5761363961369a565b5b600182019050919050565b600061365082613657565b9050919050565b6000613662826137af565b9050919050565b6000613674826134f9565b915061367f836134f9565b92508261368f5761368e6136c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d6178204d696e74204c696d6974205265616368656400000000000000000000600082015250565b7f4d696e74696e67204e6f74205374617274656420596574000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4c696d6974206578636565646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4d494e54204e4f5420414c4c4f57454400000000000000000000000000000000600082015250565b7f5175657279696e67204e6f6e6578697374656e7420746f6b656e000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752072656163686564204d6178204d696e74696e67206c696d6974000000600082015250565b7f53616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613c7b81613485565b8114613c8657600080fd5b50565b613c9281613497565b8114613c9d57600080fd5b50565b613ca9816134a3565b8114613cb457600080fd5b50565b613cc0816134ad565b8114613ccb57600080fd5b50565b613cd7816134f9565b8114613ce257600080fd5b50565b613cee81613503565b8114613cf957600080fd5b5056fea2646970667358221220c38a6f7f65e2fcb749438d7b584319940ba8f466782595e84cff358604d6fdf964736f6c63430008070033

Deployed Bytecode Sourcemap

21476:3770:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9949:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10632:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11571:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11203:362;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12057:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22369:828;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24018:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12371:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23749:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21912:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23936:76;;;:::i;:::-;;24355:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3823:80;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21877:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10418:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21619:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10215:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2398:97;;;:::i;:::-;;2179:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10732:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21969:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21840:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24206:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11738:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25042:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12542:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21645:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24554:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21744:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24127:73;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11893:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2501:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9949:260;10051:4;10086:25;10071:40;;;:11;:40;;;;:92;;;;10130:33;10115:48;;;:11;:48;;;;10071:92;:132;;;;10167:36;10191:11;10167:23;:36::i;:::-;10071:132;10064:139;;9949:260;;;:::o;10632:94::-;10686:13;10715:5;10708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10632:94;:::o;11571:161::-;11647:7;11663:23;11678:7;11663:14;:23::i;:::-;11702:15;:24;11718:7;11702:24;;;;;;;;;;;;;;;;;;;;;11695:31;;11571:161;;;:::o;11203:362::-;11280:13;11296:23;11311:7;11296:14;:23::i;:::-;11280:39;;11340:5;11334:11;;:2;:11;;;;11326:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11416:5;11400:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;11425:37;11442:5;11449:12;:10;:12::i;:::-;11425:16;:37::i;:::-;11400:62;11392:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;11538:21;11547:2;11551:7;11538:8;:21::i;:::-;11273:292;11203:362;;:::o;12057:308::-;12230:41;12249:12;:10;:12::i;:::-;12263:7;12230:18;:41::i;:::-;12222:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;12331:28;12341:4;12347:2;12351:7;12331:9;:28::i;:::-;12057:308;;;:::o;22369:828::-;22453:10;;;;;;;;;;;22452:11;22444:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22506:1;22497:6;:10;22489:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;22556:16;:14;:16::i;:::-;22541:12;;;;;;;;;;;:31;;;22533:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22638:9;;22615:19;:9;:17;:19::i;:::-;:32;;22607:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22701:16;:14;:16::i;:::-;22685:12;;;;;;;;;;;:32;;;;:65;;;;;22734:16;:14;:16::i;:::-;22721:10;;;;;;;;;;;:29;;;22685:65;22681:511;;;22761:18;22782:30;22793:10;22805:6;22782:10;:30::i;:::-;22761:51;;22844:1;22829:12;:16;;;22821:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22913:12;22883:42;;22903:6;22883:5;:17;22889:10;22883:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;:42;;22875:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22958:13;22953:126;22985:6;22977:5;:14;22953:126;;;23006:11;:9;:11::i;:::-;23051:7;;;;;;;22953:126;;;;22752:334;22681:511;;;23129:1;23109:5;:17;23115:10;23109:17;;;;;;;;;;;;;;;;:21;23101:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23173:11;:9;:11::i;:::-;22681:511;22369:828;;:::o;24018:103::-;2146:13;:11;:13::i;:::-;24104:10:::1;24084:9;;:31;;;;;;;;;;;;;;;;;;24018:103:::0;:::o;12371:165::-;12491:39;12508:4;12514:2;12518:7;12491:39;;;;;;;;;;;;:16;:39::i;:::-;12371:165;;;:::o;23749:181::-;23866:4;23886:38;23905:5;23912:4;23918:5;23886:18;:38::i;:::-;23879:45;;23749:181;;;;;:::o;21912:24::-;;;;;;;;;;;;;:::o;23936:76::-;2146:13;:11;:13::i;:::-;23996:10:::1;;;;;;;;;;;23995:11;23982:10;;:24;;;;;;;;;;;;;;;;;;23936:76::o:0;24355:98::-;2146:13;:11;:13::i;:::-;24436:11:::1;24426:7;:21;;;;;;;;;;;;:::i;:::-;;24355:98:::0;:::o;3823:80::-;3870:4;3890:7;;;;;;;;;;;3883:14;;3823:80;:::o;21877:30::-;;;;;;;;;;;;;:::o;10418:208::-;10490:7;10506:13;10522:7;:16;10530:7;10522:16;;;;;;;;;;;;;;;;;;;;;10506:32;;10570:1;10553:19;;:5;:19;;;;10545:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10615:5;10608:12;;;10418:208;;;:::o;21619:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10215:197::-;10287:7;10328:1;10311:19;;:5;:19;;;;10303:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10390:9;:16;10400:5;10390:16;;;;;;;;;;;;;;;;10383:23;;10215:197;;;:::o;2398:97::-;2146:13;:11;:13::i;:::-;2459:30:::1;2486:1;2459:18;:30::i;:::-;2398:97::o:0;2179:81::-;2225:7;2248:6;;;;;;;;;;;2241:13;;2179:81;:::o;10732:98::-;10788:13;10817:7;10810:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10732:98;:::o;21969:33::-;;;;;;;;;:::o;21840:32::-;;;;:::o;24206:143::-;2146:13;:11;:13::i;:::-;24306:8:::1;24291:12;;:23;;;;;;;;;;;;;;;;;;24334:9;24321:10;;:22;;;;;;;;;;;;;;;;;;24206:143:::0;;:::o;11738:149::-;11829:52;11848:12;:10;:12::i;:::-;11862:8;11872;11829:18;:52::i;:::-;11738:149;;:::o;25042:201::-;25123:5;25168:1;25145:19;25158:5;25145:12;:19::i;:::-;:24;;25144:93;;25178:50;25192:6;25200:5;;25207:20;25221:5;25207:13;:20::i;:::-;25178:13;:50::i;:::-;25177:60;;25236:1;25177:60;;;25232:1;25177:60;25144:93;;;25173:1;25144:93;25137:100;;25042:201;;;;:::o;12542:295::-;12694:41;12713:12;:10;:12::i;:::-;12727:7;12694:18;:41::i;:::-;12686:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;12793:38;12807:4;12813:2;12817:7;12826:4;12793:13;:38::i;:::-;12542:295;;;;:::o;21645:39::-;;;;;;;;;;;;;:::o;24554:352::-;24653:13;24683:16;24691:7;24683;:16::i;:::-;24675:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24739:28;24770:7;24739:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24822:1;24797:14;24791:28;:32;:109;;;;;;;;;;;;;;;;;24850:14;24866:18;:7;:16;:18::i;:::-;24833:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24791:109;24784:116;;;24554:352;;;:::o;21744:37::-;;;;;;;;;;;;;:::o;24127:73::-;2146:13;:11;:13::i;:::-;24190:4:::1;24182:5;:12;;;;24127:73:::0;:::o;11893:158::-;11990:4;12010:18;:25;12029:5;12010:25;;;;;;;;;;;;;;;:35;12036:8;12010:35;;;;;;;;;;;;;;;;;;;;;;;;;12003:42;;11893:158;;;;:::o;2501:191::-;2146:13;:11;:13::i;:::-;2606:1:::1;2586:22;;:8;:22;;;;2578:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2658:28;2677:8;2658:18;:28::i;:::-;2501:191:::0;:::o;9269:151::-;9354:4;9389:25;9374:40;;;:11;:40;;;;9367:47;;9269:151;;;:::o;15652:129::-;15730:16;15738:7;15730;:16::i;:::-;15722:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;15652:129;:::o;1692:92::-;1745:7;1768:10;1761:17;;1692:92;:::o;15189:164::-;15287:2;15260:15;:24;15276:7;15260:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;15339:7;15335:2;15301:46;;15310:23;15325:7;15310:14;:23::i;:::-;15301:46;;;;;;;;;;;;15189:164;;:::o;13261:254::-;13354:4;13367:13;13383:23;13398:7;13383:14;:23::i;:::-;13367:39;;13432:5;13421:16;;:7;:16;;;:52;;;;13441:32;13458:5;13465:7;13441:16;:32::i;:::-;13421:52;:87;;;;13501:7;13477:31;;:20;13489:7;13477:11;:20::i;:::-;:31;;;13421:87;13413:96;;;13261:254;;;;:::o;14668:515::-;14809:4;14782:31;;:23;14797:7;14782:14;:23::i;:::-;:31;;;14774:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;14884:1;14870:16;;:2;:16;;;;14862:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14934:39;14955:4;14961:2;14965:7;14934:20;:39::i;:::-;14980:29;14997:1;15001:7;14980:8;:29::i;:::-;15035:1;15016:9;:15;15026:4;15016:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;15060:1;15043:9;:13;15053:2;15043:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;15087:2;15068:7;:16;15076:7;15068:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;15122:7;15118:2;15103:27;;15112:4;15103:27;;;;;;;;;;;;15139:38;15159:4;15165:2;15169:7;15139:19;:38::i;:::-;14668:515;;;:::o;23345:92::-;23393:7;23416:15;23409:22;;23345:92;:::o;2966:108::-;3031:7;3054;:14;;;3047:21;;2966:108;;;:::o;23203:136::-;23239:21;:9;:19;:21::i;:::-;23267:37;23272:10;23284:19;:9;:17;:19::i;:::-;23267:4;:37::i;:::-;23332:1;23311:5;:17;23317:10;23311:17;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;23203:136::o;2266:126::-;2337:12;:10;:12::i;:::-;2326:23;;:7;:5;:7::i;:::-;:23;;;2318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2266:126::o;16767:170::-;16878:4;16927;16898:25;16911:5;16918:4;16898:12;:25::i;:::-;:33;16891:40;;16767:170;;;;;:::o;2698:177::-;2768:16;2787:6;;;;;;;;;;;2768:25;;2809:8;2800:6;;:17;;;;;;;;;;;;;;;;;;2860:8;2829:40;;2850:8;2829:40;;;;;;;;;;;;2761:114;2698:177;:::o;15359:287::-;15496:8;15487:17;;:5;:17;;;;15479:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;15579:8;15541:18;:25;15560:5;15541:25;;;;;;;;;;;;;;;:35;15567:8;15541:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;15621:8;15599:41;;15614:5;15599:41;;;15631:8;15599:41;;;;;;:::i;:::-;;;;;;;;15359:287;;;:::o;23443:117::-;23504:7;23527:9;;;;;;;;;;;:19;;;23547:6;23527:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23520:34;;23443:117;;;:::o;24912:124::-;24973:7;25023:5;25006:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;24996:34;;;;;;24989:41;;24912:124;;;:::o;12843:285::-;12977:28;12987:4;12993:2;12997:7;12977:9;:28::i;:::-;13020:47;13043:4;13049:2;13053:7;13062:4;13020:22;:47::i;:::-;13012:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;12843:285;;;;:::o;13134:121::-;13199:4;13247:1;13219:30;;:7;:16;13227:7;13219:16;;;;;;;;;;;;;;;;;;;;;:30;;;;13212:37;;13134:121;;;:::o;336:454::-;392:13;427:1;418:5;:10;414:43;;;439:10;;;;;;;;;;;;;;;;;;;;;414:43;463:12;478:5;463:20;;490:14;511:62;526:1;518:4;:9;511:62;;538:8;;;;;:::i;:::-;;;;563:2;555:10;;;;;:::i;:::-;;;511:62;;;579:19;611:6;601:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;579:39;;625:132;641:1;632:5;:10;625:132;;663:1;653:11;;;;;:::i;:::-;;;724:2;716:5;:10;;;;:::i;:::-;703:2;:24;;;;:::i;:::-;690:39;;673:6;680;673:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;747:2;738:11;;;;;:::i;:::-;;;625:132;;;777:6;763:21;;;;;336:454;;;;:::o;16506:112::-;;;;:::o;16624:111::-;;;;:::o;3080:::-;3177:1;3159:7;:14;;;:19;;;;;;;;;;;3080:111;:::o;24459:89::-;24519:23;24529:2;24533:8;24519:9;:23::i;:::-;24459:89;;:::o;17137:272::-;17220:7;17236:20;17259:4;17236:27;;17275:9;17270:108;17294:5;:12;17290:1;:16;17270:108;;;17337:33;17347:12;17361:5;17367:1;17361:8;;;;;;;;:::i;:::-;;;;;;;;17337:9;:33::i;:::-;17322:48;;17308:3;;;;;:::i;:::-;;;;17270:108;;;;17391:12;17384:19;;;17137:272;;;;:::o;15787:713::-;15923:4;15940:15;:2;:13;;;:15::i;:::-;15936:559;;;15986:2;15970:36;;;16007:12;:10;:12::i;:::-;16021:4;16027:7;16036:4;15970:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15966:488;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16206:1;16189:6;:13;:18;16185:260;;;16222:60;;;;;;;;;;:::i;:::-;;;;;;;;16185:260;16413:6;16407:13;16398:6;16394:2;16390:15;16383:38;15966:488;16094:41;;;16084:51;;;:6;:51;;;;16077:58;;;;;15936:559;16483:4;16476:11;;15787:713;;;;;;;:::o;13521:104::-;13593:26;13603:2;13607:7;13593:26;;;;;;;;;;;;:9;:26::i;:::-;13521:104;;:::o;20149:143::-;20212:7;20239:1;20235;:5;:51;;20266:20;20281:1;20284;20266:14;:20::i;:::-;20235:51;;;20243:20;20258:1;20261;20243:14;:20::i;:::-;20235:51;20228:58;;20149:143;;;;:::o;6025:109::-;6085:4;6127:1;6105:7;:19;;;:23;6098:30;;6025:109;;;:::o;13631:258::-;13742:18;13748:2;13752:7;13742:5;:18::i;:::-;13775:53;13806:1;13810:2;13814:7;13823:4;13775:22;:53::i;:::-;13767:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;13631:258;;;:::o;20298:196::-;20366:13;20419:1;20413:4;20406:15;20442:1;20436:4;20429:15;20477:4;20471;20461:21;20452:30;;20298:196;;;;:::o;13895:409::-;13985:1;13971:16;;:2;:16;;;;13963:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;14040:16;14048:7;14040;:16::i;:::-;14039:17;14031:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14098:45;14127:1;14131:2;14135:7;14098:20;:45::i;:::-;14169:1;14152:9;:13;14162:2;14152:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;14196:2;14177:7;:16;14185:7;14177:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;14237:7;14233:2;14212:33;;14229:1;14212:33;;;;;;;;;;;;14254:44;14282:1;14286:2;14290:7;14254:19;:44::i;:::-;13895:409;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:340::-;3125:5;3174:3;3167:4;3159:6;3155:17;3151:27;3141:122;;3182:79;;:::i;:::-;3141:122;3299:6;3286:20;3324:79;3399:3;3391:6;3384:4;3376:6;3372:17;3324:79;:::i;:::-;3315:88;;3131:278;3069:340;;;;:::o;3415:139::-;3461:5;3499:6;3486:20;3477:29;;3515:33;3542:5;3515:33;:::i;:::-;3415:139;;;;:::o;3560:143::-;3617:5;3648:6;3642:13;3633:22;;3664:33;3691:5;3664:33;:::i;:::-;3560:143;;;;:::o;3709:137::-;3754:5;3792:6;3779:20;3770:29;;3808:32;3834:5;3808:32;:::i;:::-;3709:137;;;;:::o;3852:329::-;3911:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:119;;;3966:79;;:::i;:::-;3928:119;4086:1;4111:53;4156:7;4147:6;4136:9;4132:22;4111:53;:::i;:::-;4101:63;;4057:117;3852:329;;;;:::o;4187:474::-;4255:6;4263;4312:2;4300:9;4291:7;4287:23;4283:32;4280:119;;;4318:79;;:::i;:::-;4280:119;4438:1;4463:53;4508:7;4499:6;4488:9;4484:22;4463:53;:::i;:::-;4453:63;;4409:117;4565:2;4591:53;4636:7;4627:6;4616:9;4612:22;4591:53;:::i;:::-;4581:63;;4536:118;4187:474;;;;;:::o;4667:619::-;4744:6;4752;4760;4809:2;4797:9;4788:7;4784:23;4780:32;4777:119;;;4815:79;;:::i;:::-;4777:119;4935:1;4960:53;5005:7;4996:6;4985:9;4981:22;4960:53;:::i;:::-;4950:63;;4906:117;5062:2;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5033:118;5190:2;5216:53;5261:7;5252:6;5241:9;5237:22;5216:53;:::i;:::-;5206:63;;5161:118;4667:619;;;;;:::o;5292:943::-;5387:6;5395;5403;5411;5460:3;5448:9;5439:7;5435:23;5431:33;5428:120;;;5467:79;;:::i;:::-;5428:120;5587:1;5612:53;5657:7;5648:6;5637:9;5633:22;5612:53;:::i;:::-;5602:63;;5558:117;5714:2;5740:53;5785:7;5776:6;5765:9;5761:22;5740:53;:::i;:::-;5730:63;;5685:118;5842:2;5868:53;5913:7;5904:6;5893:9;5889:22;5868:53;:::i;:::-;5858:63;;5813:118;5998:2;5987:9;5983:18;5970:32;6029:18;6021:6;6018:30;6015:117;;;6051:79;;:::i;:::-;6015:117;6156:62;6210:7;6201:6;6190:9;6186:22;6156:62;:::i;:::-;6146:72;;5941:287;5292:943;;;;;;;:::o;6241:684::-;6334:6;6342;6391:2;6379:9;6370:7;6366:23;6362:32;6359:119;;;6397:79;;:::i;:::-;6359:119;6517:1;6542:53;6587:7;6578:6;6567:9;6563:22;6542:53;:::i;:::-;6532:63;;6488:117;6672:2;6661:9;6657:18;6644:32;6703:18;6695:6;6692:30;6689:117;;;6725:79;;:::i;:::-;6689:117;6830:78;6900:7;6891:6;6880:9;6876:22;6830:78;:::i;:::-;6820:88;;6615:303;6241:684;;;;;:::o;6931:468::-;6996:6;7004;7053:2;7041:9;7032:7;7028:23;7024:32;7021:119;;;7059:79;;:::i;:::-;7021:119;7179:1;7204:53;7249:7;7240:6;7229:9;7225:22;7204:53;:::i;:::-;7194:63;;7150:117;7306:2;7332:50;7374:7;7365:6;7354:9;7350:22;7332:50;:::i;:::-;7322:60;;7277:115;6931:468;;;;;:::o;7405:474::-;7473:6;7481;7530:2;7518:9;7509:7;7505:23;7501:32;7498:119;;;7536:79;;:::i;:::-;7498:119;7656:1;7681:53;7726:7;7717:6;7706:9;7702:22;7681:53;:::i;:::-;7671:63;;7627:117;7783:2;7809:53;7854:7;7845:6;7834:9;7830:22;7809:53;:::i;:::-;7799:63;;7754:118;7405:474;;;;;:::o;7885:829::-;7987:6;7995;8003;8052:2;8040:9;8031:7;8027:23;8023:32;8020:119;;;8058:79;;:::i;:::-;8020:119;8206:1;8195:9;8191:17;8178:31;8236:18;8228:6;8225:30;8222:117;;;8258:79;;:::i;:::-;8222:117;8363:78;8433:7;8424:6;8413:9;8409:22;8363:78;:::i;:::-;8353:88;;8149:302;8490:2;8516:53;8561:7;8552:6;8541:9;8537:22;8516:53;:::i;:::-;8506:63;;8461:118;8618:2;8644:53;8689:7;8680:6;8669:9;8665:22;8644:53;:::i;:::-;8634:63;;8589:118;7885:829;;;;;:::o;8720:329::-;8779:6;8828:2;8816:9;8807:7;8803:23;8799:32;8796:119;;;8834:79;;:::i;:::-;8796:119;8954:1;8979:53;9024:7;9015:6;9004:9;9000:22;8979:53;:::i;:::-;8969:63;;8925:117;8720:329;;;;:::o;9055:327::-;9113:6;9162:2;9150:9;9141:7;9137:23;9133:32;9130:119;;;9168:79;;:::i;:::-;9130:119;9288:1;9313:52;9357:7;9348:6;9337:9;9333:22;9313:52;:::i;:::-;9303:62;;9259:116;9055:327;;;;:::o;9388:349::-;9457:6;9506:2;9494:9;9485:7;9481:23;9477:32;9474:119;;;9512:79;;:::i;:::-;9474:119;9632:1;9657:63;9712:7;9703:6;9692:9;9688:22;9657:63;:::i;:::-;9647:73;;9603:127;9388:349;;;;:::o;9743:509::-;9812:6;9861:2;9849:9;9840:7;9836:23;9832:32;9829:119;;;9867:79;;:::i;:::-;9829:119;10015:1;10004:9;10000:17;9987:31;10045:18;10037:6;10034:30;10031:117;;;10067:79;;:::i;:::-;10031:117;10172:63;10227:7;10218:6;10207:9;10203:22;10172:63;:::i;:::-;10162:73;;9958:287;9743:509;;;;:::o;10258:329::-;10317:6;10366:2;10354:9;10345:7;10341:23;10337:32;10334:119;;;10372:79;;:::i;:::-;10334:119;10492:1;10517:53;10562:7;10553:6;10542:9;10538:22;10517:53;:::i;:::-;10507:63;;10463:117;10258:329;;;;:::o;10593:351::-;10663:6;10712:2;10700:9;10691:7;10687:23;10683:32;10680:119;;;10718:79;;:::i;:::-;10680:119;10838:1;10863:64;10919:7;10910:6;10899:9;10895:22;10863:64;:::i;:::-;10853:74;;10809:128;10593:351;;;;:::o;10950:684::-;11043:6;11051;11100:2;11088:9;11079:7;11075:23;11071:32;11068:119;;;11106:79;;:::i;:::-;11068:119;11226:1;11251:53;11296:7;11287:6;11276:9;11272:22;11251:53;:::i;:::-;11241:63;;11197:117;11381:2;11370:9;11366:18;11353:32;11412:18;11404:6;11401:30;11398:117;;;11434:79;;:::i;:::-;11398:117;11539:78;11609:7;11600:6;11589:9;11585:22;11539:78;:::i;:::-;11529:88;;11324:303;10950:684;;;;;:::o;11640:470::-;11706:6;11714;11763:2;11751:9;11742:7;11738:23;11734:32;11731:119;;;11769:79;;:::i;:::-;11731:119;11889:1;11914:52;11958:7;11949:6;11938:9;11934:22;11914:52;:::i;:::-;11904:62;;11860:116;12015:2;12041:52;12085:7;12076:6;12065:9;12061:22;12041:52;:::i;:::-;12031:62;;11986:117;11640:470;;;;;:::o;12116:118::-;12203:24;12221:5;12203:24;:::i;:::-;12198:3;12191:37;12116:118;;:::o;12240:157::-;12345:45;12365:24;12383:5;12365:24;:::i;:::-;12345:45;:::i;:::-;12340:3;12333:58;12240:157;;:::o;12403:109::-;12484:21;12499:5;12484:21;:::i;:::-;12479:3;12472:34;12403:109;;:::o;12518:360::-;12604:3;12632:38;12664:5;12632:38;:::i;:::-;12686:70;12749:6;12744:3;12686:70;:::i;:::-;12679:77;;12765:52;12810:6;12805:3;12798:4;12791:5;12787:16;12765:52;:::i;:::-;12842:29;12864:6;12842:29;:::i;:::-;12837:3;12833:39;12826:46;;12608:270;12518:360;;;;:::o;12884:161::-;12986:52;13032:5;12986:52;:::i;:::-;12981:3;12974:65;12884:161;;:::o;13051:364::-;13139:3;13167:39;13200:5;13167:39;:::i;:::-;13222:71;13286:6;13281:3;13222:71;:::i;:::-;13215:78;;13302:52;13347:6;13342:3;13335:4;13328:5;13324:16;13302:52;:::i;:::-;13379:29;13401:6;13379:29;:::i;:::-;13374:3;13370:39;13363:46;;13143:272;13051:364;;;;:::o;13421:377::-;13527:3;13555:39;13588:5;13555:39;:::i;:::-;13610:89;13692:6;13687:3;13610:89;:::i;:::-;13603:96;;13708:52;13753:6;13748:3;13741:4;13734:5;13730:16;13708:52;:::i;:::-;13785:6;13780:3;13776:16;13769:23;;13531:267;13421:377;;;;:::o;13804:366::-;13946:3;13967:67;14031:2;14026:3;13967:67;:::i;:::-;13960:74;;14043:93;14132:3;14043:93;:::i;:::-;14161:2;14156:3;14152:12;14145:19;;13804:366;;;:::o;14176:::-;14318:3;14339:67;14403:2;14398:3;14339:67;:::i;:::-;14332:74;;14415:93;14504:3;14415:93;:::i;:::-;14533:2;14528:3;14524:12;14517:19;;14176:366;;;:::o;14548:::-;14690:3;14711:67;14775:2;14770:3;14711:67;:::i;:::-;14704:74;;14787:93;14876:3;14787:93;:::i;:::-;14905:2;14900:3;14896:12;14889:19;;14548:366;;;:::o;14920:::-;15062:3;15083:67;15147:2;15142:3;15083:67;:::i;:::-;15076:74;;15159:93;15248:3;15159:93;:::i;:::-;15277:2;15272:3;15268:12;15261:19;;14920:366;;;:::o;15292:::-;15434:3;15455:67;15519:2;15514:3;15455:67;:::i;:::-;15448:74;;15531:93;15620:3;15531:93;:::i;:::-;15649:2;15644:3;15640:12;15633:19;;15292:366;;;:::o;15664:::-;15806:3;15827:67;15891:2;15886:3;15827:67;:::i;:::-;15820:74;;15903:93;15992:3;15903:93;:::i;:::-;16021:2;16016:3;16012:12;16005:19;;15664:366;;;:::o;16036:::-;16178:3;16199:67;16263:2;16258:3;16199:67;:::i;:::-;16192:74;;16275:93;16364:3;16275:93;:::i;:::-;16393:2;16388:3;16384:12;16377:19;;16036:366;;;:::o;16408:::-;16550:3;16571:67;16635:2;16630:3;16571:67;:::i;:::-;16564:74;;16647:93;16736:3;16647:93;:::i;:::-;16765:2;16760:3;16756:12;16749:19;;16408:366;;;:::o;16780:::-;16922:3;16943:67;17007:2;17002:3;16943:67;:::i;:::-;16936:74;;17019:93;17108:3;17019:93;:::i;:::-;17137:2;17132:3;17128:12;17121:19;;16780:366;;;:::o;17152:::-;17294:3;17315:67;17379:2;17374:3;17315:67;:::i;:::-;17308:74;;17391:93;17480:3;17391:93;:::i;:::-;17509:2;17504:3;17500:12;17493:19;;17152:366;;;:::o;17524:::-;17666:3;17687:67;17751:2;17746:3;17687:67;:::i;:::-;17680:74;;17763:93;17852:3;17763:93;:::i;:::-;17881:2;17876:3;17872:12;17865:19;;17524:366;;;:::o;17896:::-;18038:3;18059:67;18123:2;18118:3;18059:67;:::i;:::-;18052:74;;18135:93;18224:3;18135:93;:::i;:::-;18253:2;18248:3;18244:12;18237:19;;17896:366;;;:::o;18268:::-;18410:3;18431:67;18495:2;18490:3;18431:67;:::i;:::-;18424:74;;18507:93;18596:3;18507:93;:::i;:::-;18625:2;18620:3;18616:12;18609:19;;18268:366;;;:::o;18640:::-;18782:3;18803:67;18867:2;18862:3;18803:67;:::i;:::-;18796:74;;18879:93;18968:3;18879:93;:::i;:::-;18997:2;18992:3;18988:12;18981:19;;18640:366;;;:::o;19012:::-;19154:3;19175:67;19239:2;19234:3;19175:67;:::i;:::-;19168:74;;19251:93;19340:3;19251:93;:::i;:::-;19369:2;19364:3;19360:12;19353:19;;19012:366;;;:::o;19384:400::-;19544:3;19565:84;19647:1;19642:3;19565:84;:::i;:::-;19558:91;;19658:93;19747:3;19658:93;:::i;:::-;19776:1;19771:3;19767:11;19760:18;;19384:400;;;:::o;19790:366::-;19932:3;19953:67;20017:2;20012:3;19953:67;:::i;:::-;19946:74;;20029:93;20118:3;20029:93;:::i;:::-;20147:2;20142:3;20138:12;20131:19;;19790:366;;;:::o;20162:::-;20304:3;20325:67;20389:2;20384:3;20325:67;:::i;:::-;20318:74;;20401:93;20490:3;20401:93;:::i;:::-;20519:2;20514:3;20510:12;20503:19;;20162:366;;;:::o;20534:::-;20676:3;20697:67;20761:2;20756:3;20697:67;:::i;:::-;20690:74;;20773:93;20862:3;20773:93;:::i;:::-;20891:2;20886:3;20882:12;20875:19;;20534:366;;;:::o;20906:::-;21048:3;21069:67;21133:2;21128:3;21069:67;:::i;:::-;21062:74;;21145:93;21234:3;21145:93;:::i;:::-;21263:2;21258:3;21254:12;21247:19;;20906:366;;;:::o;21278:::-;21420:3;21441:67;21505:2;21500:3;21441:67;:::i;:::-;21434:74;;21517:93;21606:3;21517:93;:::i;:::-;21635:2;21630:3;21626:12;21619:19;;21278:366;;;:::o;21650:::-;21792:3;21813:67;21877:2;21872:3;21813:67;:::i;:::-;21806:74;;21889:93;21978:3;21889:93;:::i;:::-;22007:2;22002:3;21998:12;21991:19;;21650:366;;;:::o;22022:118::-;22109:24;22127:5;22109:24;:::i;:::-;22104:3;22097:37;22022:118;;:::o;22146:115::-;22231:23;22248:5;22231:23;:::i;:::-;22226:3;22219:36;22146:115;;:::o;22267:112::-;22350:22;22366:5;22350:22;:::i;:::-;22345:3;22338:35;22267:112;;:::o;22385:256::-;22497:3;22512:75;22583:3;22574:6;22512:75;:::i;:::-;22612:2;22607:3;22603:12;22596:19;;22632:3;22625:10;;22385:256;;;;:::o;22647:701::-;22928:3;22950:95;23041:3;23032:6;22950:95;:::i;:::-;22943:102;;23062:95;23153:3;23144:6;23062:95;:::i;:::-;23055:102;;23174:148;23318:3;23174:148;:::i;:::-;23167:155;;23339:3;23332:10;;22647:701;;;;;:::o;23354:222::-;23447:4;23485:2;23474:9;23470:18;23462:26;;23498:71;23566:1;23555:9;23551:17;23542:6;23498:71;:::i;:::-;23354:222;;;;:::o;23582:640::-;23777:4;23815:3;23804:9;23800:19;23792:27;;23829:71;23897:1;23886:9;23882:17;23873:6;23829:71;:::i;:::-;23910:72;23978:2;23967:9;23963:18;23954:6;23910:72;:::i;:::-;23992;24060:2;24049:9;24045:18;24036:6;23992:72;:::i;:::-;24111:9;24105:4;24101:20;24096:2;24085:9;24081:18;24074:48;24139:76;24210:4;24201:6;24139:76;:::i;:::-;24131:84;;23582:640;;;;;;;:::o;24228:210::-;24315:4;24353:2;24342:9;24338:18;24330:26;;24366:65;24428:1;24417:9;24413:17;24404:6;24366:65;:::i;:::-;24228:210;;;;:::o;24444:252::-;24552:4;24590:2;24579:9;24575:18;24567:26;;24603:86;24686:1;24675:9;24671:17;24662:6;24603:86;:::i;:::-;24444:252;;;;:::o;24702:313::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:78;25003:4;24994:6;24930:78;:::i;:::-;24922:86;;24702:313;;;;:::o;25021:419::-;25187:4;25225:2;25214:9;25210:18;25202:26;;25274:9;25268:4;25264:20;25260:1;25249:9;25245:17;25238:47;25302:131;25428:4;25302:131;:::i;:::-;25294:139;;25021:419;;;:::o;25446:::-;25612:4;25650:2;25639:9;25635:18;25627:26;;25699:9;25693:4;25689:20;25685:1;25674:9;25670:17;25663:47;25727:131;25853:4;25727:131;:::i;:::-;25719:139;;25446:419;;;:::o;25871:::-;26037:4;26075:2;26064:9;26060:18;26052:26;;26124:9;26118:4;26114:20;26110:1;26099:9;26095:17;26088:47;26152:131;26278:4;26152:131;:::i;:::-;26144:139;;25871:419;;;:::o;26296:::-;26462:4;26500:2;26489:9;26485:18;26477:26;;26549:9;26543:4;26539:20;26535:1;26524:9;26520:17;26513:47;26577:131;26703:4;26577:131;:::i;:::-;26569:139;;26296:419;;;:::o;26721:::-;26887:4;26925:2;26914:9;26910:18;26902:26;;26974:9;26968:4;26964:20;26960:1;26949:9;26945:17;26938:47;27002:131;27128:4;27002:131;:::i;:::-;26994:139;;26721:419;;;:::o;27146:::-;27312:4;27350:2;27339:9;27335:18;27327:26;;27399:9;27393:4;27389:20;27385:1;27374:9;27370:17;27363:47;27427:131;27553:4;27427:131;:::i;:::-;27419:139;;27146:419;;;:::o;27571:::-;27737:4;27775:2;27764:9;27760:18;27752:26;;27824:9;27818:4;27814:20;27810:1;27799:9;27795:17;27788:47;27852:131;27978:4;27852:131;:::i;:::-;27844:139;;27571:419;;;:::o;27996:::-;28162:4;28200:2;28189:9;28185:18;28177:26;;28249:9;28243:4;28239:20;28235:1;28224:9;28220:17;28213:47;28277:131;28403:4;28277:131;:::i;:::-;28269:139;;27996:419;;;:::o;28421:::-;28587:4;28625:2;28614:9;28610:18;28602:26;;28674:9;28668:4;28664:20;28660:1;28649:9;28645:17;28638:47;28702:131;28828:4;28702:131;:::i;:::-;28694:139;;28421:419;;;:::o;28846:::-;29012:4;29050:2;29039:9;29035:18;29027:26;;29099:9;29093:4;29089:20;29085:1;29074:9;29070:17;29063:47;29127:131;29253:4;29127:131;:::i;:::-;29119:139;;28846:419;;;:::o;29271:::-;29437:4;29475:2;29464:9;29460:18;29452:26;;29524:9;29518:4;29514:20;29510:1;29499:9;29495:17;29488:47;29552:131;29678:4;29552:131;:::i;:::-;29544:139;;29271:419;;;:::o;29696:::-;29862:4;29900:2;29889:9;29885:18;29877:26;;29949:9;29943:4;29939:20;29935:1;29924:9;29920:17;29913:47;29977:131;30103:4;29977:131;:::i;:::-;29969:139;;29696:419;;;:::o;30121:::-;30287:4;30325:2;30314:9;30310:18;30302:26;;30374:9;30368:4;30364:20;30360:1;30349:9;30345:17;30338:47;30402:131;30528:4;30402:131;:::i;:::-;30394:139;;30121:419;;;:::o;30546:::-;30712:4;30750:2;30739:9;30735:18;30727:26;;30799:9;30793:4;30789:20;30785:1;30774:9;30770:17;30763:47;30827:131;30953:4;30827:131;:::i;:::-;30819:139;;30546:419;;;:::o;30971:::-;31137:4;31175:2;31164:9;31160:18;31152:26;;31224:9;31218:4;31214:20;31210:1;31199:9;31195:17;31188:47;31252:131;31378:4;31252:131;:::i;:::-;31244:139;;30971:419;;;:::o;31396:::-;31562:4;31600:2;31589:9;31585:18;31577:26;;31649:9;31643:4;31639:20;31635:1;31624:9;31620:17;31613:47;31677:131;31803:4;31677:131;:::i;:::-;31669:139;;31396:419;;;:::o;31821:::-;31987:4;32025:2;32014:9;32010:18;32002:26;;32074:9;32068:4;32064:20;32060:1;32049:9;32045:17;32038:47;32102:131;32228:4;32102:131;:::i;:::-;32094:139;;31821:419;;;:::o;32246:::-;32412:4;32450:2;32439:9;32435:18;32427:26;;32499:9;32493:4;32489:20;32485:1;32474:9;32470:17;32463:47;32527:131;32653:4;32527:131;:::i;:::-;32519:139;;32246:419;;;:::o;32671:::-;32837:4;32875:2;32864:9;32860:18;32852:26;;32924:9;32918:4;32914:20;32910:1;32899:9;32895:17;32888:47;32952:131;33078:4;32952:131;:::i;:::-;32944:139;;32671:419;;;:::o;33096:::-;33262:4;33300:2;33289:9;33285:18;33277:26;;33349:9;33343:4;33339:20;33335:1;33324:9;33320:17;33313:47;33377:131;33503:4;33377:131;:::i;:::-;33369:139;;33096:419;;;:::o;33521:::-;33687:4;33725:2;33714:9;33710:18;33702:26;;33774:9;33768:4;33764:20;33760:1;33749:9;33745:17;33738:47;33802:131;33928:4;33802:131;:::i;:::-;33794:139;;33521:419;;;:::o;33946:222::-;34039:4;34077:2;34066:9;34062:18;34054:26;;34090:71;34158:1;34147:9;34143:17;34134:6;34090:71;:::i;:::-;33946:222;;;;:::o;34174:218::-;34265:4;34303:2;34292:9;34288:18;34280:26;;34316:69;34382:1;34371:9;34367:17;34358:6;34316:69;:::i;:::-;34174:218;;;;:::o;34398:214::-;34487:4;34525:2;34514:9;34510:18;34502:26;;34538:67;34602:1;34591:9;34587:17;34578:6;34538:67;:::i;:::-;34398:214;;;;:::o;34618:129::-;34652:6;34679:20;;:::i;:::-;34669:30;;34708:33;34736:4;34728:6;34708:33;:::i;:::-;34618:129;;;:::o;34753:75::-;34786:6;34819:2;34813:9;34803:19;;34753:75;:::o;34834:311::-;34911:4;35001:18;34993:6;34990:30;34987:56;;;35023:18;;:::i;:::-;34987:56;35073:4;35065:6;35061:17;35053:25;;35133:4;35127;35123:15;35115:23;;34834:311;;;:::o;35151:307::-;35212:4;35302:18;35294:6;35291:30;35288:56;;;35324:18;;:::i;:::-;35288:56;35362:29;35384:6;35362:29;:::i;:::-;35354:37;;35446:4;35440;35436:15;35428:23;;35151:307;;;:::o;35464:308::-;35526:4;35616:18;35608:6;35605:30;35602:56;;;35638:18;;:::i;:::-;35602:56;35676:29;35698:6;35676:29;:::i;:::-;35668:37;;35760:4;35754;35750:15;35742:23;;35464:308;;;:::o;35778:98::-;35829:6;35863:5;35857:12;35847:22;;35778:98;;;:::o;35882:99::-;35934:6;35968:5;35962:12;35952:22;;35882:99;;;:::o;35987:168::-;36070:11;36104:6;36099:3;36092:19;36144:4;36139:3;36135:14;36120:29;;35987:168;;;;:::o;36161:169::-;36245:11;36279:6;36274:3;36267:19;36319:4;36314:3;36310:14;36295:29;;36161:169;;;;:::o;36336:148::-;36438:11;36475:3;36460:18;;36336:148;;;;:::o;36490:305::-;36530:3;36549:20;36567:1;36549:20;:::i;:::-;36544:25;;36583:20;36601:1;36583:20;:::i;:::-;36578:25;;36737:1;36669:66;36665:74;36662:1;36659:81;36656:107;;;36743:18;;:::i;:::-;36656:107;36787:1;36784;36780:9;36773:16;;36490:305;;;;:::o;36801:185::-;36841:1;36858:20;36876:1;36858:20;:::i;:::-;36853:25;;36892:20;36910:1;36892:20;:::i;:::-;36887:25;;36931:1;36921:35;;36936:18;;:::i;:::-;36921:35;36978:1;36975;36971:9;36966:14;;36801:185;;;;:::o;36992:191::-;37032:4;37052:20;37070:1;37052:20;:::i;:::-;37047:25;;37086:20;37104:1;37086:20;:::i;:::-;37081:25;;37125:1;37122;37119:8;37116:34;;;37130:18;;:::i;:::-;37116:34;37175:1;37172;37168:9;37160:17;;36992:191;;;;:::o;37189:96::-;37226:7;37255:24;37273:5;37255:24;:::i;:::-;37244:35;;37189:96;;;:::o;37291:90::-;37325:7;37368:5;37361:13;37354:21;37343:32;;37291:90;;;:::o;37387:77::-;37424:7;37453:5;37442:16;;37387:77;;;:::o;37470:149::-;37506:7;37546:66;37539:5;37535:78;37524:89;;37470:149;;;:::o;37625:126::-;37662:7;37702:42;37695:5;37691:54;37680:65;;37625:126;;;:::o;37757:77::-;37794:7;37823:5;37812:16;;37757:77;;;:::o;37840:95::-;37876:7;37916:12;37909:5;37905:24;37894:35;;37840:95;;;:::o;37941:86::-;37976:7;38016:4;38009:5;38005:16;37994:27;;37941:86;;;:::o;38033:141::-;38098:9;38131:37;38162:5;38131:37;:::i;:::-;38118:50;;38033:141;;;:::o;38180:126::-;38230:9;38263:37;38294:5;38263:37;:::i;:::-;38250:50;;38180:126;;;:::o;38312:113::-;38362:9;38395:24;38413:5;38395:24;:::i;:::-;38382:37;;38312:113;;;:::o;38431:154::-;38515:6;38510:3;38505;38492:30;38577:1;38568:6;38563:3;38559:16;38552:27;38431:154;;;:::o;38591:307::-;38659:1;38669:113;38683:6;38680:1;38677:13;38669:113;;;38768:1;38763:3;38759:11;38753:18;38749:1;38744:3;38740:11;38733:39;38705:2;38702:1;38698:10;38693:15;;38669:113;;;38800:6;38797:1;38794:13;38791:101;;;38880:1;38871:6;38866:3;38862:16;38855:27;38791:101;38640:258;38591:307;;;:::o;38904:320::-;38948:6;38985:1;38979:4;38975:12;38965:22;;39032:1;39026:4;39022:12;39053:18;39043:81;;39109:4;39101:6;39097:17;39087:27;;39043:81;39171:2;39163:6;39160:14;39140:18;39137:38;39134:84;;;39190:18;;:::i;:::-;39134:84;38955:269;38904:320;;;:::o;39230:281::-;39313:27;39335:4;39313:27;:::i;:::-;39305:6;39301:40;39443:6;39431:10;39428:22;39407:18;39395:10;39392:34;39389:62;39386:88;;;39454:18;;:::i;:::-;39386:88;39494:10;39490:2;39483:22;39273:238;39230:281;;:::o;39517:233::-;39556:3;39579:24;39597:5;39579:24;:::i;:::-;39570:33;;39625:66;39618:5;39615:77;39612:103;;;39695:18;;:::i;:::-;39612:103;39742:1;39735:5;39731:13;39724:20;;39517:233;;;:::o;39756:100::-;39795:7;39824:26;39844:5;39824:26;:::i;:::-;39813:37;;39756:100;;;:::o;39862:94::-;39901:7;39930:20;39944:5;39930:20;:::i;:::-;39919:31;;39862:94;;;:::o;39962:176::-;39994:1;40011:20;40029:1;40011:20;:::i;:::-;40006:25;;40045:20;40063:1;40045:20;:::i;:::-;40040:25;;40084:1;40074:35;;40089:18;;:::i;:::-;40074:35;40130:1;40127;40123:9;40118:14;;39962:176;;;;:::o;40144:180::-;40192:77;40189:1;40182:88;40289:4;40286:1;40279:15;40313:4;40310:1;40303:15;40330:180;40378:77;40375:1;40368:88;40475:4;40472:1;40465:15;40499:4;40496:1;40489:15;40516:180;40564:77;40561:1;40554:88;40661:4;40658:1;40651:15;40685:4;40682:1;40675:15;40702:180;40750:77;40747:1;40740:88;40847:4;40844:1;40837:15;40871:4;40868:1;40861:15;40888:180;40936:77;40933:1;40926:88;41033:4;41030:1;41023:15;41057:4;41054:1;41047:15;41074:117;41183:1;41180;41173:12;41197:117;41306:1;41303;41296:12;41320:117;41429:1;41426;41419:12;41443:117;41552:1;41549;41542:12;41566:117;41675:1;41672;41665:12;41689:102;41730:6;41781:2;41777:7;41772:2;41765:5;41761:14;41757:28;41747:38;;41689:102;;;:::o;41797:94::-;41830:8;41878:5;41874:2;41870:14;41849:35;;41797:94;;;:::o;41897:172::-;42037:24;42033:1;42025:6;42021:14;42014:48;41897:172;:::o;42075:173::-;42215:25;42211:1;42203:6;42199:14;42192:49;42075:173;:::o;42254:237::-;42394:34;42390:1;42382:6;42378:14;42371:58;42463:20;42458:2;42450:6;42446:15;42439:45;42254:237;:::o;42497:225::-;42637:34;42633:1;42625:6;42621:14;42614:58;42706:8;42701:2;42693:6;42689:15;42682:33;42497:225;:::o;42728:224::-;42868:34;42864:1;42856:6;42852:14;42845:58;42937:7;42932:2;42924:6;42920:15;42913:32;42728:224;:::o;42958:178::-;43098:30;43094:1;43086:6;43082:14;43075:54;42958:178;:::o;43142:164::-;43282:16;43278:1;43270:6;43266:14;43259:40;43142:164;:::o;43312:::-;43452:16;43448:1;43440:6;43436:14;43429:40;43312:164;:::o;43482:223::-;43622:34;43618:1;43610:6;43606:14;43599:58;43691:6;43686:2;43678:6;43674:15;43667:31;43482:223;:::o;43711:175::-;43851:27;43847:1;43839:6;43835:14;43828:51;43711:175;:::o;43892:228::-;44032:34;44028:1;44020:6;44016:14;44009:58;44101:11;44096:2;44088:6;44084:15;44077:36;43892:228;:::o;44126:166::-;44266:18;44262:1;44254:6;44250:14;44243:42;44126:166;:::o;44298:176::-;44438:28;44434:1;44426:6;44422:14;44415:52;44298:176;:::o;44480:249::-;44620:34;44616:1;44608:6;44604:14;44597:58;44689:32;44684:2;44676:6;44672:15;44665:57;44480:249;:::o;44735:182::-;44875:34;44871:1;44863:6;44859:14;44852:58;44735:182;:::o;44923:155::-;45063:7;45059:1;45051:6;45047:14;45040:31;44923:155;:::o;45084:182::-;45224:34;45220:1;45212:6;45208:14;45201:58;45084:182;:::o;45272:174::-;45412:26;45408:1;45400:6;45396:14;45389:50;45272:174;:::o;45452:220::-;45592:34;45588:1;45580:6;45576:14;45569:58;45661:3;45656:2;45648:6;45644:15;45637:28;45452:220;:::o;45678:179::-;45818:31;45814:1;45806:6;45802:14;45795:55;45678:179;:::o;45863:164::-;46003:16;45999:1;45991:6;45987:14;45980:40;45863:164;:::o;46033:233::-;46173:34;46169:1;46161:6;46157:14;46150:58;46242:16;46237:2;46229:6;46225:15;46218:41;46033:233;:::o;46272:122::-;46345:24;46363:5;46345:24;:::i;:::-;46338:5;46335:35;46325:63;;46384:1;46381;46374:12;46325:63;46272:122;:::o;46400:116::-;46470:21;46485:5;46470:21;:::i;:::-;46463:5;46460:32;46450:60;;46506:1;46503;46496:12;46450:60;46400:116;:::o;46522:122::-;46595:24;46613:5;46595:24;:::i;:::-;46588:5;46585:35;46575:63;;46634:1;46631;46624:12;46575:63;46522:122;:::o;46650:120::-;46722:23;46739:5;46722:23;:::i;:::-;46715:5;46712:34;46702:62;;46760:1;46757;46750:12;46702:62;46650:120;:::o;46776:122::-;46849:24;46867:5;46849:24;:::i;:::-;46842:5;46839:35;46829:63;;46888:1;46885;46878:12;46829:63;46776:122;:::o;46904:120::-;46976:23;46993:5;46976:23;:::i;:::-;46969:5;46966:34;46956:62;;47014:1;47011;47004:12;46956:62;46904:120;:::o

Swarm Source

ipfs://c38a6f7f65e2fcb749438d7b584319940ba8f466782595e84cff358604d6fdf9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.