ETH Price: $3,480.96 (+0.93%)

Token

Mondai Anome Girls Club (MAGC)
 

Overview

Max Total Supply

50 MAGC

Holders

36

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MAGC
0xd8b8f4a5878639277970b52d849cc81a9f828d15
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MondaiAnimeGirlsClub

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-06-03
*/

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

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(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++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

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

abstract contract ReentrancyGuard { 
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    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);
    }
}
 
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());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        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 Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
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
    ) external; 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function approve(address to, uint256 tokenId) external;
 
    function getApproved(uint256 tokenId) external view returns (address operator); 
    function setApprovalForAll(address operator, bool _approved) external; 
    function isApprovedForAll(address owner, address operator) external view returns (bool); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
} 
interface IERC721Enumerable is IERC721 { 
    function totalSupply() external view returns (uint256); 
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); 
    function tokenByIndex(uint256 index) external view returns (uint256);
}  
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);
} 
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize; 
  string private _name; 
  string private _symbol; 
  mapping(uint256 => TokenOwnership) private _ownerships; 
  mapping(address => AddressData) private _addressData; 
  mapping(uint256 => address) private _tokenApprovals; 
  mapping(address => mapping(address => bool)) private _operatorApprovals; 
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  } 
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  } 
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  } 
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  } 
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  } 
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  } 
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  } 
  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)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),_getUriExtension()))
        : "";
  } 
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  function _getUriExtension() internal view virtual returns (string memory) {
    return "";
  }
 
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

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

    _approve(to, tokenId, owner);
  } 
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  } 
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_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 override {
    _transfer(from, to, tokenId);
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  } 
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  } 
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address"); 
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  } 
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1); 
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); 
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  } 
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0; 
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    } 
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  } 
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  } 
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {} 
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
// --------------------------------------------------//

contract MondaiAnimeGirlsClub is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;

     bytes32 public merkleRoot = 0x6dda27bb24289cd482fe990e245166cbe0ee289047013366bf025558e08fc9ce;
  function setMerkleRoot(bytes32 m) public onlyOwner{
    merkleRoot = m;
  }


  uint256 public MAX_PER_Transtion = 2; // maximam amount that user can mint
  uint256 public MAX_PER_Address = 2; // maximam amount that user can mint

  uint256 public  PRICE = 0.004 ether;

  uint256 private constant TotalCollectionSize_ = 50; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 50; //max mint per traction

  bool public _revelNFT = true;
  string private _baseTokenURI;
  string private _uriBeforeRevel;
  uint private stopat = 50;
  uint private reserve = 10;

  uint public status = 0; //0-pause 1-whitelist 2-public

  mapping(address => bool) private whitelistedAddresses;

  constructor() ERC721A("Mondai Anome Girls Club","MAGC", MaxMintPerBatch_, TotalCollectionSize_) {
    _baseTokenURI = "ipfs://QmXQUxSXtpAuW2kF8P2P8iw9Fgs93X2EuJQNN5rD5kJDrP/";
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
 
  function mint(uint256 quantity) external payable callerIsUser {
    require(status == 2 , "Sale is not Active");
    require(totalSupply() + quantity <= collectionSize - reserve, "reached max supply");
    require( (numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");
    _safeMint(msg.sender, quantity);   
    if(totalSupply() >= stopat) {status = 0;}
  }

    function whitelistMint(uint256 quantity, bytes32[] calldata merkleproof) external payable callerIsUser {
    bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
    require(MerkleProof.verify( merkleproof, merkleRoot, leaf),"Not whitelisted");
    require(status == 1, "Whitelisting not started");
    require(totalSupply() + quantity <= TotalCollectionSize_ - reserve, "reached max supply");
    require( ( numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");
    _safeMint(msg.sender, quantity);
    if(totalSupply() >= stopat) {status = 0;} 
  }




   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
    if(_revelNFT){
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),".json"))
        : "";
    } else{
      return _uriBeforeRevel;
    }
  }
   function conf(uint256 Status , uint256 MaxPerAddress , uint256 MaxPerWallet , uint256 Price, uint256 Stop_At )external onlyOwner{
      status = Status;
      stopat = Stop_At;
      PRICE = Price;
      MAX_PER_Address = MaxPerAddress;
      MAX_PER_Transtion = MaxPerWallet;
  }

  function setURIbeforeRevel(string memory URI) external onlyOwner {
    _uriBeforeRevel = URI;
  }

  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }
  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }
  function changeRevelStatus() external onlyOwner {
    _revelNFT = !_revelNFT;
  }
  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }
  function changeMAX_PER_Transtion(uint256 MAXPERTranstion) external onlyOwner
  {
      MAX_PER_Transtion = MAXPERTranstion;
  }
  function changeMAX_PER_Address(uint256 MAXPERAddress) external onlyOwner
  {
      MAX_PER_Address = MAXPERAddress;
  }
  function setStatus(uint256 status_)external onlyOwner{
      status = status_;
  }
  function getStatus()public view returns(uint){
      return status;
  }
  function getPrice()public view returns(uint){
      return PRICE;
  }
  function giveaway(address address_, uint quantity_)public onlyOwner{
    require(totalSupply() + quantity_ <= collectionSize - reserve, "reached max supply");
    _safeMint(address_, quantity_);
  }
    function setStop(uint256 stopat_)external onlyOwner{
      stopat = stopat_;
  }
  function setReserve(uint256 reserve_)external onlyOwner{
      reserve = reserve_;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Transtion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revelNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"MAXPERAddress","type":"uint256"}],"name":"changeMAX_PER_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MAXPERTranstion","type":"uint256"}],"name":"changeMAX_PER_Transtion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevelStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Status","type":"uint256"},{"internalType":"uint256","name":"MaxPerAddress","type":"uint256"},{"internalType":"uint256","name":"MaxPerWallet","type":"uint256"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Stop_At","type":"uint256"}],"name":"conf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"quantity_","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"m","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserve_","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"status_","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stopat_","type":"uint256"}],"name":"setStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setURIbeforeRevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001805560006008557f6dda27bb24289cd482fe990e245166cbe0ee289047013366bf025558e08fc9ce60001b600a556002600b556002600c55660e35fa931a0000600d556001600e60006101000a81548160ff0219169083151502179055506032601155600a60125560006013553480156200008057600080fd5b506040518060400160405280601781526020017f4d6f6e64616920416e6f6d65204769726c7320436c75620000000000000000008152506040518060400160405280600481526020017f4d4147430000000000000000000000000000000000000000000000000000000081525060328062000110620001046200022260201b60201c565b6200022a60201b60201c565b6000811162000156576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014d906200040e565b60405180910390fd5b600082116200019c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019390620003ec565b60405180910390fd5b8360029080519060200190620001b4929190620002ee565b508260039080519060200190620001cd929190620002ee565b508160a08181525050806080818152505050505050600160098190555060405180606001604052806036815260200162005e3760369139600f90805190602001906200021b929190620002ee565b5062000544565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002fc9062000441565b90600052602060002090601f0160209004810192826200032057600085556200036c565b82601f106200033b57805160ff19168380011785556200036c565b828001600101855582156200036c579182015b828111156200036b5782518255916020019190600101906200034e565b5b5090506200037b91906200037f565b5090565b5b808211156200039a57600081600090555060010162000380565b5090565b6000620003ad60278362000430565b9150620003ba82620004a6565b604082019050919050565b6000620003d4602e8362000430565b9150620003e182620004f5565b604082019050919050565b6000602082019050818103600083015262000407816200039e565b9050919050565b600060208201905081810360008301526200042981620003c5565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200045a57607f821691505b6020821081141562000471576200047062000477565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516158b86200057f60003960008181612cec01528181612d1501526134ab015260008181610c8f015261191001526158b86000f3fe6080604052600436106102725760003560e01c806369ba1a751161014f578063ac446002116100c1578063d04950a11161007a578063d04950a114610929578063d2cab05614610954578063d7224ba014610970578063dc33e6811461099b578063e985e9c5146109d8578063f2fde38b14610a1557610272565b8063ac44600214610843578063af7b26e91461085a578063b88d4fde14610883578063bd0a8439146108ac578063c1f127e2146108c3578063c87b56dd146108ec57610272565b80638da5cb5b116101135780638da5cb5b146107405780639231ab2a1461076b57806395d89b41146107a857806398d5fdca146107d3578063a0712d68146107fe578063a22cb4651461081a57610272565b806369ba1a751461066f57806370a0823114610698578063715018a6146106d55780637cb64759146106ec5780638d859f3e1461071557610272565b80632f2ffc57116101e85780634e69d560116101ac5780634e69d5601461054d5780634f6ccce71461057857806355f804b3146105b55780635c37809d146105de57806362c6f7b9146106075780636352211e1461063257610272565b80632f2ffc571461046a5780632f745c59146104955780633fd17366146104d25780634256dbe3146104fb57806342842e0e1461052457610272565b8063081812fc1161023a578063081812fc1461035a578063095ea7b31461039757806318160ddd146103c0578063200d2ed2146103eb57806323b872dd146104165780632eb4a7ab1461043f57610272565b80630199e3471461027757806301ffc9a7146102a0578063050225ea146102dd57806305060ed91461030657806306fdde031461032f575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613e98565b610a3e565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613df5565b610ac4565b6040516102d4919061462c565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190613d88565b610c0e565b005b34801561031257600080fd5b5061032d60048036038101906103289190613f25565b610d1a565b005b34801561033b57600080fd5b50610344610dc0565b6040516103519190614662565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613e98565b610e52565b60405161038e91906145c5565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613d88565b610ed7565b005b3480156103cc57600080fd5b506103d5610ff0565b6040516103e29190614a7f565b60405180910390f35b3480156103f757600080fd5b50610400610ffa565b60405161040d9190614a7f565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613c72565b611000565b005b34801561044b57600080fd5b50610454611010565b6040516104619190614647565b60405180910390f35b34801561047657600080fd5b5061047f611016565b60405161048c9190614a7f565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613d88565b61101c565b6040516104c99190614a7f565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f49190613e98565b61121a565b005b34801561050757600080fd5b50610522600480360381019061051d9190613e98565b6112a0565b005b34801561053057600080fd5b5061054b60048036038101906105469190613c72565b611326565b005b34801561055957600080fd5b50610562611346565b60405161056f9190614a7f565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613e98565b611350565b6040516105ac9190614a7f565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190613e4f565b6113a3565b005b3480156105ea57600080fd5b5061060560048036038101906106009190613e4f565b611439565b005b34801561061357600080fd5b5061061c6114cf565b604051610629919061462c565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613e98565b6114e2565b60405161066691906145c5565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613e98565b6114f8565b005b3480156106a457600080fd5b506106bf60048036038101906106ba9190613c05565b61157e565b6040516106cc9190614a7f565b60405180910390f35b3480156106e157600080fd5b506106ea611667565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613dc8565b6116ef565b005b34801561072157600080fd5b5061072a611775565b6040516107379190614a7f565b60405180910390f35b34801561074c57600080fd5b5061075561177b565b60405161076291906145c5565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613e98565b6117a4565b60405161079f9190614a64565b60405180910390f35b3480156107b457600080fd5b506107bd6117bc565b6040516107ca9190614662565b60405180910390f35b3480156107df57600080fd5b506107e861184e565b6040516107f59190614a7f565b60405180910390f35b61081860048036038101906108139190613e98565b611858565b005b34801561082657600080fd5b50610841600480360381019061083c9190613d48565b611aa0565b005b34801561084f57600080fd5b50610858611c21565b005b34801561086657600080fd5b50610881600480360381019061087c9190613e98565b611da2565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190613cc5565b611e28565b005b3480156108b857600080fd5b506108c1611e84565b005b3480156108cf57600080fd5b506108ea60048036038101906108e59190613e98565b611f2c565b005b3480156108f857600080fd5b50610913600480360381019061090e9190613e98565b611fb2565b6040516109209190614662565b60405180910390f35b34801561093557600080fd5b5061093e612101565b60405161094b9190614a7f565b60405180910390f35b61096e60048036038101906109699190613ec5565b612107565b005b34801561097c57600080fd5b506109856123eb565b6040516109929190614a7f565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613c05565b6123f1565b6040516109cf9190614a7f565b60405180910390f35b3480156109e457600080fd5b506109ff60048036038101906109fa9190613c32565b612403565b604051610a0c919061462c565b60405180910390f35b348015610a2157600080fd5b50610a3c6004803603810190610a379190613c05565b612497565b005b610a4661258f565b73ffffffffffffffffffffffffffffffffffffffff16610a6461177b565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190614864565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c075750610c0682612597565b5b9050919050565b610c1661258f565b73ffffffffffffffffffffffffffffffffffffffff16610c3461177b565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614864565b60405180910390fd5b6012547f0000000000000000000000000000000000000000000000000000000000000000610cb89190614cca565b81610cc1610ff0565b610ccb9190614bb5565b1115610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614824565b60405180910390fd5b610d168282612601565b5050565b610d2261258f565b73ffffffffffffffffffffffffffffffffffffffff16610d4061177b565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90614864565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b606060028054610dcf90614e18565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfb90614e18565b8015610e485780601f10610e1d57610100808354040283529160200191610e48565b820191906000526020600020905b815481529060010190602001808311610e2b57829003601f168201915b5050505050905090565b6000610e5d8261261f565b610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390614a24565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ee2826114e2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906148e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7261258f565b73ffffffffffffffffffffffffffffffffffffffff161480610fa15750610fa081610f9b61258f565b612403565b5b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906147c4565b60405180910390fd5b610feb83838361262d565b505050565b6000600154905090565b60135481565b61100b8383836126df565b505050565b600a5481565b600c5481565b60006110278361157e565b8210611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90614684565b60405180910390fd5b6000611072610ff0565b905060008060005b838110156111d8576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461116c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111c457868414156111b5578195505050505050611214565b83806111c090614e7b565b9450505b5080806111d090614e7b565b91505061107a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b906149c4565b60405180910390fd5b92915050565b61122261258f565b73ffffffffffffffffffffffffffffffffffffffff1661124061177b565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614864565b60405180910390fd5b80600d8190555050565b6112a861258f565b73ffffffffffffffffffffffffffffffffffffffff166112c661177b565b73ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614864565b60405180910390fd5b8060128190555050565b61134183838360405180602001604052806000815250611e28565b505050565b6000601354905090565b600061135a610ff0565b821061139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290614704565b60405180910390fd5b819050919050565b6113ab61258f565b73ffffffffffffffffffffffffffffffffffffffff166113c961177b565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690614864565b60405180910390fd5b80600f9080519060200190611435929190613974565b5050565b61144161258f565b73ffffffffffffffffffffffffffffffffffffffff1661145f61177b565b73ffffffffffffffffffffffffffffffffffffffff16146114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90614864565b60405180910390fd5b80601090805190602001906114cb929190613974565b5050565b600e60009054906101000a900460ff1681565b60006114ed82612c98565b600001519050919050565b61150061258f565b73ffffffffffffffffffffffffffffffffffffffff1661151e61177b565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90614864565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614804565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61166f61258f565b73ffffffffffffffffffffffffffffffffffffffff1661168d61177b565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90614864565b60405180910390fd5b6116ed6000612e9b565b565b6116f761258f565b73ffffffffffffffffffffffffffffffffffffffff1661171561177b565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614864565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ac6139fa565b6117b582612c98565b9050919050565b6060600380546117cb90614e18565b80601f01602080910402602001604051908101604052809291908181526020018280546117f790614e18565b80156118445780601f1061181957610100808354040283529160200191611844565b820191906000526020600020905b81548152906001019060200180831161182757829003601f168201915b5050505050905090565b6000600d54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90614784565b60405180910390fd5b60026013541461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290614764565b60405180910390fd5b6012547f00000000000000000000000000000000000000000000000000000000000000006119399190614cca565b81611942610ff0565b61194c9190614bb5565b111561198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490614824565b60405180910390fd5b600c548161199a336123f1565b6119a49190614bb5565b11156119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc906147e4565b60405180910390fd5b600b54811115611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906149a4565b60405180910390fd5b80600d54611a389190614c3c565b341015611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614944565b60405180910390fd5b611a843382612601565b601154611a8f610ff0565b10611a9d5760006013819055505b50565b611aa861258f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d906148a4565b60405180910390fd5b8060076000611b2361258f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd061258f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c15919061462c565b60405180910390a35050565b611c2961258f565b73ffffffffffffffffffffffffffffffffffffffff16611c4761177b565b73ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490614864565b60405180910390fd5b60026009541415611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda906149e4565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d11906145b0565b60006040518083038185875af1925050503d8060008114611d4e576040519150601f19603f3d011682016040523d82523d6000602084013e611d53565b606091505b5050905080611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90614904565b60405180910390fd5b506001600981905550565b611daa61258f565b73ffffffffffffffffffffffffffffffffffffffff16611dc861177b565b73ffffffffffffffffffffffffffffffffffffffff1614611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590614864565b60405180910390fd5b80600b8190555050565b611e338484846126df565b611e3f84848484612f5f565b611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590614924565b60405180910390fd5b50505050565b611e8c61258f565b73ffffffffffffffffffffffffffffffffffffffff16611eaa61177b565b73ffffffffffffffffffffffffffffffffffffffff1614611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790614864565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b611f3461258f565b73ffffffffffffffffffffffffffffffffffffffff16611f5261177b565b73ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90614864565b60405180910390fd5b8060118190555050565b6060611fbd8261261f565b611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff390614884565b60405180910390fd5b600e60009054906101000a900460ff161561206e57600061201b6130f6565b9050600081511161203b5760405180602001604052806000815250612066565b8061204584613188565b604051602001612056929190614581565b6040516020818303038152906040525b9150506120fc565b6010805461207b90614e18565b80601f01602080910402602001604051908101604052809291908181526020018280546120a790614e18565b80156120f45780601f106120c9576101008083540402835291602001916120f4565b820191906000526020600020905b8154815290600101906020018083116120d757829003601f168201915b505050505090505b919050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90614784565b60405180910390fd5b6000336040516020016121889190614566565b6040516020818303038152906040528051906020012090506121ee838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a54836132e9565b61222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906147a4565b60405180910390fd5b600160135414612272576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612269906146c4565b60405180910390fd5b60125460326122819190614cca565b8461228a610ff0565b6122949190614bb5565b11156122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614824565b60405180910390fd5b600c54846122e2336123f1565b6122ec9190614bb5565b111561232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906147e4565b60405180910390fd5b600b54841115612372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612369906149a4565b60405180910390fd5b83600d546123809190614c3c565b3410156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614944565b60405180910390fd5b6123cc3385612601565b6011546123d7610ff0565b106123e55760006013819055505b50505050565b60085481565b60006123fc82613300565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249f61258f565b73ffffffffffffffffffffffffffffffffffffffff166124bd61177b565b73ffffffffffffffffffffffffffffffffffffffff1614612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90614864565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a906146a4565b60405180910390fd5b61258c81612e9b565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61261b8282604051806020016040528060008152506133e9565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006126ea82612c98565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661271161258f565b73ffffffffffffffffffffffffffffffffffffffff16148061276d575061273661258f565b73ffffffffffffffffffffffffffffffffffffffff1661275584610e52565b73ffffffffffffffffffffffffffffffffffffffff16145b806127895750612788826000015161278361258f565b612403565b5b9050806127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906148c4565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490614724565b60405180910390fd5b6128ba85858560016138c9565b6128ca600084846000015161262d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129389190614c96565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129dc9190614b6f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ae29190614bb5565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c2857612b588161261f565b15612c27576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c9086868660016138cf565b505050505050565b612ca06139fa565b612ca98261261f565b612ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdf906146e4565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d4c5760017f000000000000000000000000000000000000000000000000000000000000000084612d3f9190614cca565b612d499190614bb5565b90505b60008390505b818110612e5a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e4657809350505050612e96565b508080612e5290614dee565b915050612d52565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d90614a04565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f808473ffffffffffffffffffffffffffffffffffffffff166138d5565b156130e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fa961258f565b8786866040518563ffffffff1660e01b8152600401612fcb94939291906145e0565b602060405180830381600087803b158015612fe557600080fd5b505af192505050801561301657506040513d601f19601f820116820180604052508101906130139190613e22565b60015b613099573d8060008114613046576040519150601f19603f3d011682016040523d82523d6000602084013e61304b565b606091505b50600081511415613091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308890614924565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130ee565b600190505b949350505050565b6060600f805461310590614e18565b80601f016020809104026020016040519081016040528092919081815260200182805461313190614e18565b801561317e5780601f106131535761010080835404028352916020019161317e565b820191906000526020600020905b81548152906001019060200180831161316157829003601f168201915b5050505050905090565b606060008214156131d0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132e4565b600082905060005b600082146132025780806131eb90614e7b565b915050600a826131fb9190614c0b565b91506131d8565b60008167ffffffffffffffff81111561321e5761321d614fd5565b5b6040519080825280601f01601f1916602001820160405280156132505781602001600182028036833780820191505090505b5090505b600085146132dd576001826132699190614cca565b9150600a856132789190614ee8565b60306132849190614bb5565b60f81b81838151811061329a57613299614fa6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132d69190614c0b565b9450613254565b8093505050505b919050565b6000826132f685846138e8565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336890614744565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345790614984565b60405180910390fd5b6134698161261f565b156134a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a090614964565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561350c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350390614a44565b60405180910390fd5b61351960008583866138c9565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136169190614b6f565b6fffffffffffffffffffffffffffffffff16815260200185836020015161363d9190614b6f565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156138ac57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461384c6000888488612f5f565b61388b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388290614924565b60405180910390fd5b818061389690614e7b565b92505080806138a490614e7b565b9150506137db565b50806001819055506138c160008785886138cf565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b60008082905060005b845181101561395257600085828151811061390f5761390e614fa6565b5b602002602001015190508083116139315761392a838261395d565b925061393e565b61393b818461395d565b92505b50808061394a90614e7b565b9150506138f1565b508091505092915050565b600082600052816020526040600020905092915050565b82805461398090614e18565b90600052602060002090601f0160209004810192826139a257600085556139e9565b82601f106139bb57805160ff19168380011785556139e9565b828001600101855582156139e9579182015b828111156139e85782518255916020019190600101906139cd565b5b5090506139f69190613a34565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a4d576000816000905550600101613a35565b5090565b6000613a64613a5f84614abf565b614a9a565b905082815260208101848484011115613a8057613a7f615013565b5b613a8b848285614dac565b509392505050565b6000613aa6613aa184614af0565b614a9a565b905082815260208101848484011115613ac257613ac1615013565b5b613acd848285614dac565b509392505050565b600081359050613ae48161580f565b92915050565b60008083601f840112613b0057613aff615009565b5b8235905067ffffffffffffffff811115613b1d57613b1c615004565b5b602083019150836020820283011115613b3957613b3861500e565b5b9250929050565b600081359050613b4f81615826565b92915050565b600081359050613b648161583d565b92915050565b600081359050613b7981615854565b92915050565b600081519050613b8e81615854565b92915050565b600082601f830112613ba957613ba8615009565b5b8135613bb9848260208601613a51565b91505092915050565b600082601f830112613bd757613bd6615009565b5b8135613be7848260208601613a93565b91505092915050565b600081359050613bff8161586b565b92915050565b600060208284031215613c1b57613c1a61501d565b5b6000613c2984828501613ad5565b91505092915050565b60008060408385031215613c4957613c4861501d565b5b6000613c5785828601613ad5565b9250506020613c6885828601613ad5565b9150509250929050565b600080600060608486031215613c8b57613c8a61501d565b5b6000613c9986828701613ad5565b9350506020613caa86828701613ad5565b9250506040613cbb86828701613bf0565b9150509250925092565b60008060008060808587031215613cdf57613cde61501d565b5b6000613ced87828801613ad5565b9450506020613cfe87828801613ad5565b9350506040613d0f87828801613bf0565b925050606085013567ffffffffffffffff811115613d3057613d2f615018565b5b613d3c87828801613b94565b91505092959194509250565b60008060408385031215613d5f57613d5e61501d565b5b6000613d6d85828601613ad5565b9250506020613d7e85828601613b40565b9150509250929050565b60008060408385031215613d9f57613d9e61501d565b5b6000613dad85828601613ad5565b9250506020613dbe85828601613bf0565b9150509250929050565b600060208284031215613dde57613ddd61501d565b5b6000613dec84828501613b55565b91505092915050565b600060208284031215613e0b57613e0a61501d565b5b6000613e1984828501613b6a565b91505092915050565b600060208284031215613e3857613e3761501d565b5b6000613e4684828501613b7f565b91505092915050565b600060208284031215613e6557613e6461501d565b5b600082013567ffffffffffffffff811115613e8357613e82615018565b5b613e8f84828501613bc2565b91505092915050565b600060208284031215613eae57613ead61501d565b5b6000613ebc84828501613bf0565b91505092915050565b600080600060408486031215613ede57613edd61501d565b5b6000613eec86828701613bf0565b935050602084013567ffffffffffffffff811115613f0d57613f0c615018565b5b613f1986828701613aea565b92509250509250925092565b600080600080600060a08688031215613f4157613f4061501d565b5b6000613f4f88828901613bf0565b9550506020613f6088828901613bf0565b9450506040613f7188828901613bf0565b9350506060613f8288828901613bf0565b9250506080613f9388828901613bf0565b9150509295509295909350565b613fa981614cfe565b82525050565b613fb881614cfe565b82525050565b613fcf613fca82614cfe565b614ec4565b82525050565b613fde81614d10565b82525050565b613fed81614d1c565b82525050565b6000613ffe82614b21565b6140088185614b37565b9350614018818560208601614dbb565b61402181615022565b840191505092915050565b600061403782614b2c565b6140418185614b53565b9350614051818560208601614dbb565b61405a81615022565b840191505092915050565b600061407082614b2c565b61407a8185614b64565b935061408a818560208601614dbb565b80840191505092915050565b60006140a3602283614b53565b91506140ae82615040565b604082019050919050565b60006140c6602683614b53565b91506140d18261508f565b604082019050919050565b60006140e9601883614b53565b91506140f4826150de565b602082019050919050565b600061410c602a83614b53565b915061411782615107565b604082019050919050565b600061412f602383614b53565b915061413a82615156565b604082019050919050565b6000614152602583614b53565b915061415d826151a5565b604082019050919050565b6000614175603183614b53565b9150614180826151f4565b604082019050919050565b6000614198601283614b53565b91506141a382615243565b602082019050919050565b60006141bb601e83614b53565b91506141c68261526c565b602082019050919050565b60006141de600f83614b53565b91506141e982615295565b602082019050919050565b6000614201603983614b53565b915061420c826152be565b604082019050919050565b6000614224601e83614b53565b915061422f8261530d565b602082019050919050565b6000614247602b83614b53565b915061425282615336565b604082019050919050565b600061426a601283614b53565b915061427582615385565b602082019050919050565b600061428d602683614b53565b9150614298826153ae565b604082019050919050565b60006142b0600583614b64565b91506142bb826153fd565b600582019050919050565b60006142d3602083614b53565b91506142de82615426565b602082019050919050565b60006142f6602f83614b53565b91506143018261544f565b604082019050919050565b6000614319601a83614b53565b91506143248261549e565b602082019050919050565b600061433c603283614b53565b9150614347826154c7565b604082019050919050565b600061435f602283614b53565b915061436a82615516565b604082019050919050565b6000614382600083614b48565b915061438d82615565565b600082019050919050565b60006143a5601083614b53565b91506143b082615568565b602082019050919050565b60006143c8603383614b53565b91506143d382615591565b604082019050919050565b60006143eb601683614b53565b91506143f6826155e0565b602082019050919050565b600061440e601d83614b53565b915061441982615609565b602082019050919050565b6000614431602183614b53565b915061443c82615632565b604082019050919050565b6000614454601683614b53565b915061445f82615681565b602082019050919050565b6000614477602e83614b53565b9150614482826156aa565b604082019050919050565b600061449a601f83614b53565b91506144a5826156f9565b602082019050919050565b60006144bd602f83614b53565b91506144c882615722565b604082019050919050565b60006144e0602d83614b53565b91506144eb82615771565b604082019050919050565b6000614503602283614b53565b915061450e826157c0565b604082019050919050565b60408201600082015161452f6000850182613fa0565b5060208201516145426020850182614557565b50505050565b61455181614d8e565b82525050565b61456081614d98565b82525050565b60006145728284613fbe565b60148201915081905092915050565b600061458d8285614065565b91506145998284614065565b91506145a4826142a3565b91508190509392505050565b60006145bb82614375565b9150819050919050565b60006020820190506145da6000830184613faf565b92915050565b60006080820190506145f56000830187613faf565b6146026020830186613faf565b61460f6040830185614548565b81810360608301526146218184613ff3565b905095945050505050565b60006020820190506146416000830184613fd5565b92915050565b600060208201905061465c6000830184613fe4565b92915050565b6000602082019050818103600083015261467c818461402c565b905092915050565b6000602082019050818103600083015261469d81614096565b9050919050565b600060208201905081810360008301526146bd816140b9565b9050919050565b600060208201905081810360008301526146dd816140dc565b9050919050565b600060208201905081810360008301526146fd816140ff565b9050919050565b6000602082019050818103600083015261471d81614122565b9050919050565b6000602082019050818103600083015261473d81614145565b9050919050565b6000602082019050818103600083015261475d81614168565b9050919050565b6000602082019050818103600083015261477d8161418b565b9050919050565b6000602082019050818103600083015261479d816141ae565b9050919050565b600060208201905081810360008301526147bd816141d1565b9050919050565b600060208201905081810360008301526147dd816141f4565b9050919050565b600060208201905081810360008301526147fd81614217565b9050919050565b6000602082019050818103600083015261481d8161423a565b9050919050565b6000602082019050818103600083015261483d8161425d565b9050919050565b6000602082019050818103600083015261485d81614280565b9050919050565b6000602082019050818103600083015261487d816142c6565b9050919050565b6000602082019050818103600083015261489d816142e9565b9050919050565b600060208201905081810360008301526148bd8161430c565b9050919050565b600060208201905081810360008301526148dd8161432f565b9050919050565b600060208201905081810360008301526148fd81614352565b9050919050565b6000602082019050818103600083015261491d81614398565b9050919050565b6000602082019050818103600083015261493d816143bb565b9050919050565b6000602082019050818103600083015261495d816143de565b9050919050565b6000602082019050818103600083015261497d81614401565b9050919050565b6000602082019050818103600083015261499d81614424565b9050919050565b600060208201905081810360008301526149bd81614447565b9050919050565b600060208201905081810360008301526149dd8161446a565b9050919050565b600060208201905081810360008301526149fd8161448d565b9050919050565b60006020820190508181036000830152614a1d816144b0565b9050919050565b60006020820190508181036000830152614a3d816144d3565b9050919050565b60006020820190508181036000830152614a5d816144f6565b9050919050565b6000604082019050614a796000830184614519565b92915050565b6000602082019050614a946000830184614548565b92915050565b6000614aa4614ab5565b9050614ab08282614e4a565b919050565b6000604051905090565b600067ffffffffffffffff821115614ada57614ad9614fd5565b5b614ae382615022565b9050602081019050919050565b600067ffffffffffffffff821115614b0b57614b0a614fd5565b5b614b1482615022565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b7a82614d52565b9150614b8583614d52565b9250826fffffffffffffffffffffffffffffffff03821115614baa57614ba9614f19565b5b828201905092915050565b6000614bc082614d8e565b9150614bcb83614d8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c0057614bff614f19565b5b828201905092915050565b6000614c1682614d8e565b9150614c2183614d8e565b925082614c3157614c30614f48565b5b828204905092915050565b6000614c4782614d8e565b9150614c5283614d8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c8b57614c8a614f19565b5b828202905092915050565b6000614ca182614d52565b9150614cac83614d52565b925082821015614cbf57614cbe614f19565b5b828203905092915050565b6000614cd582614d8e565b9150614ce083614d8e565b925082821015614cf357614cf2614f19565b5b828203905092915050565b6000614d0982614d6e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614dd9578082015181840152602081019050614dbe565b83811115614de8576000848401525b50505050565b6000614df982614d8e565b91506000821415614e0d57614e0c614f19565b5b600182039050919050565b60006002820490506001821680614e3057607f821691505b60208210811415614e4457614e43614f77565b5b50919050565b614e5382615022565b810181811067ffffffffffffffff82111715614e7257614e71614fd5565b5b80604052505050565b6000614e8682614d8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eb957614eb8614f19565b5b600182019050919050565b6000614ecf82614ed6565b9050919050565b6000614ee182615033565b9050919050565b6000614ef382614d8e565b9150614efe83614d8e565b925082614f0e57614f0d614f48565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374696e67206e6f7420737461727465640000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61581881614cfe565b811461582357600080fd5b50565b61582f81614d10565b811461583a57600080fd5b50565b61584681614d1c565b811461585157600080fd5b50565b61585d81614d26565b811461586857600080fd5b50565b61587481614d8e565b811461587f57600080fd5b5056fea2646970667358221220e373a94c2ce3ad80401ce3b882bf3f294df18c6a5eb25f91d9cd5a50a1d9aaac64736f6c63430008070033697066733a2f2f516d5851557853587470417557326b4638503250386977394667733933583245754a514e4e357244356b4a4472502f

Deployed Bytecode

0x6080604052600436106102725760003560e01c806369ba1a751161014f578063ac446002116100c1578063d04950a11161007a578063d04950a114610929578063d2cab05614610954578063d7224ba014610970578063dc33e6811461099b578063e985e9c5146109d8578063f2fde38b14610a1557610272565b8063ac44600214610843578063af7b26e91461085a578063b88d4fde14610883578063bd0a8439146108ac578063c1f127e2146108c3578063c87b56dd146108ec57610272565b80638da5cb5b116101135780638da5cb5b146107405780639231ab2a1461076b57806395d89b41146107a857806398d5fdca146107d3578063a0712d68146107fe578063a22cb4651461081a57610272565b806369ba1a751461066f57806370a0823114610698578063715018a6146106d55780637cb64759146106ec5780638d859f3e1461071557610272565b80632f2ffc57116101e85780634e69d560116101ac5780634e69d5601461054d5780634f6ccce71461057857806355f804b3146105b55780635c37809d146105de57806362c6f7b9146106075780636352211e1461063257610272565b80632f2ffc571461046a5780632f745c59146104955780633fd17366146104d25780634256dbe3146104fb57806342842e0e1461052457610272565b8063081812fc1161023a578063081812fc1461035a578063095ea7b31461039757806318160ddd146103c0578063200d2ed2146103eb57806323b872dd146104165780632eb4a7ab1461043f57610272565b80630199e3471461027757806301ffc9a7146102a0578063050225ea146102dd57806305060ed91461030657806306fdde031461032f575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613e98565b610a3e565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190613df5565b610ac4565b6040516102d4919061462c565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190613d88565b610c0e565b005b34801561031257600080fd5b5061032d60048036038101906103289190613f25565b610d1a565b005b34801561033b57600080fd5b50610344610dc0565b6040516103519190614662565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613e98565b610e52565b60405161038e91906145c5565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613d88565b610ed7565b005b3480156103cc57600080fd5b506103d5610ff0565b6040516103e29190614a7f565b60405180910390f35b3480156103f757600080fd5b50610400610ffa565b60405161040d9190614a7f565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613c72565b611000565b005b34801561044b57600080fd5b50610454611010565b6040516104619190614647565b60405180910390f35b34801561047657600080fd5b5061047f611016565b60405161048c9190614a7f565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613d88565b61101c565b6040516104c99190614a7f565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f49190613e98565b61121a565b005b34801561050757600080fd5b50610522600480360381019061051d9190613e98565b6112a0565b005b34801561053057600080fd5b5061054b60048036038101906105469190613c72565b611326565b005b34801561055957600080fd5b50610562611346565b60405161056f9190614a7f565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613e98565b611350565b6040516105ac9190614a7f565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190613e4f565b6113a3565b005b3480156105ea57600080fd5b5061060560048036038101906106009190613e4f565b611439565b005b34801561061357600080fd5b5061061c6114cf565b604051610629919061462c565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613e98565b6114e2565b60405161066691906145c5565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613e98565b6114f8565b005b3480156106a457600080fd5b506106bf60048036038101906106ba9190613c05565b61157e565b6040516106cc9190614a7f565b60405180910390f35b3480156106e157600080fd5b506106ea611667565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613dc8565b6116ef565b005b34801561072157600080fd5b5061072a611775565b6040516107379190614a7f565b60405180910390f35b34801561074c57600080fd5b5061075561177b565b60405161076291906145c5565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190613e98565b6117a4565b60405161079f9190614a64565b60405180910390f35b3480156107b457600080fd5b506107bd6117bc565b6040516107ca9190614662565b60405180910390f35b3480156107df57600080fd5b506107e861184e565b6040516107f59190614a7f565b60405180910390f35b61081860048036038101906108139190613e98565b611858565b005b34801561082657600080fd5b50610841600480360381019061083c9190613d48565b611aa0565b005b34801561084f57600080fd5b50610858611c21565b005b34801561086657600080fd5b50610881600480360381019061087c9190613e98565b611da2565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190613cc5565b611e28565b005b3480156108b857600080fd5b506108c1611e84565b005b3480156108cf57600080fd5b506108ea60048036038101906108e59190613e98565b611f2c565b005b3480156108f857600080fd5b50610913600480360381019061090e9190613e98565b611fb2565b6040516109209190614662565b60405180910390f35b34801561093557600080fd5b5061093e612101565b60405161094b9190614a7f565b60405180910390f35b61096e60048036038101906109699190613ec5565b612107565b005b34801561097c57600080fd5b506109856123eb565b6040516109929190614a7f565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613c05565b6123f1565b6040516109cf9190614a7f565b60405180910390f35b3480156109e457600080fd5b506109ff60048036038101906109fa9190613c32565b612403565b604051610a0c919061462c565b60405180910390f35b348015610a2157600080fd5b50610a3c6004803603810190610a379190613c05565b612497565b005b610a4661258f565b73ffffffffffffffffffffffffffffffffffffffff16610a6461177b565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190614864565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c075750610c0682612597565b5b9050919050565b610c1661258f565b73ffffffffffffffffffffffffffffffffffffffff16610c3461177b565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190614864565b60405180910390fd5b6012547f0000000000000000000000000000000000000000000000000000000000000032610cb89190614cca565b81610cc1610ff0565b610ccb9190614bb5565b1115610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614824565b60405180910390fd5b610d168282612601565b5050565b610d2261258f565b73ffffffffffffffffffffffffffffffffffffffff16610d4061177b565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90614864565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b606060028054610dcf90614e18565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfb90614e18565b8015610e485780601f10610e1d57610100808354040283529160200191610e48565b820191906000526020600020905b815481529060010190602001808311610e2b57829003601f168201915b5050505050905090565b6000610e5d8261261f565b610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390614a24565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ee2826114e2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906148e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7261258f565b73ffffffffffffffffffffffffffffffffffffffff161480610fa15750610fa081610f9b61258f565b612403565b5b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906147c4565b60405180910390fd5b610feb83838361262d565b505050565b6000600154905090565b60135481565b61100b8383836126df565b505050565b600a5481565b600c5481565b60006110278361157e565b8210611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90614684565b60405180910390fd5b6000611072610ff0565b905060008060005b838110156111d8576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461116c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111c457868414156111b5578195505050505050611214565b83806111c090614e7b565b9450505b5080806111d090614e7b565b91505061107a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b906149c4565b60405180910390fd5b92915050565b61122261258f565b73ffffffffffffffffffffffffffffffffffffffff1661124061177b565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614864565b60405180910390fd5b80600d8190555050565b6112a861258f565b73ffffffffffffffffffffffffffffffffffffffff166112c661177b565b73ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614864565b60405180910390fd5b8060128190555050565b61134183838360405180602001604052806000815250611e28565b505050565b6000601354905090565b600061135a610ff0565b821061139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290614704565b60405180910390fd5b819050919050565b6113ab61258f565b73ffffffffffffffffffffffffffffffffffffffff166113c961177b565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690614864565b60405180910390fd5b80600f9080519060200190611435929190613974565b5050565b61144161258f565b73ffffffffffffffffffffffffffffffffffffffff1661145f61177b565b73ffffffffffffffffffffffffffffffffffffffff16146114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90614864565b60405180910390fd5b80601090805190602001906114cb929190613974565b5050565b600e60009054906101000a900460ff1681565b60006114ed82612c98565b600001519050919050565b61150061258f565b73ffffffffffffffffffffffffffffffffffffffff1661151e61177b565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90614864565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614804565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61166f61258f565b73ffffffffffffffffffffffffffffffffffffffff1661168d61177b565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90614864565b60405180910390fd5b6116ed6000612e9b565b565b6116f761258f565b73ffffffffffffffffffffffffffffffffffffffff1661171561177b565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614864565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ac6139fa565b6117b582612c98565b9050919050565b6060600380546117cb90614e18565b80601f01602080910402602001604051908101604052809291908181526020018280546117f790614e18565b80156118445780601f1061181957610100808354040283529160200191611844565b820191906000526020600020905b81548152906001019060200180831161182757829003601f168201915b5050505050905090565b6000600d54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90614784565b60405180910390fd5b60026013541461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290614764565b60405180910390fd5b6012547f00000000000000000000000000000000000000000000000000000000000000326119399190614cca565b81611942610ff0565b61194c9190614bb5565b111561198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490614824565b60405180910390fd5b600c548161199a336123f1565b6119a49190614bb5565b11156119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc906147e4565b60405180910390fd5b600b54811115611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906149a4565b60405180910390fd5b80600d54611a389190614c3c565b341015611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614944565b60405180910390fd5b611a843382612601565b601154611a8f610ff0565b10611a9d5760006013819055505b50565b611aa861258f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d906148a4565b60405180910390fd5b8060076000611b2361258f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd061258f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c15919061462c565b60405180910390a35050565b611c2961258f565b73ffffffffffffffffffffffffffffffffffffffff16611c4761177b565b73ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490614864565b60405180910390fd5b60026009541415611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda906149e4565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d11906145b0565b60006040518083038185875af1925050503d8060008114611d4e576040519150601f19603f3d011682016040523d82523d6000602084013e611d53565b606091505b5050905080611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90614904565b60405180910390fd5b506001600981905550565b611daa61258f565b73ffffffffffffffffffffffffffffffffffffffff16611dc861177b565b73ffffffffffffffffffffffffffffffffffffffff1614611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590614864565b60405180910390fd5b80600b8190555050565b611e338484846126df565b611e3f84848484612f5f565b611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590614924565b60405180910390fd5b50505050565b611e8c61258f565b73ffffffffffffffffffffffffffffffffffffffff16611eaa61177b565b73ffffffffffffffffffffffffffffffffffffffff1614611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790614864565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b611f3461258f565b73ffffffffffffffffffffffffffffffffffffffff16611f5261177b565b73ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90614864565b60405180910390fd5b8060118190555050565b6060611fbd8261261f565b611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff390614884565b60405180910390fd5b600e60009054906101000a900460ff161561206e57600061201b6130f6565b9050600081511161203b5760405180602001604052806000815250612066565b8061204584613188565b604051602001612056929190614581565b6040516020818303038152906040525b9150506120fc565b6010805461207b90614e18565b80601f01602080910402602001604051908101604052809291908181526020018280546120a790614e18565b80156120f45780601f106120c9576101008083540402835291602001916120f4565b820191906000526020600020905b8154815290600101906020018083116120d757829003601f168201915b505050505090505b919050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90614784565b60405180910390fd5b6000336040516020016121889190614566565b6040516020818303038152906040528051906020012090506121ee838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a54836132e9565b61222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906147a4565b60405180910390fd5b600160135414612272576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612269906146c4565b60405180910390fd5b60125460326122819190614cca565b8461228a610ff0565b6122949190614bb5565b11156122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614824565b60405180910390fd5b600c54846122e2336123f1565b6122ec9190614bb5565b111561232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906147e4565b60405180910390fd5b600b54841115612372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612369906149a4565b60405180910390fd5b83600d546123809190614c3c565b3410156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614944565b60405180910390fd5b6123cc3385612601565b6011546123d7610ff0565b106123e55760006013819055505b50505050565b60085481565b60006123fc82613300565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249f61258f565b73ffffffffffffffffffffffffffffffffffffffff166124bd61177b565b73ffffffffffffffffffffffffffffffffffffffff1614612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90614864565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a906146a4565b60405180910390fd5b61258c81612e9b565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61261b8282604051806020016040528060008152506133e9565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006126ea82612c98565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661271161258f565b73ffffffffffffffffffffffffffffffffffffffff16148061276d575061273661258f565b73ffffffffffffffffffffffffffffffffffffffff1661275584610e52565b73ffffffffffffffffffffffffffffffffffffffff16145b806127895750612788826000015161278361258f565b612403565b5b9050806127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906148c4565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490614724565b60405180910390fd5b6128ba85858560016138c9565b6128ca600084846000015161262d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129389190614c96565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129dc9190614b6f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ae29190614bb5565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c2857612b588161261f565b15612c27576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c9086868660016138cf565b505050505050565b612ca06139fa565b612ca98261261f565b612ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdf906146e4565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000328310612d4c5760017f000000000000000000000000000000000000000000000000000000000000003284612d3f9190614cca565b612d499190614bb5565b90505b60008390505b818110612e5a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e4657809350505050612e96565b508080612e5290614dee565b915050612d52565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d90614a04565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f808473ffffffffffffffffffffffffffffffffffffffff166138d5565b156130e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fa961258f565b8786866040518563ffffffff1660e01b8152600401612fcb94939291906145e0565b602060405180830381600087803b158015612fe557600080fd5b505af192505050801561301657506040513d601f19601f820116820180604052508101906130139190613e22565b60015b613099573d8060008114613046576040519150601f19603f3d011682016040523d82523d6000602084013e61304b565b606091505b50600081511415613091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308890614924565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130ee565b600190505b949350505050565b6060600f805461310590614e18565b80601f016020809104026020016040519081016040528092919081815260200182805461313190614e18565b801561317e5780601f106131535761010080835404028352916020019161317e565b820191906000526020600020905b81548152906001019060200180831161316157829003601f168201915b5050505050905090565b606060008214156131d0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132e4565b600082905060005b600082146132025780806131eb90614e7b565b915050600a826131fb9190614c0b565b91506131d8565b60008167ffffffffffffffff81111561321e5761321d614fd5565b5b6040519080825280601f01601f1916602001820160405280156132505781602001600182028036833780820191505090505b5090505b600085146132dd576001826132699190614cca565b9150600a856132789190614ee8565b60306132849190614bb5565b60f81b81838151811061329a57613299614fa6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132d69190614c0b565b9450613254565b8093505050505b919050565b6000826132f685846138e8565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336890614744565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345790614984565b60405180910390fd5b6134698161261f565b156134a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a090614964565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000003283111561350c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350390614a44565b60405180910390fd5b61351960008583866138c9565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136169190614b6f565b6fffffffffffffffffffffffffffffffff16815260200185836020015161363d9190614b6f565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156138ac57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461384c6000888488612f5f565b61388b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388290614924565b60405180910390fd5b818061389690614e7b565b92505080806138a490614e7b565b9150506137db565b50806001819055506138c160008785886138cf565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b60008082905060005b845181101561395257600085828151811061390f5761390e614fa6565b5b602002602001015190508083116139315761392a838261395d565b925061393e565b61393b818461395d565b92505b50808061394a90614e7b565b9150506138f1565b508091505092915050565b600082600052816020526040600020905092915050565b82805461398090614e18565b90600052602060002090601f0160209004810192826139a257600085556139e9565b82601f106139bb57805160ff19168380011785556139e9565b828001600101855582156139e9579182015b828111156139e85782518255916020019190600101906139cd565b5b5090506139f69190613a34565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a4d576000816000905550600101613a35565b5090565b6000613a64613a5f84614abf565b614a9a565b905082815260208101848484011115613a8057613a7f615013565b5b613a8b848285614dac565b509392505050565b6000613aa6613aa184614af0565b614a9a565b905082815260208101848484011115613ac257613ac1615013565b5b613acd848285614dac565b509392505050565b600081359050613ae48161580f565b92915050565b60008083601f840112613b0057613aff615009565b5b8235905067ffffffffffffffff811115613b1d57613b1c615004565b5b602083019150836020820283011115613b3957613b3861500e565b5b9250929050565b600081359050613b4f81615826565b92915050565b600081359050613b648161583d565b92915050565b600081359050613b7981615854565b92915050565b600081519050613b8e81615854565b92915050565b600082601f830112613ba957613ba8615009565b5b8135613bb9848260208601613a51565b91505092915050565b600082601f830112613bd757613bd6615009565b5b8135613be7848260208601613a93565b91505092915050565b600081359050613bff8161586b565b92915050565b600060208284031215613c1b57613c1a61501d565b5b6000613c2984828501613ad5565b91505092915050565b60008060408385031215613c4957613c4861501d565b5b6000613c5785828601613ad5565b9250506020613c6885828601613ad5565b9150509250929050565b600080600060608486031215613c8b57613c8a61501d565b5b6000613c9986828701613ad5565b9350506020613caa86828701613ad5565b9250506040613cbb86828701613bf0565b9150509250925092565b60008060008060808587031215613cdf57613cde61501d565b5b6000613ced87828801613ad5565b9450506020613cfe87828801613ad5565b9350506040613d0f87828801613bf0565b925050606085013567ffffffffffffffff811115613d3057613d2f615018565b5b613d3c87828801613b94565b91505092959194509250565b60008060408385031215613d5f57613d5e61501d565b5b6000613d6d85828601613ad5565b9250506020613d7e85828601613b40565b9150509250929050565b60008060408385031215613d9f57613d9e61501d565b5b6000613dad85828601613ad5565b9250506020613dbe85828601613bf0565b9150509250929050565b600060208284031215613dde57613ddd61501d565b5b6000613dec84828501613b55565b91505092915050565b600060208284031215613e0b57613e0a61501d565b5b6000613e1984828501613b6a565b91505092915050565b600060208284031215613e3857613e3761501d565b5b6000613e4684828501613b7f565b91505092915050565b600060208284031215613e6557613e6461501d565b5b600082013567ffffffffffffffff811115613e8357613e82615018565b5b613e8f84828501613bc2565b91505092915050565b600060208284031215613eae57613ead61501d565b5b6000613ebc84828501613bf0565b91505092915050565b600080600060408486031215613ede57613edd61501d565b5b6000613eec86828701613bf0565b935050602084013567ffffffffffffffff811115613f0d57613f0c615018565b5b613f1986828701613aea565b92509250509250925092565b600080600080600060a08688031215613f4157613f4061501d565b5b6000613f4f88828901613bf0565b9550506020613f6088828901613bf0565b9450506040613f7188828901613bf0565b9350506060613f8288828901613bf0565b9250506080613f9388828901613bf0565b9150509295509295909350565b613fa981614cfe565b82525050565b613fb881614cfe565b82525050565b613fcf613fca82614cfe565b614ec4565b82525050565b613fde81614d10565b82525050565b613fed81614d1c565b82525050565b6000613ffe82614b21565b6140088185614b37565b9350614018818560208601614dbb565b61402181615022565b840191505092915050565b600061403782614b2c565b6140418185614b53565b9350614051818560208601614dbb565b61405a81615022565b840191505092915050565b600061407082614b2c565b61407a8185614b64565b935061408a818560208601614dbb565b80840191505092915050565b60006140a3602283614b53565b91506140ae82615040565b604082019050919050565b60006140c6602683614b53565b91506140d18261508f565b604082019050919050565b60006140e9601883614b53565b91506140f4826150de565b602082019050919050565b600061410c602a83614b53565b915061411782615107565b604082019050919050565b600061412f602383614b53565b915061413a82615156565b604082019050919050565b6000614152602583614b53565b915061415d826151a5565b604082019050919050565b6000614175603183614b53565b9150614180826151f4565b604082019050919050565b6000614198601283614b53565b91506141a382615243565b602082019050919050565b60006141bb601e83614b53565b91506141c68261526c565b602082019050919050565b60006141de600f83614b53565b91506141e982615295565b602082019050919050565b6000614201603983614b53565b915061420c826152be565b604082019050919050565b6000614224601e83614b53565b915061422f8261530d565b602082019050919050565b6000614247602b83614b53565b915061425282615336565b604082019050919050565b600061426a601283614b53565b915061427582615385565b602082019050919050565b600061428d602683614b53565b9150614298826153ae565b604082019050919050565b60006142b0600583614b64565b91506142bb826153fd565b600582019050919050565b60006142d3602083614b53565b91506142de82615426565b602082019050919050565b60006142f6602f83614b53565b91506143018261544f565b604082019050919050565b6000614319601a83614b53565b91506143248261549e565b602082019050919050565b600061433c603283614b53565b9150614347826154c7565b604082019050919050565b600061435f602283614b53565b915061436a82615516565b604082019050919050565b6000614382600083614b48565b915061438d82615565565b600082019050919050565b60006143a5601083614b53565b91506143b082615568565b602082019050919050565b60006143c8603383614b53565b91506143d382615591565b604082019050919050565b60006143eb601683614b53565b91506143f6826155e0565b602082019050919050565b600061440e601d83614b53565b915061441982615609565b602082019050919050565b6000614431602183614b53565b915061443c82615632565b604082019050919050565b6000614454601683614b53565b915061445f82615681565b602082019050919050565b6000614477602e83614b53565b9150614482826156aa565b604082019050919050565b600061449a601f83614b53565b91506144a5826156f9565b602082019050919050565b60006144bd602f83614b53565b91506144c882615722565b604082019050919050565b60006144e0602d83614b53565b91506144eb82615771565b604082019050919050565b6000614503602283614b53565b915061450e826157c0565b604082019050919050565b60408201600082015161452f6000850182613fa0565b5060208201516145426020850182614557565b50505050565b61455181614d8e565b82525050565b61456081614d98565b82525050565b60006145728284613fbe565b60148201915081905092915050565b600061458d8285614065565b91506145998284614065565b91506145a4826142a3565b91508190509392505050565b60006145bb82614375565b9150819050919050565b60006020820190506145da6000830184613faf565b92915050565b60006080820190506145f56000830187613faf565b6146026020830186613faf565b61460f6040830185614548565b81810360608301526146218184613ff3565b905095945050505050565b60006020820190506146416000830184613fd5565b92915050565b600060208201905061465c6000830184613fe4565b92915050565b6000602082019050818103600083015261467c818461402c565b905092915050565b6000602082019050818103600083015261469d81614096565b9050919050565b600060208201905081810360008301526146bd816140b9565b9050919050565b600060208201905081810360008301526146dd816140dc565b9050919050565b600060208201905081810360008301526146fd816140ff565b9050919050565b6000602082019050818103600083015261471d81614122565b9050919050565b6000602082019050818103600083015261473d81614145565b9050919050565b6000602082019050818103600083015261475d81614168565b9050919050565b6000602082019050818103600083015261477d8161418b565b9050919050565b6000602082019050818103600083015261479d816141ae565b9050919050565b600060208201905081810360008301526147bd816141d1565b9050919050565b600060208201905081810360008301526147dd816141f4565b9050919050565b600060208201905081810360008301526147fd81614217565b9050919050565b6000602082019050818103600083015261481d8161423a565b9050919050565b6000602082019050818103600083015261483d8161425d565b9050919050565b6000602082019050818103600083015261485d81614280565b9050919050565b6000602082019050818103600083015261487d816142c6565b9050919050565b6000602082019050818103600083015261489d816142e9565b9050919050565b600060208201905081810360008301526148bd8161430c565b9050919050565b600060208201905081810360008301526148dd8161432f565b9050919050565b600060208201905081810360008301526148fd81614352565b9050919050565b6000602082019050818103600083015261491d81614398565b9050919050565b6000602082019050818103600083015261493d816143bb565b9050919050565b6000602082019050818103600083015261495d816143de565b9050919050565b6000602082019050818103600083015261497d81614401565b9050919050565b6000602082019050818103600083015261499d81614424565b9050919050565b600060208201905081810360008301526149bd81614447565b9050919050565b600060208201905081810360008301526149dd8161446a565b9050919050565b600060208201905081810360008301526149fd8161448d565b9050919050565b60006020820190508181036000830152614a1d816144b0565b9050919050565b60006020820190508181036000830152614a3d816144d3565b9050919050565b60006020820190508181036000830152614a5d816144f6565b9050919050565b6000604082019050614a796000830184614519565b92915050565b6000602082019050614a946000830184614548565b92915050565b6000614aa4614ab5565b9050614ab08282614e4a565b919050565b6000604051905090565b600067ffffffffffffffff821115614ada57614ad9614fd5565b5b614ae382615022565b9050602081019050919050565b600067ffffffffffffffff821115614b0b57614b0a614fd5565b5b614b1482615022565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b7a82614d52565b9150614b8583614d52565b9250826fffffffffffffffffffffffffffffffff03821115614baa57614ba9614f19565b5b828201905092915050565b6000614bc082614d8e565b9150614bcb83614d8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c0057614bff614f19565b5b828201905092915050565b6000614c1682614d8e565b9150614c2183614d8e565b925082614c3157614c30614f48565b5b828204905092915050565b6000614c4782614d8e565b9150614c5283614d8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c8b57614c8a614f19565b5b828202905092915050565b6000614ca182614d52565b9150614cac83614d52565b925082821015614cbf57614cbe614f19565b5b828203905092915050565b6000614cd582614d8e565b9150614ce083614d8e565b925082821015614cf357614cf2614f19565b5b828203905092915050565b6000614d0982614d6e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614dd9578082015181840152602081019050614dbe565b83811115614de8576000848401525b50505050565b6000614df982614d8e565b91506000821415614e0d57614e0c614f19565b5b600182039050919050565b60006002820490506001821680614e3057607f821691505b60208210811415614e4457614e43614f77565b5b50919050565b614e5382615022565b810181811067ffffffffffffffff82111715614e7257614e71614fd5565b5b80604052505050565b6000614e8682614d8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eb957614eb8614f19565b5b600182019050919050565b6000614ecf82614ed6565b9050919050565b6000614ee182615033565b9050919050565b6000614ef382614d8e565b9150614efe83614d8e565b925082614f0e57614f0d614f48565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374696e67206e6f7420737461727465640000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61581881614cfe565b811461582357600080fd5b50565b61582f81614d10565b811461583a57600080fd5b50565b61584681614d1c565b811461585157600080fd5b50565b61585d81614d26565b811461586857600080fd5b50565b61587481614d8e565b811461587f57600080fd5b5056fea2646970667358221220e373a94c2ce3ad80401ce3b882bf3f294df18c6a5eb25f91d9cd5a50a1d9aaac64736f6c63430008070033

Deployed Bytecode Sourcemap

20887:5106:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25243:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12147:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25609:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23862:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13719:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14920:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14536:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11117:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21696:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15603:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20996:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21258:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11398:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25007:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25902:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15750:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25457:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11216:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24259:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24154:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21534:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13596:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25369:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12522:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3606:103;;;;;;;;;;;;;:::i;:::-;;21095:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21336:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3383:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24584:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13818:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25534:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22121:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15129:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24735:181;;;;;;;;;;;;;:::i;:::-;;25109:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15912:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24920:83;;;;;;;;;;;;;:::i;:::-;;25816:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23436:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21180:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22678:745;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19042:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24473:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15410:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3718:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25243:122;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25346:13:::1;25328:15;:31;;;;25243:122:::0;:::o;12147:370::-;12274:4;12319:25;12304:40;;;:11;:40;;;;:99;;;;12370:33;12355:48;;;:11;:48;;;;12304:99;:160;;;;12429:35;12414:50;;;:11;:50;;;;12304:160;:207;;;;12475:36;12499:11;12475:23;:36::i;:::-;12304:207;12290:221;;12147:370;;;:::o;25609:201::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25737:7:::1;;25720:14;:24;;;;:::i;:::-;25707:9;25691:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:53;;25683:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;25774:30;25784:8;25794:9;25774;:30::i;:::-;25609:201:::0;;:::o;23862:286::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24008:6:::1;23999;:15;;;;24032:7;24023:6;:16;;;;24056:5;24048;:13;;;;24088;24070:15;:31;;;;24130:12;24110:17;:32;;;;23862:286:::0;;;;;:::o;13719:94::-;13773:13;13802:5;13795:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13719:94;:::o;14920:204::-;14988:7;15012:16;15020:7;15012;:16::i;:::-;15004:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15094:15;:24;15110:7;15094:24;;;;;;;;;;;;;;;;;;;;;15087:31;;14920:204;;;:::o;14536:379::-;14605:13;14621:24;14637:7;14621:15;:24::i;:::-;14605:40;;14666:5;14660:11;;:2;:11;;;;14652:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14751:5;14735:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;14760:37;14777:5;14784:12;:10;:12::i;:::-;14760:16;:37::i;:::-;14735:62;14719:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;14881:28;14890:2;14894:7;14903:5;14881:8;:28::i;:::-;14598:317;14536:379;;:::o;11117:94::-;11170:7;11193:12;;11186:19;;11117:94;:::o;21696:22::-;;;;:::o;15603:142::-;15711:28;15721:4;15727:2;15731:7;15711:9;:28::i;:::-;15603:142;;;:::o;20996:94::-;;;;:::o;21258:34::-;;;;:::o;11398:744::-;11507:7;11542:16;11552:5;11542:9;:16::i;:::-;11534:5;:24;11526:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11604:22;11629:13;:11;:13::i;:::-;11604:38;;11649:19;11679:25;11729:9;11724:350;11748:14;11744:1;:18;11724:350;;;11778:31;11812:11;:14;11824:1;11812:14;;;;;;;;;;;11778:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11865:1;11839:28;;:9;:14;;;:28;;;11835:89;;11900:9;:14;;;11880:34;;11835:89;11957:5;11936:26;;:17;:26;;;11932:135;;;11994:5;11979:11;:20;11975:59;;;12021:1;12014:8;;;;;;;;;11975:59;12044:13;;;;;:::i;:::-;;;;11932:135;11769:305;11764:3;;;;;:::i;:::-;;;;11724:350;;;;12080:56;;;;;;;;;;:::i;:::-;;;;;;;;11398:744;;;;;:::o;25007:98::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25090:9:::1;25082:5;:17;;;;25007:98:::0;:::o;25902:88::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25976:8:::1;25966:7;:18;;;;25902:88:::0;:::o;15750:157::-;15862:39;15879:4;15885:2;15889:7;15862:39;;;;;;;;;;;;:16;:39::i;:::-;15750:157;;;:::o;25457:73::-;25497:4;25518:6;;25511:13;;25457:73;:::o;11216:177::-;11283:7;11315:13;:11;:13::i;:::-;11307:5;:21;11299:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;11382:5;11375:12;;11216:177;;;:::o;24259:98::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24344:7:::1;24328:13;:23;;;;;;;;;;;;:::i;:::-;;24259:98:::0;:::o;24154:99::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24244:3:::1;24226:15;:21;;;;;;;;;;;;:::i;:::-;;24154:99:::0;:::o;21534:28::-;;;;;;;;;;;;;:::o;13596:118::-;13660:7;13683:20;13695:7;13683:11;:20::i;:::-;:25;;;13676:32;;13596:118;;;:::o;25369:84::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25440:7:::1;25431:6;:16;;;;25369:84:::0;:::o;12522:211::-;12586:7;12627:1;12610:19;;:5;:19;;;;12602:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12699:12;:19;12712:5;12699:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;12691:36;;12684:43;;12522:211;;;:::o;3606:103::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3671:30:::1;3698:1;3671:18;:30::i;:::-;3606:103::o:0;21095:77::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21165:1:::1;21152:10;:14;;;;21095:77:::0;:::o;21336:35::-;;;;:::o;3383:87::-;3429:7;3456:6;;;;;;;;;;;3449:13;;3383:87;:::o;24584:147::-;24665:21;;:::i;:::-;24705:20;24717:7;24705:11;:20::i;:::-;24698:27;;24584:147;;;:::o;13818:98::-;13874:13;13903:7;13896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13818:98;:::o;25534:71::-;25573:4;25594:5;;25587:12;;25534:71;:::o;22121:549::-;22055:10;22042:23;;:9;:23;;;22034:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22208:1:::1;22198:6;;:11;22190:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22293:7;;22276:14;:24;;;;:::i;:::-;22264:8;22248:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:52;;22240:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22379:15;;22367:8;22340:24;22353:10;22340:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;22330:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22462:17;;22450:8;:29;;22440:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22541:8;22533:5;;:16;;;;:::i;:::-;22520:9;:29;;22512:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22583:31;22593:10;22605:8;22583:9;:31::i;:::-;22644:6;;22627:13;:11;:13::i;:::-;:23;22624:41;;22662:1;22653:6;:10;;;;22624:41;22121:549:::0;:::o;15129:274::-;15232:12;:10;:12::i;:::-;15220:24;;:8;:24;;;;15212:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;15329:8;15284:18;:32;15303:12;:10;:12::i;:::-;15284:32;;;;;;;;;;;;;;;:42;15317:8;15284:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;15378:8;15349:48;;15364:12;:10;:12::i;:::-;15349:48;;;15388:8;15349:48;;;;;;:::i;:::-;;;;;;;;15129:274;;:::o;24735:181::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1165:1:::1;1311:7;;:19;;1303:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1165:1;1372:7;:18;;;;24800:12:::2;24818:10;:15;;24841:21;24818:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24799:68;;;24882:7;24874:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;24792:124;1121:1:::1;1415:7;:22;;;;24735:181::o:0;25109:130::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:15:::1;25198:17;:35;;;;25109:130:::0;:::o;15912:311::-;16049:28;16059:4;16065:2;16069:7;16049:9;:28::i;:::-;16100:48;16123:4;16129:2;16133:7;16142:5;16100:22;:48::i;:::-;16084:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;15912:311;;;;:::o;24920:83::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24988:9:::1;;;;;;;;;;;24987:10;24975:9;;:22;;;;;;;;;;;;;;;;;;24920:83::o:0;25816:82::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25885:7:::1;25876:6;:16;;;;25816:82:::0;:::o;23436:421::-;23509:13;23539:16;23547:7;23539;:16::i;:::-;23531:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23616:9;;;;;;;;;;;23613:239;;;23633:21;23657:10;:8;:10::i;:::-;23633:34;;23712:1;23694:7;23688:21;:25;:112;;;;;;;;;;;;;;;;;23749:7;23758:18;:7;:16;:18::i;:::-;23732:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23688:112;23674:126;;;;;23613:239;23829:15;23822:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23436:421;;;;:::o;21180:36::-;;;;:::o;22678:745::-;22055:10;22042:23;;:9;:23;;;22034:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22788:12:::1;22830:10;22813:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;22803:39;;;;;;22788:54;;22857:50;22877:11;;22857:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22890:10;;22902:4;22857:18;:50::i;:::-;22849:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22951:1;22941:6;;:11;22933:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23047:7;;21426:2;23024:30;;;;:::i;:::-;23012:8;22996:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:58;;22988:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23134:15;;23122:8;23095:24;23108:10;23095:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;23084:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;23217:17;;23205:8;:29;;23195:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23296:8;23288:5;;:16;;;;:::i;:::-;23275:9;:29;;23267:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23338:31;23348:10;23360:8;23338:9;:31::i;:::-;23396:6;;23379:13;:11;:13::i;:::-;:23;23376:41;;23414:1;23405:6;:10;;;;23376:41;22781:642;22678:745:::0;;;:::o;19042:43::-;;;;:::o;24473:107::-;24531:7;24554:20;24568:5;24554:13;:20::i;:::-;24547:27;;24473:107;;;:::o;15410:186::-;15532:4;15555:18;:25;15574:5;15555:25;;;;;;;;;;;;;;;:35;15581:8;15555:35;;;;;;;;;;;;;;;;;;;;;;;;;15548:42;;15410:186;;;;:::o;3718:201::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3827:1:::1;3807:22;;:8;:22;;;;3799:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3883:28;3902:8;3883:18;:28::i;:::-;3718:201:::0;:::o;2926:98::-;2979:7;3006:10;2999:17;;2926:98;:::o;8036:157::-;8121:4;8160:25;8145:40;;;:11;:40;;;;8138:47;;8036:157;;;:::o;16339:98::-;16404:27;16414:2;16418:8;16404:27;;;;;;;;;;;;:9;:27::i;:::-;16339:98;;:::o;16228:105::-;16285:4;16315:12;;16305:7;:22;16298:29;;16228:105;;;:::o;18864:172::-;18988:2;18961:15;:24;18977:7;18961:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19022:7;19018:2;19002:28;;19011:5;19002:28;;;;;;;;;;;;18864:172;;;:::o;17599:1260::-;17696:35;17734:20;17746:7;17734:11;:20::i;:::-;17696:58;;17763:22;17805:13;:18;;;17789:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;17858:12;:10;:12::i;:::-;17834:36;;:20;17846:7;17834:11;:20::i;:::-;:36;;;17789:81;:142;;;;17881:50;17898:13;:18;;;17918:12;:10;:12::i;:::-;17881:16;:50::i;:::-;17789:142;17763:169;;17957:17;17941:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18089:4;18067:26;;:13;:18;;;:26;;;18051:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;18178:1;18164:16;;:2;:16;;;;18156:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18231:43;18253:4;18259:2;18263:7;18272:1;18231:21;:43::i;:::-;18282:49;18299:1;18303:7;18312:13;:18;;;18282:8;:49::i;:::-;18370:1;18340:12;:18;18353:4;18340:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18406:1;18378:12;:16;18391:2;18378:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18437:43;;;;;;;;18452:2;18437:43;;;;;;18463:15;18437:43;;;;;18414:11;:20;18426:7;18414:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18488:19;18520:1;18510:7;:11;;;;:::i;:::-;18488:33;;18573:1;18532:43;;:11;:24;18544:11;18532:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;18528:236;;;18590:20;18598:11;18590:7;:20::i;:::-;18586:171;;;18650:97;;;;;;;;18677:13;:18;;;18650:97;;;;;;18708:13;:28;;;18650:97;;;;;18623:11;:24;18635:11;18623:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18586:171;18528:236;18796:7;18792:2;18777:27;;18786:4;18777:27;;;;;;;;;;;;18811:42;18832:4;18838:2;18842:7;18851:1;18811:20;:42::i;:::-;17689:1170;;;17599:1260;;;:::o;12985:606::-;13061:21;;:::i;:::-;13102:16;13110:7;13102;:16::i;:::-;13094:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13174:26;13222:12;13211:7;:23;13207:93;;13291:1;13276:12;13266:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;13245:47;;13207:93;13313:12;13328:7;13313:22;;13308:212;13345:18;13337:4;:26;13308:212;;13382:31;13416:11;:17;13428:4;13416:17;;;;;;;;;;;13382:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13472:1;13446:28;;:9;:14;;;:28;;;13442:71;;13494:9;13487:16;;;;;;;13442:71;13373:147;13365:6;;;;;:::i;:::-;;;;13308:212;;;;13528:57;;;;;;;;;;:::i;:::-;;;;;;;;12985:606;;;;:::o;3928:191::-;4002:16;4021:6;;;;;;;;;;;4002:25;;4047:8;4038:6;;:17;;;;;;;;;;;;;;;;;;4102:8;4071:40;;4092:8;4071:40;;;;;;;;;;;;3991:128;3928:191;:::o;19842:690::-;19979:4;19996:15;:2;:13;;;:15::i;:::-;19992:535;;;20051:2;20035:36;;;20072:12;:10;:12::i;:::-;20086:4;20092:7;20101:5;20035:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20022:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20283:1;20266:6;:13;:18;20262:215;;;20299:61;;;;;;;;;;:::i;:::-;;;;;;;;20262:215;20445:6;20439:13;20430:6;20426:2;20422:15;20415:38;20022:464;20167:45;;;20157:55;;;:6;:55;;;;20150:62;;;;;19992:535;20515:4;20508:11;;19842:690;;;;;;;:::o;24361:108::-;24421:13;24450;24443:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24361:108;:::o;1543:533::-;1599:13;1639:1;1630:5;:10;1626:53;;;1657:10;;;;;;;;;;;;;;;;;;;;;1626:53;1689:12;1704:5;1689:20;;1720:14;1745:78;1760:1;1752:4;:9;1745:78;;1778:8;;;;;:::i;:::-;;;;1809:2;1801:10;;;;;:::i;:::-;;;1745:78;;;1833:19;1865:6;1855:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1833:39;;1883:154;1899:1;1890:5;:10;1883:154;;1927:1;1917:11;;;;;:::i;:::-;;;1994:2;1986:5;:10;;;;:::i;:::-;1973:2;:24;;;;:::i;:::-;1960:39;;1943:6;1950;1943:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2023:2;2014:11;;;;;:::i;:::-;;;1883:154;;;2061:6;2047:21;;;;;1543:533;;;;:::o;88:190::-;213:4;266;237:25;250:5;257:4;237:12;:25::i;:::-;:33;230:40;;88:190;;;;;:::o;12739:240::-;12800:7;12849:1;12832:19;;:5;:19;;;;12816:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;12940:12;:19;12953:5;12940:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;12932:41;;12925:48;;12739:240;;;:::o;16442:1152::-;16547:20;16570:12;;16547:35;;16611:1;16597:16;;:2;:16;;;;16589:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16668:21;16676:12;16668:7;:21::i;:::-;16667:22;16659:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16750:12;16738:8;:24;;16730:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16810:61;16840:1;16844:2;16848:12;16862:8;16810:21;:61::i;:::-;16880:30;16913:12;:16;16926:2;16913:16;;;;;;;;;;;;;;;16880:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16955:119;;;;;;;;17005:8;16975:11;:19;;;:39;;;;:::i;:::-;16955:119;;;;;;17058:8;17023:11;:24;;;:44;;;;:::i;:::-;16955:119;;;;;16936:12;:16;16949:2;16936:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17109:43;;;;;;;;17124:2;17109:43;;;;;;17135:15;17109:43;;;;;17081:11;:25;17093:12;17081:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17161:20;17184:12;17161:35;;17210:9;17205:281;17229:8;17225:1;:12;17205:281;;;17283:12;17279:2;17258:38;;17275:1;17258:38;;;;;;;;;;;;17323:59;17354:1;17358:2;17362:12;17376:5;17323:22;:59::i;:::-;17305:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;17464:14;;;;;:::i;:::-;;;;17239:3;;;;;:::i;:::-;;;;17205:281;;;;17509:12;17494;:27;;;;17528:60;17557:1;17561:2;17565:12;17579:8;17528:20;:60::i;:::-;16540:1054;;;16442:1152;;;:::o;20537:141::-;;;;;:::o;20683:140::-;;;;;:::o;4151:197::-;4211:4;4229:12;4296:7;4284:20;4276:28;;4339:1;4332:4;:8;4325:15;;;4151:197;;;:::o;283:517::-;366:7;386:20;409:4;386:27;;429:9;424:339;448:5;:12;444:1;:16;424:339;;;482:20;505:5;511:1;505:8;;;;;;;;:::i;:::-;;;;;;;;482:31;;548:12;532;:28;528:224;;596:42;611:12;625;596:14;:42::i;:::-;581:57;;528:224;;;694:42;709:12;723;694:14;:42::i;:::-;679:57;;528:224;467:296;462:3;;;;;:::i;:::-;;;;424:339;;;;780:12;773:19;;;283:517;;;;:::o;808:224::-;876:13;939:1;933:4;926:15;968:1;962:4;955:15;1009:4;1003;993:21;984:30;;808:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:329::-;6415:6;6464:2;6452:9;6443:7;6439:23;6435:32;6432:119;;;6470:79;;:::i;:::-;6432:119;6590:1;6615:53;6660:7;6651:6;6640:9;6636:22;6615:53;:::i;:::-;6605:63;;6561:117;6356:329;;;;:::o;6691:327::-;6749:6;6798:2;6786:9;6777:7;6773:23;6769:32;6766:119;;;6804:79;;:::i;:::-;6766:119;6924:1;6949:52;6993:7;6984:6;6973:9;6969:22;6949:52;:::i;:::-;6939:62;;6895:116;6691:327;;;;:::o;7024:349::-;7093:6;7142:2;7130:9;7121:7;7117:23;7113:32;7110:119;;;7148:79;;:::i;:::-;7110:119;7268:1;7293:63;7348:7;7339:6;7328:9;7324:22;7293:63;:::i;:::-;7283:73;;7239:127;7024:349;;;;:::o;7379:509::-;7448:6;7497:2;7485:9;7476:7;7472:23;7468:32;7465:119;;;7503:79;;:::i;:::-;7465:119;7651:1;7640:9;7636:17;7623:31;7681:18;7673:6;7670:30;7667:117;;;7703:79;;:::i;:::-;7667:117;7808:63;7863:7;7854:6;7843:9;7839:22;7808:63;:::i;:::-;7798:73;;7594:287;7379:509;;;;:::o;7894:329::-;7953:6;8002:2;7990:9;7981:7;7977:23;7973:32;7970:119;;;8008:79;;:::i;:::-;7970:119;8128:1;8153:53;8198:7;8189:6;8178:9;8174:22;8153:53;:::i;:::-;8143:63;;8099:117;7894:329;;;;:::o;8229:704::-;8324:6;8332;8340;8389:2;8377:9;8368:7;8364:23;8360:32;8357:119;;;8395:79;;:::i;:::-;8357:119;8515:1;8540:53;8585:7;8576:6;8565:9;8561:22;8540:53;:::i;:::-;8530:63;;8486:117;8670:2;8659:9;8655:18;8642:32;8701:18;8693:6;8690:30;8687:117;;;8723:79;;:::i;:::-;8687:117;8836:80;8908:7;8899:6;8888:9;8884:22;8836:80;:::i;:::-;8818:98;;;;8613:313;8229:704;;;;;:::o;8939:911::-;9034:6;9042;9050;9058;9066;9115:3;9103:9;9094:7;9090:23;9086:33;9083:120;;;9122:79;;:::i;:::-;9083:120;9242:1;9267:53;9312:7;9303:6;9292:9;9288:22;9267:53;:::i;:::-;9257:63;;9213:117;9369:2;9395:53;9440:7;9431:6;9420:9;9416:22;9395:53;:::i;:::-;9385:63;;9340:118;9497:2;9523:53;9568:7;9559:6;9548:9;9544:22;9523:53;:::i;:::-;9513:63;;9468:118;9625:2;9651:53;9696:7;9687:6;9676:9;9672:22;9651:53;:::i;:::-;9641:63;;9596:118;9753:3;9780:53;9825:7;9816:6;9805:9;9801:22;9780:53;:::i;:::-;9770:63;;9724:119;8939:911;;;;;;;;:::o;9856:108::-;9933:24;9951:5;9933:24;:::i;:::-;9928:3;9921:37;9856:108;;:::o;9970:118::-;10057:24;10075:5;10057:24;:::i;:::-;10052:3;10045:37;9970:118;;:::o;10094:157::-;10199:45;10219:24;10237:5;10219:24;:::i;:::-;10199:45;:::i;:::-;10194:3;10187:58;10094:157;;:::o;10257:109::-;10338:21;10353:5;10338:21;:::i;:::-;10333:3;10326:34;10257:109;;:::o;10372:118::-;10459:24;10477:5;10459:24;:::i;:::-;10454:3;10447:37;10372:118;;:::o;10496:360::-;10582:3;10610:38;10642:5;10610:38;:::i;:::-;10664:70;10727:6;10722:3;10664:70;:::i;:::-;10657:77;;10743:52;10788:6;10783:3;10776:4;10769:5;10765:16;10743:52;:::i;:::-;10820:29;10842:6;10820:29;:::i;:::-;10815:3;10811:39;10804:46;;10586:270;10496:360;;;;:::o;10862:364::-;10950:3;10978:39;11011:5;10978:39;:::i;:::-;11033:71;11097:6;11092:3;11033:71;:::i;:::-;11026:78;;11113:52;11158:6;11153:3;11146:4;11139:5;11135:16;11113:52;:::i;:::-;11190:29;11212:6;11190:29;:::i;:::-;11185:3;11181:39;11174:46;;10954:272;10862:364;;;;:::o;11232:377::-;11338:3;11366:39;11399:5;11366:39;:::i;:::-;11421:89;11503:6;11498:3;11421:89;:::i;:::-;11414:96;;11519:52;11564:6;11559:3;11552:4;11545:5;11541:16;11519:52;:::i;:::-;11596:6;11591:3;11587:16;11580:23;;11342:267;11232:377;;;;:::o;11615:366::-;11757:3;11778:67;11842:2;11837:3;11778:67;:::i;:::-;11771:74;;11854:93;11943:3;11854:93;:::i;:::-;11972:2;11967:3;11963:12;11956:19;;11615:366;;;:::o;11987:::-;12129:3;12150:67;12214:2;12209:3;12150:67;:::i;:::-;12143:74;;12226:93;12315:3;12226:93;:::i;:::-;12344:2;12339:3;12335:12;12328:19;;11987:366;;;:::o;12359:::-;12501:3;12522:67;12586:2;12581:3;12522:67;:::i;:::-;12515:74;;12598:93;12687:3;12598:93;:::i;:::-;12716:2;12711:3;12707:12;12700:19;;12359:366;;;:::o;12731:::-;12873:3;12894:67;12958:2;12953:3;12894:67;:::i;:::-;12887:74;;12970:93;13059:3;12970:93;:::i;:::-;13088:2;13083:3;13079:12;13072:19;;12731:366;;;:::o;13103:::-;13245:3;13266:67;13330:2;13325:3;13266:67;:::i;:::-;13259:74;;13342:93;13431:3;13342:93;:::i;:::-;13460:2;13455:3;13451:12;13444:19;;13103:366;;;:::o;13475:::-;13617:3;13638:67;13702:2;13697:3;13638:67;:::i;:::-;13631:74;;13714:93;13803:3;13714:93;:::i;:::-;13832:2;13827:3;13823:12;13816:19;;13475:366;;;:::o;13847:::-;13989:3;14010:67;14074:2;14069:3;14010:67;:::i;:::-;14003:74;;14086:93;14175:3;14086:93;:::i;:::-;14204:2;14199:3;14195:12;14188:19;;13847:366;;;:::o;14219:::-;14361:3;14382:67;14446:2;14441:3;14382:67;:::i;:::-;14375:74;;14458:93;14547:3;14458:93;:::i;:::-;14576:2;14571:3;14567:12;14560:19;;14219:366;;;:::o;14591:::-;14733:3;14754:67;14818:2;14813:3;14754:67;:::i;:::-;14747:74;;14830:93;14919:3;14830:93;:::i;:::-;14948:2;14943:3;14939:12;14932:19;;14591:366;;;:::o;14963:::-;15105:3;15126:67;15190:2;15185:3;15126:67;:::i;:::-;15119:74;;15202:93;15291:3;15202:93;:::i;:::-;15320:2;15315:3;15311:12;15304:19;;14963:366;;;:::o;15335:::-;15477:3;15498:67;15562:2;15557:3;15498:67;:::i;:::-;15491:74;;15574:93;15663:3;15574:93;:::i;:::-;15692:2;15687:3;15683:12;15676:19;;15335:366;;;:::o;15707:::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:::-;16221:3;16242:67;16306:2;16301:3;16242:67;:::i;:::-;16235:74;;16318:93;16407:3;16318:93;:::i;:::-;16436:2;16431:3;16427:12;16420:19;;16079:366;;;:::o;16451:::-;16593:3;16614:67;16678:2;16673:3;16614:67;:::i;:::-;16607:74;;16690:93;16779:3;16690:93;:::i;:::-;16808:2;16803:3;16799:12;16792:19;;16451:366;;;:::o;16823:::-;16965:3;16986:67;17050:2;17045:3;16986:67;:::i;:::-;16979:74;;17062:93;17151:3;17062:93;:::i;:::-;17180:2;17175:3;17171:12;17164:19;;16823:366;;;:::o;17195:400::-;17355:3;17376:84;17458:1;17453:3;17376:84;:::i;:::-;17369:91;;17469:93;17558:3;17469:93;:::i;:::-;17587:1;17582:3;17578:11;17571:18;;17195:400;;;:::o;17601:366::-;17743:3;17764:67;17828:2;17823:3;17764:67;:::i;:::-;17757:74;;17840:93;17929:3;17840:93;:::i;:::-;17958:2;17953:3;17949:12;17942:19;;17601:366;;;:::o;17973:::-;18115:3;18136:67;18200:2;18195:3;18136:67;:::i;:::-;18129:74;;18212:93;18301:3;18212:93;:::i;:::-;18330:2;18325:3;18321:12;18314:19;;17973:366;;;:::o;18345:::-;18487:3;18508:67;18572:2;18567:3;18508:67;:::i;:::-;18501:74;;18584:93;18673:3;18584:93;:::i;:::-;18702:2;18697:3;18693:12;18686:19;;18345:366;;;:::o;18717:::-;18859:3;18880:67;18944:2;18939:3;18880:67;:::i;:::-;18873:74;;18956:93;19045:3;18956:93;:::i;:::-;19074:2;19069:3;19065:12;19058:19;;18717:366;;;:::o;19089:::-;19231:3;19252:67;19316:2;19311:3;19252:67;:::i;:::-;19245:74;;19328:93;19417:3;19328:93;:::i;:::-;19446:2;19441:3;19437:12;19430:19;;19089:366;;;:::o;19461:398::-;19620:3;19641:83;19722:1;19717:3;19641:83;:::i;:::-;19634:90;;19733:93;19822:3;19733:93;:::i;:::-;19851:1;19846:3;19842:11;19835:18;;19461:398;;;:::o;19865:366::-;20007:3;20028:67;20092:2;20087:3;20028:67;:::i;:::-;20021:74;;20104:93;20193:3;20104:93;:::i;:::-;20222:2;20217:3;20213:12;20206:19;;19865:366;;;:::o;20237:::-;20379:3;20400:67;20464:2;20459:3;20400:67;:::i;:::-;20393:74;;20476:93;20565:3;20476:93;:::i;:::-;20594:2;20589:3;20585:12;20578:19;;20237:366;;;:::o;20609:::-;20751:3;20772:67;20836:2;20831:3;20772:67;:::i;:::-;20765:74;;20848:93;20937:3;20848:93;:::i;:::-;20966:2;20961:3;20957:12;20950:19;;20609:366;;;:::o;20981:::-;21123:3;21144:67;21208:2;21203:3;21144:67;:::i;:::-;21137:74;;21220:93;21309:3;21220:93;:::i;:::-;21338:2;21333:3;21329:12;21322:19;;20981:366;;;:::o;21353:::-;21495:3;21516:67;21580:2;21575:3;21516:67;:::i;:::-;21509:74;;21592:93;21681:3;21592:93;:::i;:::-;21710:2;21705:3;21701:12;21694:19;;21353:366;;;:::o;21725:::-;21867:3;21888:67;21952:2;21947:3;21888:67;:::i;:::-;21881:74;;21964:93;22053:3;21964:93;:::i;:::-;22082:2;22077:3;22073:12;22066:19;;21725:366;;;:::o;22097:::-;22239:3;22260:67;22324:2;22319:3;22260:67;:::i;:::-;22253:74;;22336:93;22425:3;22336:93;:::i;:::-;22454:2;22449:3;22445:12;22438:19;;22097:366;;;:::o;22469:::-;22611:3;22632:67;22696:2;22691:3;22632:67;:::i;:::-;22625:74;;22708:93;22797:3;22708:93;:::i;:::-;22826:2;22821:3;22817:12;22810:19;;22469:366;;;:::o;22841:::-;22983:3;23004:67;23068:2;23063:3;23004:67;:::i;:::-;22997:74;;23080:93;23169:3;23080:93;:::i;:::-;23198:2;23193:3;23189:12;23182:19;;22841:366;;;:::o;23213:::-;23355:3;23376:67;23440:2;23435:3;23376:67;:::i;:::-;23369:74;;23452:93;23541:3;23452:93;:::i;:::-;23570:2;23565:3;23561:12;23554:19;;23213:366;;;:::o;23585:::-;23727:3;23748:67;23812:2;23807:3;23748:67;:::i;:::-;23741:74;;23824:93;23913:3;23824:93;:::i;:::-;23942:2;23937:3;23933:12;23926:19;;23585:366;;;:::o;24027:527::-;24186:4;24181:3;24177:14;24273:4;24266:5;24262:16;24256:23;24292:63;24349:4;24344:3;24340:14;24326:12;24292:63;:::i;:::-;24201:164;24457:4;24450:5;24446:16;24440:23;24476:61;24531:4;24526:3;24522:14;24508:12;24476:61;:::i;:::-;24375:172;24155:399;24027:527;;:::o;24560:118::-;24647:24;24665:5;24647:24;:::i;:::-;24642:3;24635:37;24560:118;;:::o;24684:105::-;24759:23;24776:5;24759:23;:::i;:::-;24754:3;24747:36;24684:105;;:::o;24795:256::-;24907:3;24922:75;24993:3;24984:6;24922:75;:::i;:::-;25022:2;25017:3;25013:12;25006:19;;25042:3;25035:10;;24795:256;;;;:::o;25057:701::-;25338:3;25360:95;25451:3;25442:6;25360:95;:::i;:::-;25353:102;;25472:95;25563:3;25554:6;25472:95;:::i;:::-;25465:102;;25584:148;25728:3;25584:148;:::i;:::-;25577:155;;25749:3;25742:10;;25057:701;;;;;:::o;25764:379::-;25948:3;25970:147;26113:3;25970:147;:::i;:::-;25963:154;;26134:3;26127:10;;25764:379;;;:::o;26149:222::-;26242:4;26280:2;26269:9;26265:18;26257:26;;26293:71;26361:1;26350:9;26346:17;26337:6;26293:71;:::i;:::-;26149:222;;;;:::o;26377:640::-;26572:4;26610:3;26599:9;26595:19;26587:27;;26624:71;26692:1;26681:9;26677:17;26668:6;26624:71;:::i;:::-;26705:72;26773:2;26762:9;26758:18;26749:6;26705:72;:::i;:::-;26787;26855:2;26844:9;26840:18;26831:6;26787:72;:::i;:::-;26906:9;26900:4;26896:20;26891:2;26880:9;26876:18;26869:48;26934:76;27005:4;26996:6;26934:76;:::i;:::-;26926:84;;26377:640;;;;;;;:::o;27023:210::-;27110:4;27148:2;27137:9;27133:18;27125:26;;27161:65;27223:1;27212:9;27208:17;27199:6;27161:65;:::i;:::-;27023:210;;;;:::o;27239:222::-;27332:4;27370:2;27359:9;27355:18;27347:26;;27383:71;27451:1;27440:9;27436:17;27427:6;27383:71;:::i;:::-;27239:222;;;;:::o;27467:313::-;27580:4;27618:2;27607:9;27603:18;27595:26;;27667:9;27661:4;27657:20;27653:1;27642:9;27638:17;27631:47;27695:78;27768:4;27759:6;27695:78;:::i;:::-;27687:86;;27467:313;;;;:::o;27786:419::-;27952:4;27990:2;27979:9;27975:18;27967:26;;28039:9;28033:4;28029:20;28025:1;28014:9;28010:17;28003:47;28067:131;28193:4;28067:131;:::i;:::-;28059:139;;27786:419;;;:::o;28211:::-;28377:4;28415:2;28404:9;28400:18;28392:26;;28464:9;28458:4;28454:20;28450:1;28439:9;28435:17;28428:47;28492:131;28618:4;28492:131;:::i;:::-;28484:139;;28211:419;;;:::o;28636:::-;28802:4;28840:2;28829:9;28825:18;28817:26;;28889:9;28883:4;28879:20;28875:1;28864:9;28860:17;28853:47;28917:131;29043:4;28917:131;:::i;:::-;28909:139;;28636:419;;;:::o;29061:::-;29227:4;29265:2;29254:9;29250:18;29242:26;;29314:9;29308:4;29304:20;29300:1;29289:9;29285:17;29278:47;29342:131;29468:4;29342:131;:::i;:::-;29334:139;;29061:419;;;:::o;29486:::-;29652:4;29690:2;29679:9;29675:18;29667:26;;29739:9;29733:4;29729:20;29725:1;29714:9;29710:17;29703:47;29767:131;29893:4;29767:131;:::i;:::-;29759:139;;29486:419;;;:::o;29911:::-;30077:4;30115:2;30104:9;30100:18;30092:26;;30164:9;30158:4;30154:20;30150:1;30139:9;30135:17;30128:47;30192:131;30318:4;30192:131;:::i;:::-;30184:139;;29911:419;;;:::o;30336:::-;30502:4;30540:2;30529:9;30525:18;30517:26;;30589:9;30583:4;30579:20;30575:1;30564:9;30560:17;30553:47;30617:131;30743:4;30617:131;:::i;:::-;30609:139;;30336:419;;;:::o;30761:::-;30927:4;30965:2;30954:9;30950:18;30942:26;;31014:9;31008:4;31004:20;31000:1;30989:9;30985:17;30978:47;31042:131;31168:4;31042:131;:::i;:::-;31034:139;;30761:419;;;:::o;31186:::-;31352:4;31390:2;31379:9;31375:18;31367:26;;31439:9;31433:4;31429:20;31425:1;31414:9;31410:17;31403:47;31467:131;31593:4;31467:131;:::i;:::-;31459:139;;31186:419;;;:::o;31611:::-;31777:4;31815:2;31804:9;31800:18;31792:26;;31864:9;31858:4;31854:20;31850:1;31839:9;31835:17;31828:47;31892:131;32018:4;31892:131;:::i;:::-;31884:139;;31611:419;;;:::o;32036:::-;32202:4;32240:2;32229:9;32225:18;32217:26;;32289:9;32283:4;32279:20;32275:1;32264:9;32260:17;32253:47;32317:131;32443:4;32317:131;:::i;:::-;32309:139;;32036:419;;;:::o;32461:::-;32627:4;32665:2;32654:9;32650:18;32642:26;;32714:9;32708:4;32704:20;32700:1;32689:9;32685:17;32678:47;32742:131;32868:4;32742:131;:::i;:::-;32734:139;;32461:419;;;:::o;32886:::-;33052:4;33090:2;33079:9;33075:18;33067:26;;33139:9;33133:4;33129:20;33125:1;33114:9;33110:17;33103:47;33167:131;33293:4;33167:131;:::i;:::-;33159:139;;32886:419;;;:::o;33311:::-;33477:4;33515:2;33504:9;33500:18;33492:26;;33564:9;33558:4;33554:20;33550:1;33539:9;33535:17;33528:47;33592:131;33718:4;33592:131;:::i;:::-;33584:139;;33311:419;;;:::o;33736:::-;33902:4;33940:2;33929:9;33925:18;33917:26;;33989:9;33983:4;33979:20;33975:1;33964:9;33960:17;33953:47;34017:131;34143:4;34017:131;:::i;:::-;34009:139;;33736:419;;;:::o;34161:::-;34327:4;34365:2;34354:9;34350:18;34342:26;;34414:9;34408:4;34404:20;34400:1;34389:9;34385:17;34378:47;34442:131;34568:4;34442:131;:::i;:::-;34434:139;;34161:419;;;:::o;34586:::-;34752:4;34790:2;34779:9;34775:18;34767:26;;34839:9;34833:4;34829:20;34825:1;34814:9;34810:17;34803:47;34867:131;34993:4;34867:131;:::i;:::-;34859:139;;34586:419;;;:::o;35011:::-;35177:4;35215:2;35204:9;35200:18;35192:26;;35264:9;35258:4;35254:20;35250:1;35239:9;35235:17;35228:47;35292:131;35418:4;35292:131;:::i;:::-;35284:139;;35011:419;;;:::o;35436:::-;35602:4;35640:2;35629:9;35625:18;35617:26;;35689:9;35683:4;35679:20;35675:1;35664:9;35660:17;35653:47;35717:131;35843:4;35717:131;:::i;:::-;35709:139;;35436:419;;;:::o;35861:::-;36027:4;36065:2;36054:9;36050:18;36042:26;;36114:9;36108:4;36104:20;36100:1;36089:9;36085:17;36078:47;36142:131;36268:4;36142:131;:::i;:::-;36134:139;;35861:419;;;:::o;36286:::-;36452:4;36490:2;36479:9;36475:18;36467:26;;36539:9;36533:4;36529:20;36525:1;36514:9;36510:17;36503:47;36567:131;36693:4;36567:131;:::i;:::-;36559:139;;36286:419;;;:::o;36711:::-;36877:4;36915:2;36904:9;36900:18;36892:26;;36964:9;36958:4;36954:20;36950:1;36939:9;36935:17;36928:47;36992:131;37118:4;36992:131;:::i;:::-;36984:139;;36711:419;;;:::o;37136:::-;37302:4;37340:2;37329:9;37325:18;37317:26;;37389:9;37383:4;37379:20;37375:1;37364:9;37360:17;37353:47;37417:131;37543:4;37417:131;:::i;:::-;37409:139;;37136:419;;;:::o;37561:::-;37727:4;37765:2;37754:9;37750:18;37742:26;;37814:9;37808:4;37804:20;37800:1;37789:9;37785:17;37778:47;37842:131;37968:4;37842:131;:::i;:::-;37834:139;;37561:419;;;:::o;37986:::-;38152:4;38190:2;38179:9;38175:18;38167:26;;38239:9;38233:4;38229:20;38225:1;38214:9;38210:17;38203:47;38267:131;38393:4;38267:131;:::i;:::-;38259:139;;37986:419;;;:::o;38411:::-;38577:4;38615:2;38604:9;38600:18;38592:26;;38664:9;38658:4;38654:20;38650:1;38639:9;38635:17;38628:47;38692:131;38818:4;38692:131;:::i;:::-;38684:139;;38411:419;;;:::o;38836:::-;39002:4;39040:2;39029:9;39025:18;39017:26;;39089:9;39083:4;39079:20;39075:1;39064:9;39060:17;39053:47;39117:131;39243:4;39117:131;:::i;:::-;39109:139;;38836:419;;;:::o;39261:::-;39427:4;39465:2;39454:9;39450:18;39442:26;;39514:9;39508:4;39504:20;39500:1;39489:9;39485:17;39478:47;39542:131;39668:4;39542:131;:::i;:::-;39534:139;;39261:419;;;:::o;39686:::-;39852:4;39890:2;39879:9;39875:18;39867:26;;39939:9;39933:4;39929:20;39925:1;39914:9;39910:17;39903:47;39967:131;40093:4;39967:131;:::i;:::-;39959:139;;39686:419;;;:::o;40111:::-;40277:4;40315:2;40304:9;40300:18;40292:26;;40364:9;40358:4;40354:20;40350:1;40339:9;40335:17;40328:47;40392:131;40518:4;40392:131;:::i;:::-;40384:139;;40111:419;;;:::o;40536:::-;40702:4;40740:2;40729:9;40725:18;40717:26;;40789:9;40783:4;40779:20;40775:1;40764:9;40760:17;40753:47;40817:131;40943:4;40817:131;:::i;:::-;40809:139;;40536:419;;;:::o;40961:346::-;41116:4;41154:2;41143:9;41139:18;41131:26;;41167:133;41297:1;41286:9;41282:17;41273:6;41167:133;:::i;:::-;40961:346;;;;:::o;41313:222::-;41406:4;41444:2;41433:9;41429:18;41421:26;;41457:71;41525:1;41514:9;41510:17;41501:6;41457:71;:::i;:::-;41313:222;;;;:::o;41541:129::-;41575:6;41602:20;;:::i;:::-;41592:30;;41631:33;41659:4;41651:6;41631:33;:::i;:::-;41541:129;;;:::o;41676:75::-;41709:6;41742:2;41736:9;41726:19;;41676:75;:::o;41757:307::-;41818:4;41908:18;41900:6;41897:30;41894:56;;;41930:18;;:::i;:::-;41894:56;41968:29;41990:6;41968:29;:::i;:::-;41960:37;;42052:4;42046;42042:15;42034:23;;41757:307;;;:::o;42070:308::-;42132:4;42222:18;42214:6;42211:30;42208:56;;;42244:18;;:::i;:::-;42208:56;42282:29;42304:6;42282:29;:::i;:::-;42274:37;;42366:4;42360;42356:15;42348:23;;42070:308;;;:::o;42384:98::-;42435:6;42469:5;42463:12;42453:22;;42384:98;;;:::o;42488:99::-;42540:6;42574:5;42568:12;42558:22;;42488:99;;;:::o;42593:168::-;42676:11;42710:6;42705:3;42698:19;42750:4;42745:3;42741:14;42726:29;;42593:168;;;;:::o;42767:147::-;42868:11;42905:3;42890:18;;42767:147;;;;:::o;42920:169::-;43004:11;43038:6;43033:3;43026:19;43078:4;43073:3;43069:14;43054:29;;42920:169;;;;:::o;43095:148::-;43197:11;43234:3;43219:18;;43095:148;;;;:::o;43249:273::-;43289:3;43308:20;43326:1;43308:20;:::i;:::-;43303:25;;43342:20;43360:1;43342:20;:::i;:::-;43337:25;;43464:1;43428:34;43424:42;43421:1;43418:49;43415:75;;;43470:18;;:::i;:::-;43415:75;43514:1;43511;43507:9;43500:16;;43249:273;;;;:::o;43528:305::-;43568:3;43587:20;43605:1;43587:20;:::i;:::-;43582:25;;43621:20;43639:1;43621:20;:::i;:::-;43616:25;;43775:1;43707:66;43703:74;43700:1;43697:81;43694:107;;;43781:18;;:::i;:::-;43694:107;43825:1;43822;43818:9;43811:16;;43528:305;;;;:::o;43839:185::-;43879:1;43896:20;43914:1;43896:20;:::i;:::-;43891:25;;43930:20;43948:1;43930:20;:::i;:::-;43925:25;;43969:1;43959:35;;43974:18;;:::i;:::-;43959:35;44016:1;44013;44009:9;44004:14;;43839:185;;;;:::o;44030:348::-;44070:7;44093:20;44111:1;44093:20;:::i;:::-;44088:25;;44127:20;44145:1;44127:20;:::i;:::-;44122:25;;44315:1;44247:66;44243:74;44240:1;44237:81;44232:1;44225:9;44218:17;44214:105;44211:131;;;44322:18;;:::i;:::-;44211:131;44370:1;44367;44363:9;44352:20;;44030:348;;;;:::o;44384:191::-;44424:4;44444:20;44462:1;44444:20;:::i;:::-;44439:25;;44478:20;44496:1;44478:20;:::i;:::-;44473:25;;44517:1;44514;44511:8;44508:34;;;44522:18;;:::i;:::-;44508:34;44567:1;44564;44560:9;44552:17;;44384:191;;;;:::o;44581:::-;44621:4;44641:20;44659:1;44641:20;:::i;:::-;44636:25;;44675:20;44693:1;44675:20;:::i;:::-;44670:25;;44714:1;44711;44708:8;44705:34;;;44719:18;;:::i;:::-;44705:34;44764:1;44761;44757:9;44749:17;;44581:191;;;;:::o;44778:96::-;44815:7;44844:24;44862:5;44844:24;:::i;:::-;44833:35;;44778:96;;;:::o;44880:90::-;44914:7;44957:5;44950:13;44943:21;44932:32;;44880:90;;;:::o;44976:77::-;45013:7;45042:5;45031:16;;44976:77;;;:::o;45059:149::-;45095:7;45135:66;45128:5;45124:78;45113:89;;45059:149;;;:::o;45214:118::-;45251:7;45291:34;45284:5;45280:46;45269:57;;45214:118;;;:::o;45338:126::-;45375:7;45415:42;45408:5;45404:54;45393:65;;45338:126;;;:::o;45470:77::-;45507:7;45536:5;45525:16;;45470:77;;;:::o;45553:101::-;45589:7;45629:18;45622:5;45618:30;45607:41;;45553:101;;;:::o;45660:154::-;45744:6;45739:3;45734;45721:30;45806:1;45797:6;45792:3;45788:16;45781:27;45660:154;;;:::o;45820:307::-;45888:1;45898:113;45912:6;45909:1;45906:13;45898:113;;;45997:1;45992:3;45988:11;45982:18;45978:1;45973:3;45969:11;45962:39;45934:2;45931:1;45927:10;45922:15;;45898:113;;;46029:6;46026:1;46023:13;46020:101;;;46109:1;46100:6;46095:3;46091:16;46084:27;46020:101;45869:258;45820:307;;;:::o;46133:171::-;46172:3;46195:24;46213:5;46195:24;:::i;:::-;46186:33;;46241:4;46234:5;46231:15;46228:41;;;46249:18;;:::i;:::-;46228:41;46296:1;46289:5;46285:13;46278:20;;46133:171;;;:::o;46310:320::-;46354:6;46391:1;46385:4;46381:12;46371:22;;46438:1;46432:4;46428:12;46459:18;46449:81;;46515:4;46507:6;46503:17;46493:27;;46449:81;46577:2;46569:6;46566:14;46546:18;46543:38;46540:84;;;46596:18;;:::i;:::-;46540:84;46361:269;46310:320;;;:::o;46636:281::-;46719:27;46741:4;46719:27;:::i;:::-;46711:6;46707:40;46849:6;46837:10;46834:22;46813:18;46801:10;46798:34;46795:62;46792:88;;;46860:18;;:::i;:::-;46792:88;46900:10;46896:2;46889:22;46679:238;46636:281;;:::o;46923:233::-;46962:3;46985:24;47003:5;46985:24;:::i;:::-;46976:33;;47031:66;47024:5;47021:77;47018:103;;;47101:18;;:::i;:::-;47018:103;47148:1;47141:5;47137:13;47130:20;;46923:233;;;:::o;47162:100::-;47201:7;47230:26;47250:5;47230:26;:::i;:::-;47219:37;;47162:100;;;:::o;47268:94::-;47307:7;47336:20;47350:5;47336:20;:::i;:::-;47325:31;;47268:94;;;:::o;47368:176::-;47400:1;47417:20;47435:1;47417:20;:::i;:::-;47412:25;;47451:20;47469:1;47451:20;:::i;:::-;47446:25;;47490:1;47480:35;;47495:18;;:::i;:::-;47480:35;47536:1;47533;47529:9;47524:14;;47368:176;;;;:::o;47550:180::-;47598:77;47595:1;47588:88;47695:4;47692:1;47685:15;47719:4;47716:1;47709:15;47736:180;47784:77;47781:1;47774:88;47881:4;47878:1;47871:15;47905:4;47902:1;47895:15;47922:180;47970:77;47967:1;47960:88;48067:4;48064:1;48057:15;48091:4;48088:1;48081:15;48108:180;48156:77;48153:1;48146:88;48253:4;48250:1;48243:15;48277:4;48274:1;48267:15;48294:180;48342:77;48339:1;48332:88;48439:4;48436:1;48429:15;48463:4;48460:1;48453:15;48480:117;48589:1;48586;48579:12;48603:117;48712:1;48709;48702:12;48726:117;48835:1;48832;48825:12;48849:117;48958:1;48955;48948:12;48972:117;49081:1;49078;49071:12;49095:117;49204:1;49201;49194:12;49218:102;49259:6;49310:2;49306:7;49301:2;49294:5;49290:14;49286:28;49276:38;;49218:102;;;:::o;49326:94::-;49359:8;49407:5;49403:2;49399:14;49378:35;;49326:94;;;:::o;49426:221::-;49566:34;49562:1;49554:6;49550:14;49543:58;49635:4;49630:2;49622:6;49618:15;49611:29;49426:221;:::o;49653:225::-;49793:34;49789:1;49781:6;49777:14;49770:58;49862:8;49857:2;49849:6;49845:15;49838:33;49653:225;:::o;49884:174::-;50024:26;50020:1;50012:6;50008:14;50001:50;49884:174;:::o;50064:229::-;50204:34;50200:1;50192:6;50188:14;50181:58;50273:12;50268:2;50260:6;50256:15;50249:37;50064:229;:::o;50299:222::-;50439:34;50435:1;50427:6;50423:14;50416:58;50508:5;50503:2;50495:6;50491:15;50484:30;50299:222;:::o;50527:224::-;50667:34;50663:1;50655:6;50651:14;50644:58;50736:7;50731:2;50723:6;50719:15;50712:32;50527:224;:::o;50757:236::-;50897:34;50893:1;50885:6;50881:14;50874:58;50966:19;50961:2;50953:6;50949:15;50942:44;50757:236;:::o;50999:168::-;51139:20;51135:1;51127:6;51123:14;51116:44;50999:168;:::o;51173:180::-;51313:32;51309:1;51301:6;51297:14;51290:56;51173:180;:::o;51359:165::-;51499:17;51495:1;51487:6;51483:14;51476:41;51359:165;:::o;51530:244::-;51670:34;51666:1;51658:6;51654:14;51647:58;51739:27;51734:2;51726:6;51722:15;51715:52;51530:244;:::o;51780:180::-;51920:32;51916:1;51908:6;51904:14;51897:56;51780:180;:::o;51966:230::-;52106:34;52102:1;52094:6;52090:14;52083:58;52175:13;52170:2;52162:6;52158:15;52151:38;51966:230;:::o;52202:168::-;52342:20;52338:1;52330:6;52326:14;52319:44;52202:168;:::o;52376:225::-;52516:34;52512:1;52504:6;52500:14;52493:58;52585:8;52580:2;52572:6;52568:15;52561:33;52376:225;:::o;52607:155::-;52747:7;52743:1;52735:6;52731:14;52724:31;52607:155;:::o;52768:182::-;52908:34;52904:1;52896:6;52892:14;52885:58;52768:182;:::o;52956:234::-;53096:34;53092:1;53084:6;53080:14;53073:58;53165:17;53160:2;53152:6;53148:15;53141:42;52956:234;:::o;53196:176::-;53336:28;53332:1;53324:6;53320:14;53313:52;53196:176;:::o;53378:237::-;53518:34;53514:1;53506:6;53502:14;53495:58;53587:20;53582:2;53574:6;53570:15;53563:45;53378:237;:::o;53621:221::-;53761:34;53757:1;53749:6;53745:14;53738:58;53830:4;53825:2;53817:6;53813:15;53806:29;53621:221;:::o;53848:114::-;;:::o;53968:166::-;54108:18;54104:1;54096:6;54092:14;54085:42;53968:166;:::o;54140:238::-;54280:34;54276:1;54268:6;54264:14;54257:58;54349:21;54344:2;54336:6;54332:15;54325:46;54140:238;:::o;54384:172::-;54524:24;54520:1;54512:6;54508:14;54501:48;54384:172;:::o;54562:179::-;54702:31;54698:1;54690:6;54686:14;54679:55;54562:179;:::o;54747:220::-;54887:34;54883:1;54875:6;54871:14;54864:58;54956:3;54951:2;54943:6;54939:15;54932:28;54747:220;:::o;54973:172::-;55113:24;55109:1;55101:6;55097:14;55090:48;54973:172;:::o;55151:233::-;55291:34;55287:1;55279:6;55275:14;55268:58;55360:16;55355:2;55347:6;55343:15;55336:41;55151:233;:::o;55390:181::-;55530:33;55526:1;55518:6;55514:14;55507:57;55390:181;:::o;55577:234::-;55717:34;55713:1;55705:6;55701:14;55694:58;55786:17;55781:2;55773:6;55769:15;55762:42;55577:234;:::o;55817:232::-;55957:34;55953:1;55945:6;55941:14;55934:58;56026:15;56021:2;56013:6;56009:15;56002:40;55817:232;:::o;56055:221::-;56195:34;56191:1;56183:6;56179:14;56172:58;56264:4;56259:2;56251:6;56247:15;56240:29;56055:221;:::o;56282:122::-;56355:24;56373:5;56355:24;:::i;:::-;56348:5;56345:35;56335:63;;56394:1;56391;56384:12;56335:63;56282:122;:::o;56410:116::-;56480:21;56495:5;56480:21;:::i;:::-;56473:5;56470:32;56460:60;;56516:1;56513;56506:12;56460:60;56410:116;:::o;56532:122::-;56605:24;56623:5;56605:24;:::i;:::-;56598:5;56595:35;56585:63;;56644:1;56641;56634:12;56585:63;56532:122;:::o;56660:120::-;56732:23;56749:5;56732:23;:::i;:::-;56725:5;56722:34;56712:62;;56770:1;56767;56760:12;56712:62;56660:120;:::o;56786:122::-;56859:24;56877:5;56859:24;:::i;:::-;56852:5;56849:35;56839:63;;56898:1;56895;56888:12;56839:63;56786:122;:::o

Swarm Source

ipfs://e373a94c2ce3ad80401ce3b882bf3f294df18c6a5eb25f91d9cd5a50a1d9aaac
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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