ETH Price: $3,107.32 (+0.12%)

Token

HomelessFriends (HomelessFriends)
 

Overview

Max Total Supply

3,472 HomelessFriends

Holders

944

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
thereitis.eth
Balance
1 HomelessFriends
0x9e7d895b40fd99cd6ce499495815737eacdcff4a
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:
HomelessFriends

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-07-11
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 
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-1;
  } 
  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 HomelessFriends is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;


  uint256 public MAX_PER_Transtion = 10; // maximam amount that user can mint per transaction

  uint256 public  PRICE = 0.10 ether; //0.10 during public sale & 0.085 during pre sale

  uint256 private constant TotalCollectionSize_ = 9999; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 10; //max mint per trx
 
  mapping(address => bool) private whitelistedAddressesForMint;


  bool public _revelNFT = false;


  string private _baseTokenURI;
  string private _uriBeforeRevel;

  uint public status = 0; //0 - sale pause, 1 - free sale, 2 - pre sale, 3 - public sale

  constructor() ERC721A("HomelessFriends","HomelessFriends", MaxMintPerBatch_, TotalCollectionSize_) {
   
   

    _uriBeforeRevel = "https://gateway.pinata.cloud/ipfs/QmeuNPjDxyTv59Rb8gpxpX64pLnNVZicoUPqcaQmGT2of9/";
    _baseTokenURI= "https://gateway.pinata.cloud/ipfs/QmVTNg1VCumdG76TaMCZchzF1iWPas4Xu83uFJNn4dmPpr/";


  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }

function mint(uint256 quantity) external payable callerIsUser {
    if(status == 1){
    require(whitelistedAddressesForMint[msg.sender], "You are not White Listed For Free Mint");
    require(totalSupply() < 122, "Free NFTs have been minted.");
    require(numberMinted(msg.sender) < 1  , "Already minted free" );
    require(quantity == 1, "One Address can mint 1 NFTs in Free Mint");
    _safeMint(msg.sender, 1);
    } 
    else if (status == 2){
    require(quantity > 0,"Mint Quantity should be more than 0");
    require(quantity <= 4,"One Address can mint upto 4 NFTs in Pre Sale");
    require(numberMinted(msg.sender) <= 5  , "Already minted the quota" );
    require(totalSupply() + quantity <= collectionSize, "Reached max supply");
    require(msg.value >= PRICE * quantity, "Not enough ETH in your wallet");
    _safeMint(msg.sender, quantity); 
    }
    else{
    require(status == 3, "Public Sale is not Active");
    require(quantity > 0,"Mint Quantity should be more than 0");
    require(quantity <= MAX_PER_Transtion,"Max 10 NFTs can be minted in a single Trx");
    require(totalSupply() + quantity <= collectionSize, "Reached max supply");
    require(msg.value >= PRICE * quantity, "Not enough ETH in your wallet");
    _safeMint(msg.sender, quantity);  
    }
    }

   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 isWhitelistedForFreeMint(address _user) public view returns (bool) {
    return whitelistedAddressesForMint[_user];
  }

  
  function addNewWhitelistUserForFreeMint(address[] calldata _users) public onlyOwner {
    // ["","",""]
    for(uint i=0;i<_users.length;i++)
        whitelistedAddressesForMint[_users[i]] = true;
  }
  
  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 reserve(address _address, uint256 quantity) public onlyOwner {
  require(quantity > 0,"Quantity should be more than 0");
  require(totalSupply() + quantity <= collectionSize, "Reached max supply");
  _safeMint(_address, quantity);
  }

  function changeRevelStatus() external onlyOwner {
    _revelNFT = !_revelNFT;
  }

  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }

  function changeMAX_PER_Transtion(uint256 q) external onlyOwner
  {
      MAX_PER_Transtion = q;
  }
 
  function giveaway(address a, uint q)public onlyOwner{
    require(totalSupply() + q <= collectionSize, "Reached max supply");
    require(q <= MAX_PER_Transtion, "Can't exceed more than 10");
    _safeMint(a, q);
  }


  function setStatus(uint256 s)external onlyOwner{
      status = s;
      if(s==1){
          PRICE=0 ether;
      }
      else if (s==2){
          PRICE=0.085 ether;
      }
      else{
          PRICE=0.10 ether;
      }
}

  function getStatus()public view returns(uint){
      return status;
  }
  
}

library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

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_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":"_users","type":"address[]"}],"name":"addNewWhitelistUserForFreeMint","outputs":[],"stateMutability":"nonpayable","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":"q","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":"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":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelistedForFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_address","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","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":"uint256","name":"s","type":"uint256"}],"name":"setStatus","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":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600180556000600855600a805567016345785d8a0000600b556000600d60006101000a81548160ff02191690831515021790555060006010553480156200004a57600080fd5b506040518060400160405280600f81526020017f486f6d656c657373467269656e647300000000000000000000000000000000008152506040518060400160405280600f81526020017f486f6d656c657373467269656e64730000000000000000000000000000000000815250600a61270f620000dc620000d06200022060201b60201c565b6200022860201b60201c565b6000811162000122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000119906200040c565b60405180910390fd5b6000821162000168576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015f90620003ea565b60405180910390fd5b836002908051906020019062000180929190620002ec565b50826003908051906020019062000199929190620002ec565b508160a08181525050806080818152505050505050600160098190555060405180608001604052806051815260200162005f1c60519139600f9080519060200190620001e7929190620002ec565b5060405180608001604052806051815260200162005ecb60519139600e908051906020019062000219929190620002ec565b5062000542565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002fa906200043f565b90600052602060002090601f0160209004810192826200031e57600085556200036a565b82601f106200033957805160ff19168380011785556200036a565b828001600101855582156200036a579182015b82811115620003695782518255916020019190600101906200034c565b5b5090506200037991906200037d565b5090565b5b80821115620003985760008160009055506001016200037e565b5090565b6000620003ab6027836200042e565b9150620003b882620004a4565b604082019050919050565b6000620003d2602e836200042e565b9150620003df82620004f3565b604082019050919050565b6000602082019050818103600083015262000405816200039c565b9050919050565b600060208201905081810360008301526200042781620003c3565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200045857607f821691505b602082108114156200046f576200046e62000475565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516159406200058b60003960008181612c4f01528181612c7801526133f7015260008181610ae90152818161196201528181611b03015261227101526159406000f3fe6080604052600436106102305760003560e01c806370a082311161012e578063b88d4fde116100ab578063d04950a11161006f578063d04950a114610828578063d7224ba014610853578063dc33e6811461087e578063e985e9c5146108bb578063f2fde38b146108f857610230565b8063b88d4fde14610745578063bd0a84391461076e578063c87b56dd14610785578063cc47a40b146107c2578063cca3f458146107eb57610230565b806395d89b41116100f257806395d89b4114610695578063a0712d68146106c0578063a22cb465146106dc578063ac44600214610705578063af7b26e91461071c57610230565b806370a08231146105ae578063715018a6146105eb5780638d859f3e146106025780638da5cb5b1461062d5780639231ab2a1461065857610230565b80632f745c59116101bc57806355f804b31161018057806355f804b3146104cb5780635c37809d146104f457806362c6f7b91461051d5780636352211e1461054857806369ba1a751461058557610230565b80632f745c59146103d45780633fd173661461041157806342842e0e1461043a5780634e69d560146104635780634f6ccce71461048e57610230565b8063095ea7b311610203578063095ea7b314610303578063180e548e1461032c57806318160ddd14610355578063200d2ed21461038057806323b872dd146103ab57610230565b806301ffc9a714610235578063050225ea1461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613cc0565b610921565b60405161026991906144ad565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613c33565b610a6b565b005b3480156102a757600080fd5b506102b0610baf565b6040516102bd91906144c8565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613d63565b610c41565b6040516102fa9190614446565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613c33565b610cc6565b005b34801561033857600080fd5b50610353600480360381019061034e9190613c73565b610ddf565b005b34801561036157600080fd5b5061036a610f00565b60405161037791906149a5565b60405180910390f35b34801561038c57600080fd5b50610395610f15565b6040516103a291906149a5565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190613b1d565b610f1b565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613c33565b610f2b565b60405161040891906149a5565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613d63565b611129565b005b34801561044657600080fd5b50610461600480360381019061045c9190613b1d565b6111af565b005b34801561046f57600080fd5b506104786111cf565b60405161048591906149a5565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613d63565b6111d9565b6040516104c291906149a5565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190613d1a565b61122c565b005b34801561050057600080fd5b5061051b60048036038101906105169190613d1a565b6112c2565b005b34801561052957600080fd5b50610532611358565b60405161053f91906144ad565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190613d63565b61136b565b60405161057c9190614446565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613d63565b611381565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190613ab0565b61144b565b6040516105e291906149a5565b60405180910390f35b3480156105f757600080fd5b50610600611534565b005b34801561060e57600080fd5b506106176115bc565b60405161062491906149a5565b60405180910390f35b34801561063957600080fd5b506106426115c2565b60405161064f9190614446565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190613d63565b6115eb565b60405161068c919061498a565b60405180910390f35b3480156106a157600080fd5b506106aa611603565b6040516106b791906144c8565b60405180910390f35b6106da60048036038101906106d59190613d63565b611695565b005b3480156106e857600080fd5b5061070360048036038101906106fe9190613bf3565b611bd5565b005b34801561071157600080fd5b5061071a611d56565b005b34801561072857600080fd5b50610743600480360381019061073e9190613d63565b611ed7565b005b34801561075157600080fd5b5061076c60048036038101906107679190613b70565b611f5d565b005b34801561077a57600080fd5b50610783611fb9565b005b34801561079157600080fd5b506107ac60048036038101906107a79190613d63565b612061565b6040516107b991906144c8565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190613c33565b6121b0565b005b3480156107f757600080fd5b50610812600480360381019061080d9190613ab0565b6122f2565b60405161081f91906144ad565b60405180910390f35b34801561083457600080fd5b5061083d612348565b60405161084a91906149a5565b60405180910390f35b34801561085f57600080fd5b5061086861234e565b60405161087591906149a5565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613ab0565b612354565b6040516108b291906149a5565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613add565b612366565b6040516108ef91906144ad565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613ab0565b6123fa565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a645750610a63826124f2565b5b9050919050565b610a7361255c565b73ffffffffffffffffffffffffffffffffffffffff16610a916115c2565b73ffffffffffffffffffffffffffffffffffffffff1614610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade9061476a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081610b11610f00565b610b1b9190614adb565b1115610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906145ca565b60405180910390fd5b600a54811115610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b989061460a565b60405180910390fd5b610bab8282612564565b5050565b606060028054610bbe90614d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90614d34565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c82612582565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c829061494a565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cd18261136b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d399061480a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6161255c565b73ffffffffffffffffffffffffffffffffffffffff161480610d905750610d8f81610d8a61255c565b612366565b5b610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061466a565b60405180910390fd5b610dda838383612590565b505050565b610de761255c565b73ffffffffffffffffffffffffffffffffffffffff16610e056115c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061476a565b60405180910390fd5b60005b82829050811015610efb576001600c6000858585818110610e8257610e81614e9e565b5b9050602002016020810190610e979190613ab0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ef390614d97565b915050610e5e565b505050565b600060018054610f109190614bf0565b905090565b60105481565b610f26838383612642565b505050565b6000610f368361144b565b8210610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906144ea565b60405180910390fd5b6000610f81610f00565b905060008060005b838110156110e7576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461107b57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110d357868414156110c4578195505050505050611123565b83806110cf90614d97565b9450505b5080806110df90614d97565b915050610f89565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906148ca565b60405180910390fd5b92915050565b61113161255c565b73ffffffffffffffffffffffffffffffffffffffff1661114f6115c2565b73ffffffffffffffffffffffffffffffffffffffff16146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c9061476a565b60405180910390fd5b80600b8190555050565b6111ca83838360405180602001604052806000815250611f5d565b505050565b6000601054905090565b60006111e3610f00565b8210611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b906145aa565b60405180910390fd5b819050919050565b61123461255c565b73ffffffffffffffffffffffffffffffffffffffff166112526115c2565b73ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f9061476a565b60405180910390fd5b80600e90805190602001906112be929190613834565b5050565b6112ca61255c565b73ffffffffffffffffffffffffffffffffffffffff166112e86115c2565b73ffffffffffffffffffffffffffffffffffffffff161461133e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113359061476a565b60405180910390fd5b80600f9080519060200190611354929190613834565b5050565b600d60009054906101000a900460ff1681565b600061137682612bfb565b600001519050919050565b61138961255c565b73ffffffffffffffffffffffffffffffffffffffff166113a76115c2565b73ffffffffffffffffffffffffffffffffffffffff16146113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f49061476a565b60405180910390fd5b80601081905550600181141561141a576000600b81905550611448565b60028114156114375767012dfb0cb5e88000600b81905550611447565b67016345785d8a0000600b819055505b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39061468a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61153c61255c565b73ffffffffffffffffffffffffffffffffffffffff1661155a6115c2565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061476a565b60405180910390fd5b6115ba6000612dfe565b565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f36138ba565b6115fc82612bfb565b9050919050565b60606003805461161290614d34565b80601f016020809104026020016040519081016040528092919081815260200182805461163e90614d34565b801561168b5780601f106116605761010080835404028352916020019161168b565b820191906000526020600020905b81548152906001019060200180831161166e57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061464a565b60405180910390fd5b6001601054141561188257600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661179a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611791906146ca565b60405180910390fd5b607a6117a4610f00565b106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db9061454a565b60405180910390fd5b60016117ef33612354565b1061182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906146aa565b60405180910390fd5b60018114611872576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118699061472a565b60405180910390fd5b61187d336001612564565b611bd2565b60026010541415611a3457600081116118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c79061458a565b60405180910390fd5b6004811115611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b9061450a565b60405180910390fd5b600561191f33612354565b1115611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906148ea565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008161198a610f00565b6119949190614adb565b11156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc906145ca565b60405180910390fd5b80600b546119e39190614b62565b341015611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c906146ea565b60405180910390fd5b611a2f3382612564565b611bd1565b600360105414611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a709061474a565b60405180910390fd5b60008111611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab39061458a565b60405180910390fd5b600a54811115611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906147ea565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611b2b610f00565b611b359190614adb565b1115611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d906145ca565b60405180910390fd5b80600b54611b849190614b62565b341015611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd906146ea565b60405180910390fd5b611bd03382612564565b5b5b50565b611bdd61255c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906147aa565b60405180910390fd5b8060076000611c5861255c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d0561255c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d4a91906144ad565b60405180910390a35050565b611d5e61255c565b73ffffffffffffffffffffffffffffffffffffffff16611d7c6115c2565b73ffffffffffffffffffffffffffffffffffffffff1614611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc99061476a565b60405180910390fd5b60026009541415611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f9061490a565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611e4690614431565b60006040518083038185875af1925050503d8060008114611e83576040519150601f19603f3d011682016040523d82523d6000602084013e611e88565b606091505b5050905080611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec39061482a565b60405180910390fd5b506001600981905550565b611edf61255c565b73ffffffffffffffffffffffffffffffffffffffff16611efd6115c2565b73ffffffffffffffffffffffffffffffffffffffff1614611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a9061476a565b60405180910390fd5b80600a8190555050565b611f68848484612642565b611f7484848484612ec2565b611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa9061484a565b60405180910390fd5b50505050565b611fc161255c565b73ffffffffffffffffffffffffffffffffffffffff16611fdf6115c2565b73ffffffffffffffffffffffffffffffffffffffff1614612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c9061476a565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b606061206c82612582565b6120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061478a565b60405180910390fd5b600d60009054906101000a900460ff161561211d5760006120ca613059565b905060008151116120ea5760405180602001604052806000815250612115565b806120f4846130eb565b604051602001612105929190614402565b6040516020818303038152906040525b9150506121ab565b600f805461212a90614d34565b80601f016020809104026020016040519081016040528092919081815260200182805461215690614d34565b80156121a35780601f10612178576101008083540402835291602001916121a3565b820191906000526020600020905b81548152906001019060200180831161218657829003601f168201915b505050505090505b919050565b6121b861255c565b73ffffffffffffffffffffffffffffffffffffffff166121d66115c2565b73ffffffffffffffffffffffffffffffffffffffff161461222c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122239061476a565b60405180910390fd5b6000811161226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906148aa565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081612299610f00565b6122a39190614adb565b11156122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db906145ca565b60405180910390fd5b6122ee8282612564565b5050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b60085481565b600061235f8261324c565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61240261255c565b73ffffffffffffffffffffffffffffffffffffffff166124206115c2565b73ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d9061476a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd9061452a565b60405180910390fd5b6124ef81612dfe565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61257e828260405180602001604052806000815250613335565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061264d82612bfb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661267461255c565b73ffffffffffffffffffffffffffffffffffffffff1614806126d0575061269961255c565b73ffffffffffffffffffffffffffffffffffffffff166126b884610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b806126ec57506126eb82600001516126e661255c565b612366565b5b90508061272e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612725906147ca565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127979061470a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612807906145ea565b60405180910390fd5b61281d8585856001613815565b61282d6000848460000151612590565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661289b9190614bbc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661293f9190614a95565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612a459190614adb565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b8b57612abb81612582565b15612b8a576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf3868686600161381b565b505050505050565b612c036138ba565b612c0c82612582565b612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c429061456a565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612caf5760017f000000000000000000000000000000000000000000000000000000000000000084612ca29190614bf0565b612cac9190614adb565b90505b60008390505b818110612dbd576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612da957809350505050612df9565b508080612db590614d0a565b915050612cb5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df09061492a565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612ee38473ffffffffffffffffffffffffffffffffffffffff16613821565b1561304c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f0c61255c565b8786866040518563ffffffff1660e01b8152600401612f2e9493929190614461565b602060405180830381600087803b158015612f4857600080fd5b505af1925050508015612f7957506040513d601f19601f82011682018060405250810190612f769190613ced565b60015b612ffc573d8060008114612fa9576040519150601f19603f3d011682016040523d82523d6000602084013e612fae565b606091505b50600081511415612ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612feb9061484a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613051565b600190505b949350505050565b6060600e805461306890614d34565b80601f016020809104026020016040519081016040528092919081815260200182805461309490614d34565b80156130e15780601f106130b6576101008083540402835291602001916130e1565b820191906000526020600020905b8154815290600101906020018083116130c457829003601f168201915b5050505050905090565b60606000821415613133576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613247565b600082905060005b6000821461316557808061314e90614d97565b915050600a8261315e9190614b31565b915061313b565b60008167ffffffffffffffff81111561318157613180614ecd565b5b6040519080825280601f01601f1916602001820160405280156131b35781602001600182028036833780820191505090505b5090505b60008514613240576001826131cc9190614bf0565b9150600a856131db9190614de0565b60306131e79190614adb565b60f81b8183815181106131fd576131fc614e9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132399190614b31565b94506131b7565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b49061462a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a39061488a565b60405180910390fd5b6133b581612582565b156133f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ec9061486a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344f9061496a565b60405180910390fd5b6134656000858386613815565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516135629190614a95565b6fffffffffffffffffffffffffffffffff1681526020018583602001516135899190614a95565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137f857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137986000888488612ec2565b6137d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ce9061484a565b60405180910390fd5b81806137e290614d97565b92505080806137f090614d97565b915050613727565b508060018190555061380d600087858861381b565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461384090614d34565b90600052602060002090601f01602090048101928261386257600085556138a9565b82601f1061387b57805160ff19168380011785556138a9565b828001600101855582156138a9579182015b828111156138a857825182559160200191906001019061388d565b5b5090506138b691906138f4565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561390d5760008160009055506001016138f5565b5090565b600061392461391f846149e5565b6149c0565b9050828152602081018484840111156139405761393f614f0b565b5b61394b848285614cc8565b509392505050565b600061396661396184614a16565b6149c0565b90508281526020810184848401111561398257613981614f0b565b5b61398d848285614cc8565b509392505050565b6000813590506139a4816158ae565b92915050565b60008083601f8401126139c0576139bf614f01565b5b8235905067ffffffffffffffff8111156139dd576139dc614efc565b5b6020830191508360208202830111156139f9576139f8614f06565b5b9250929050565b600081359050613a0f816158c5565b92915050565b600081359050613a24816158dc565b92915050565b600081519050613a39816158dc565b92915050565b600082601f830112613a5457613a53614f01565b5b8135613a64848260208601613911565b91505092915050565b600082601f830112613a8257613a81614f01565b5b8135613a92848260208601613953565b91505092915050565b600081359050613aaa816158f3565b92915050565b600060208284031215613ac657613ac5614f15565b5b6000613ad484828501613995565b91505092915050565b60008060408385031215613af457613af3614f15565b5b6000613b0285828601613995565b9250506020613b1385828601613995565b9150509250929050565b600080600060608486031215613b3657613b35614f15565b5b6000613b4486828701613995565b9350506020613b5586828701613995565b9250506040613b6686828701613a9b565b9150509250925092565b60008060008060808587031215613b8a57613b89614f15565b5b6000613b9887828801613995565b9450506020613ba987828801613995565b9350506040613bba87828801613a9b565b925050606085013567ffffffffffffffff811115613bdb57613bda614f10565b5b613be787828801613a3f565b91505092959194509250565b60008060408385031215613c0a57613c09614f15565b5b6000613c1885828601613995565b9250506020613c2985828601613a00565b9150509250929050565b60008060408385031215613c4a57613c49614f15565b5b6000613c5885828601613995565b9250506020613c6985828601613a9b565b9150509250929050565b60008060208385031215613c8a57613c89614f15565b5b600083013567ffffffffffffffff811115613ca857613ca7614f10565b5b613cb4858286016139aa565b92509250509250929050565b600060208284031215613cd657613cd5614f15565b5b6000613ce484828501613a15565b91505092915050565b600060208284031215613d0357613d02614f15565b5b6000613d1184828501613a2a565b91505092915050565b600060208284031215613d3057613d2f614f15565b5b600082013567ffffffffffffffff811115613d4e57613d4d614f10565b5b613d5a84828501613a6d565b91505092915050565b600060208284031215613d7957613d78614f15565b5b6000613d8784828501613a9b565b91505092915050565b613d9981614c24565b82525050565b613da881614c24565b82525050565b613db781614c36565b82525050565b6000613dc882614a47565b613dd28185614a5d565b9350613de2818560208601614cd7565b613deb81614f1a565b840191505092915050565b6000613e0182614a52565b613e0b8185614a79565b9350613e1b818560208601614cd7565b613e2481614f1a565b840191505092915050565b6000613e3a82614a52565b613e448185614a8a565b9350613e54818560208601614cd7565b80840191505092915050565b6000613e6d602283614a79565b9150613e7882614f2b565b604082019050919050565b6000613e90602c83614a79565b9150613e9b82614f7a565b604082019050919050565b6000613eb3602683614a79565b9150613ebe82614fc9565b604082019050919050565b6000613ed6601b83614a79565b9150613ee182615018565b602082019050919050565b6000613ef9602a83614a79565b9150613f0482615041565b604082019050919050565b6000613f1c602383614a79565b9150613f2782615090565b604082019050919050565b6000613f3f602383614a79565b9150613f4a826150df565b604082019050919050565b6000613f62601283614a79565b9150613f6d8261512e565b602082019050919050565b6000613f85602583614a79565b9150613f9082615157565b604082019050919050565b6000613fa8601983614a79565b9150613fb3826151a6565b602082019050919050565b6000613fcb603183614a79565b9150613fd6826151cf565b604082019050919050565b6000613fee601e83614a79565b9150613ff98261521e565b602082019050919050565b6000614011603983614a79565b915061401c82615247565b604082019050919050565b6000614034602b83614a79565b915061403f82615296565b604082019050919050565b6000614057601383614a79565b9150614062826152e5565b602082019050919050565b600061407a602683614a79565b91506140858261530e565b604082019050919050565b600061409d601d83614a79565b91506140a88261535d565b602082019050919050565b60006140c0602683614a79565b91506140cb82615386565b604082019050919050565b60006140e3600583614a8a565b91506140ee826153d5565b600582019050919050565b6000614106602883614a79565b9150614111826153fe565b604082019050919050565b6000614129601983614a79565b91506141348261544d565b602082019050919050565b600061414c602083614a79565b915061415782615476565b602082019050919050565b600061416f602f83614a79565b915061417a8261549f565b604082019050919050565b6000614192601a83614a79565b915061419d826154ee565b602082019050919050565b60006141b5603283614a79565b91506141c082615517565b604082019050919050565b60006141d8602983614a79565b91506141e382615566565b604082019050919050565b60006141fb602283614a79565b9150614206826155b5565b604082019050919050565b600061421e600083614a6e565b915061422982615604565b600082019050919050565b6000614241601083614a79565b915061424c82615607565b602082019050919050565b6000614264603383614a79565b915061426f82615630565b604082019050919050565b6000614287601d83614a79565b91506142928261567f565b602082019050919050565b60006142aa602183614a79565b91506142b5826156a8565b604082019050919050565b60006142cd601e83614a79565b91506142d8826156f7565b602082019050919050565b60006142f0602e83614a79565b91506142fb82615720565b604082019050919050565b6000614313601883614a79565b915061431e8261576f565b602082019050919050565b6000614336601f83614a79565b915061434182615798565b602082019050919050565b6000614359602f83614a79565b9150614364826157c1565b604082019050919050565b600061437c602d83614a79565b915061438782615810565b604082019050919050565b600061439f602283614a79565b91506143aa8261585f565b604082019050919050565b6040820160008201516143cb6000850182613d90565b5060208201516143de60208501826143f3565b50505050565b6143ed81614caa565b82525050565b6143fc81614cb4565b82525050565b600061440e8285613e2f565b915061441a8284613e2f565b9150614425826140d6565b91508190509392505050565b600061443c82614211565b9150819050919050565b600060208201905061445b6000830184613d9f565b92915050565b60006080820190506144766000830187613d9f565b6144836020830186613d9f565b61449060408301856143e4565b81810360608301526144a28184613dbd565b905095945050505050565b60006020820190506144c26000830184613dae565b92915050565b600060208201905081810360008301526144e28184613df6565b905092915050565b6000602082019050818103600083015261450381613e60565b9050919050565b6000602082019050818103600083015261452381613e83565b9050919050565b6000602082019050818103600083015261454381613ea6565b9050919050565b6000602082019050818103600083015261456381613ec9565b9050919050565b6000602082019050818103600083015261458381613eec565b9050919050565b600060208201905081810360008301526145a381613f0f565b9050919050565b600060208201905081810360008301526145c381613f32565b9050919050565b600060208201905081810360008301526145e381613f55565b9050919050565b6000602082019050818103600083015261460381613f78565b9050919050565b6000602082019050818103600083015261462381613f9b565b9050919050565b6000602082019050818103600083015261464381613fbe565b9050919050565b6000602082019050818103600083015261466381613fe1565b9050919050565b6000602082019050818103600083015261468381614004565b9050919050565b600060208201905081810360008301526146a381614027565b9050919050565b600060208201905081810360008301526146c38161404a565b9050919050565b600060208201905081810360008301526146e38161406d565b9050919050565b6000602082019050818103600083015261470381614090565b9050919050565b60006020820190508181036000830152614723816140b3565b9050919050565b60006020820190508181036000830152614743816140f9565b9050919050565b600060208201905081810360008301526147638161411c565b9050919050565b600060208201905081810360008301526147838161413f565b9050919050565b600060208201905081810360008301526147a381614162565b9050919050565b600060208201905081810360008301526147c381614185565b9050919050565b600060208201905081810360008301526147e3816141a8565b9050919050565b60006020820190508181036000830152614803816141cb565b9050919050565b60006020820190508181036000830152614823816141ee565b9050919050565b6000602082019050818103600083015261484381614234565b9050919050565b6000602082019050818103600083015261486381614257565b9050919050565b600060208201905081810360008301526148838161427a565b9050919050565b600060208201905081810360008301526148a38161429d565b9050919050565b600060208201905081810360008301526148c3816142c0565b9050919050565b600060208201905081810360008301526148e3816142e3565b9050919050565b6000602082019050818103600083015261490381614306565b9050919050565b6000602082019050818103600083015261492381614329565b9050919050565b600060208201905081810360008301526149438161434c565b9050919050565b600060208201905081810360008301526149638161436f565b9050919050565b6000602082019050818103600083015261498381614392565b9050919050565b600060408201905061499f60008301846143b5565b92915050565b60006020820190506149ba60008301846143e4565b92915050565b60006149ca6149db565b90506149d68282614d66565b919050565b6000604051905090565b600067ffffffffffffffff821115614a00576149ff614ecd565b5b614a0982614f1a565b9050602081019050919050565b600067ffffffffffffffff821115614a3157614a30614ecd565b5b614a3a82614f1a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614aa082614c6e565b9150614aab83614c6e565b9250826fffffffffffffffffffffffffffffffff03821115614ad057614acf614e11565b5b828201905092915050565b6000614ae682614caa565b9150614af183614caa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b2657614b25614e11565b5b828201905092915050565b6000614b3c82614caa565b9150614b4783614caa565b925082614b5757614b56614e40565b5b828204905092915050565b6000614b6d82614caa565b9150614b7883614caa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bb157614bb0614e11565b5b828202905092915050565b6000614bc782614c6e565b9150614bd283614c6e565b925082821015614be557614be4614e11565b5b828203905092915050565b6000614bfb82614caa565b9150614c0683614caa565b925082821015614c1957614c18614e11565b5b828203905092915050565b6000614c2f82614c8a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614cf5578082015181840152602081019050614cda565b83811115614d04576000848401525b50505050565b6000614d1582614caa565b91506000821415614d2957614d28614e11565b5b600182039050919050565b60006002820490506001821680614d4c57607f821691505b60208210811415614d6057614d5f614e6f565b5b50919050565b614d6f82614f1a565b810181811067ffffffffffffffff82111715614d8e57614d8d614ecd565b5b80604052505050565b6000614da282614caa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614dd557614dd4614e11565b5b600182019050919050565b6000614deb82614caa565b9150614df683614caa565b925082614e0657614e05614e40565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6520416464726573732063616e206d696e74207570746f2034204e46547360008201527f20696e205072652053616c650000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46726565204e4654732068617665206265656e206d696e7465642e0000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74205175616e746974792073686f756c64206265206d6f72652074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616e277420657863656564206d6f7265207468616e20313000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564206672656500000000000000000000000000600082015250565b7f596f7520617265206e6f74205768697465204c697374656420466f722046726560008201527f65204d696e740000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820696e20796f75722077616c6c6574000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6520416464726573732063616e206d696e742031204e46547320696e204660008201527f726565204d696e74000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632053616c65206973206e6f742041637469766500000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d6178203130204e4654732063616e206265206d696e74656420696e2061207360008201527f696e676c65205472780000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792073686f756c64206265206d6f7265207468616e20300000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564207468652071756f74610000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6158b781614c24565b81146158c257600080fd5b50565b6158ce81614c36565b81146158d957600080fd5b50565b6158e581614c42565b81146158f057600080fd5b50565b6158fc81614caa565b811461590757600080fd5b5056fea2646970667358221220bab3f6e02075a774fdb2c7985ad8588f3bac6000aa4a4166fcceafabec456fc264736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d56544e67315643756d6447373654614d435a63687a46316957506173345875383375464a4e6e34646d5070722f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d65754e506a4478795476353952623867707870583634704c6e4e565a69636f5550716361516d4754326f66392f

Deployed Bytecode

0x6080604052600436106102305760003560e01c806370a082311161012e578063b88d4fde116100ab578063d04950a11161006f578063d04950a114610828578063d7224ba014610853578063dc33e6811461087e578063e985e9c5146108bb578063f2fde38b146108f857610230565b8063b88d4fde14610745578063bd0a84391461076e578063c87b56dd14610785578063cc47a40b146107c2578063cca3f458146107eb57610230565b806395d89b41116100f257806395d89b4114610695578063a0712d68146106c0578063a22cb465146106dc578063ac44600214610705578063af7b26e91461071c57610230565b806370a08231146105ae578063715018a6146105eb5780638d859f3e146106025780638da5cb5b1461062d5780639231ab2a1461065857610230565b80632f745c59116101bc57806355f804b31161018057806355f804b3146104cb5780635c37809d146104f457806362c6f7b91461051d5780636352211e1461054857806369ba1a751461058557610230565b80632f745c59146103d45780633fd173661461041157806342842e0e1461043a5780634e69d560146104635780634f6ccce71461048e57610230565b8063095ea7b311610203578063095ea7b314610303578063180e548e1461032c57806318160ddd14610355578063200d2ed21461038057806323b872dd146103ab57610230565b806301ffc9a714610235578063050225ea1461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613cc0565b610921565b60405161026991906144ad565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613c33565b610a6b565b005b3480156102a757600080fd5b506102b0610baf565b6040516102bd91906144c8565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613d63565b610c41565b6040516102fa9190614446565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613c33565b610cc6565b005b34801561033857600080fd5b50610353600480360381019061034e9190613c73565b610ddf565b005b34801561036157600080fd5b5061036a610f00565b60405161037791906149a5565b60405180910390f35b34801561038c57600080fd5b50610395610f15565b6040516103a291906149a5565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190613b1d565b610f1b565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613c33565b610f2b565b60405161040891906149a5565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613d63565b611129565b005b34801561044657600080fd5b50610461600480360381019061045c9190613b1d565b6111af565b005b34801561046f57600080fd5b506104786111cf565b60405161048591906149a5565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613d63565b6111d9565b6040516104c291906149a5565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190613d1a565b61122c565b005b34801561050057600080fd5b5061051b60048036038101906105169190613d1a565b6112c2565b005b34801561052957600080fd5b50610532611358565b60405161053f91906144ad565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190613d63565b61136b565b60405161057c9190614446565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613d63565b611381565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190613ab0565b61144b565b6040516105e291906149a5565b60405180910390f35b3480156105f757600080fd5b50610600611534565b005b34801561060e57600080fd5b506106176115bc565b60405161062491906149a5565b60405180910390f35b34801561063957600080fd5b506106426115c2565b60405161064f9190614446565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190613d63565b6115eb565b60405161068c919061498a565b60405180910390f35b3480156106a157600080fd5b506106aa611603565b6040516106b791906144c8565b60405180910390f35b6106da60048036038101906106d59190613d63565b611695565b005b3480156106e857600080fd5b5061070360048036038101906106fe9190613bf3565b611bd5565b005b34801561071157600080fd5b5061071a611d56565b005b34801561072857600080fd5b50610743600480360381019061073e9190613d63565b611ed7565b005b34801561075157600080fd5b5061076c60048036038101906107679190613b70565b611f5d565b005b34801561077a57600080fd5b50610783611fb9565b005b34801561079157600080fd5b506107ac60048036038101906107a79190613d63565b612061565b6040516107b991906144c8565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190613c33565b6121b0565b005b3480156107f757600080fd5b50610812600480360381019061080d9190613ab0565b6122f2565b60405161081f91906144ad565b60405180910390f35b34801561083457600080fd5b5061083d612348565b60405161084a91906149a5565b60405180910390f35b34801561085f57600080fd5b5061086861234e565b60405161087591906149a5565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613ab0565b612354565b6040516108b291906149a5565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613add565b612366565b6040516108ef91906144ad565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613ab0565b6123fa565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a645750610a63826124f2565b5b9050919050565b610a7361255c565b73ffffffffffffffffffffffffffffffffffffffff16610a916115c2565b73ffffffffffffffffffffffffffffffffffffffff1614610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade9061476a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000270f81610b11610f00565b610b1b9190614adb565b1115610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906145ca565b60405180910390fd5b600a54811115610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b989061460a565b60405180910390fd5b610bab8282612564565b5050565b606060028054610bbe90614d34565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90614d34565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c82612582565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c829061494a565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cd18261136b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d399061480a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6161255c565b73ffffffffffffffffffffffffffffffffffffffff161480610d905750610d8f81610d8a61255c565b612366565b5b610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061466a565b60405180910390fd5b610dda838383612590565b505050565b610de761255c565b73ffffffffffffffffffffffffffffffffffffffff16610e056115c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061476a565b60405180910390fd5b60005b82829050811015610efb576001600c6000858585818110610e8257610e81614e9e565b5b9050602002016020810190610e979190613ab0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ef390614d97565b915050610e5e565b505050565b600060018054610f109190614bf0565b905090565b60105481565b610f26838383612642565b505050565b6000610f368361144b565b8210610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906144ea565b60405180910390fd5b6000610f81610f00565b905060008060005b838110156110e7576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461107b57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110d357868414156110c4578195505050505050611123565b83806110cf90614d97565b9450505b5080806110df90614d97565b915050610f89565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906148ca565b60405180910390fd5b92915050565b61113161255c565b73ffffffffffffffffffffffffffffffffffffffff1661114f6115c2565b73ffffffffffffffffffffffffffffffffffffffff16146111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c9061476a565b60405180910390fd5b80600b8190555050565b6111ca83838360405180602001604052806000815250611f5d565b505050565b6000601054905090565b60006111e3610f00565b8210611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b906145aa565b60405180910390fd5b819050919050565b61123461255c565b73ffffffffffffffffffffffffffffffffffffffff166112526115c2565b73ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f9061476a565b60405180910390fd5b80600e90805190602001906112be929190613834565b5050565b6112ca61255c565b73ffffffffffffffffffffffffffffffffffffffff166112e86115c2565b73ffffffffffffffffffffffffffffffffffffffff161461133e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113359061476a565b60405180910390fd5b80600f9080519060200190611354929190613834565b5050565b600d60009054906101000a900460ff1681565b600061137682612bfb565b600001519050919050565b61138961255c565b73ffffffffffffffffffffffffffffffffffffffff166113a76115c2565b73ffffffffffffffffffffffffffffffffffffffff16146113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f49061476a565b60405180910390fd5b80601081905550600181141561141a576000600b81905550611448565b60028114156114375767012dfb0cb5e88000600b81905550611447565b67016345785d8a0000600b819055505b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39061468a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61153c61255c565b73ffffffffffffffffffffffffffffffffffffffff1661155a6115c2565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a79061476a565b60405180910390fd5b6115ba6000612dfe565b565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f36138ba565b6115fc82612bfb565b9050919050565b60606003805461161290614d34565b80601f016020809104026020016040519081016040528092919081815260200182805461163e90614d34565b801561168b5780601f106116605761010080835404028352916020019161168b565b820191906000526020600020905b81548152906001019060200180831161166e57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061464a565b60405180910390fd5b6001601054141561188257600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661179a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611791906146ca565b60405180910390fd5b607a6117a4610f00565b106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db9061454a565b60405180910390fd5b60016117ef33612354565b1061182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906146aa565b60405180910390fd5b60018114611872576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118699061472a565b60405180910390fd5b61187d336001612564565b611bd2565b60026010541415611a3457600081116118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c79061458a565b60405180910390fd5b6004811115611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b9061450a565b60405180910390fd5b600561191f33612354565b1115611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906148ea565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000270f8161198a610f00565b6119949190614adb565b11156119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc906145ca565b60405180910390fd5b80600b546119e39190614b62565b341015611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c906146ea565b60405180910390fd5b611a2f3382612564565b611bd1565b600360105414611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a709061474a565b60405180910390fd5b60008111611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab39061458a565b60405180910390fd5b600a54811115611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af8906147ea565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000270f81611b2b610f00565b611b359190614adb565b1115611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d906145ca565b60405180910390fd5b80600b54611b849190614b62565b341015611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd906146ea565b60405180910390fd5b611bd03382612564565b5b5b50565b611bdd61255c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906147aa565b60405180910390fd5b8060076000611c5861255c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d0561255c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d4a91906144ad565b60405180910390a35050565b611d5e61255c565b73ffffffffffffffffffffffffffffffffffffffff16611d7c6115c2565b73ffffffffffffffffffffffffffffffffffffffff1614611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc99061476a565b60405180910390fd5b60026009541415611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f9061490a565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611e4690614431565b60006040518083038185875af1925050503d8060008114611e83576040519150601f19603f3d011682016040523d82523d6000602084013e611e88565b606091505b5050905080611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec39061482a565b60405180910390fd5b506001600981905550565b611edf61255c565b73ffffffffffffffffffffffffffffffffffffffff16611efd6115c2565b73ffffffffffffffffffffffffffffffffffffffff1614611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a9061476a565b60405180910390fd5b80600a8190555050565b611f68848484612642565b611f7484848484612ec2565b611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa9061484a565b60405180910390fd5b50505050565b611fc161255c565b73ffffffffffffffffffffffffffffffffffffffff16611fdf6115c2565b73ffffffffffffffffffffffffffffffffffffffff1614612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c9061476a565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b606061206c82612582565b6120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061478a565b60405180910390fd5b600d60009054906101000a900460ff161561211d5760006120ca613059565b905060008151116120ea5760405180602001604052806000815250612115565b806120f4846130eb565b604051602001612105929190614402565b6040516020818303038152906040525b9150506121ab565b600f805461212a90614d34565b80601f016020809104026020016040519081016040528092919081815260200182805461215690614d34565b80156121a35780601f10612178576101008083540402835291602001916121a3565b820191906000526020600020905b81548152906001019060200180831161218657829003601f168201915b505050505090505b919050565b6121b861255c565b73ffffffffffffffffffffffffffffffffffffffff166121d66115c2565b73ffffffffffffffffffffffffffffffffffffffff161461222c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122239061476a565b60405180910390fd5b6000811161226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906148aa565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000270f81612299610f00565b6122a39190614adb565b11156122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db906145ca565b60405180910390fd5b6122ee8282612564565b5050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b60085481565b600061235f8261324c565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61240261255c565b73ffffffffffffffffffffffffffffffffffffffff166124206115c2565b73ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d9061476a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd9061452a565b60405180910390fd5b6124ef81612dfe565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61257e828260405180602001604052806000815250613335565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061264d82612bfb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661267461255c565b73ffffffffffffffffffffffffffffffffffffffff1614806126d0575061269961255c565b73ffffffffffffffffffffffffffffffffffffffff166126b884610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b806126ec57506126eb82600001516126e661255c565b612366565b5b90508061272e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612725906147ca565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127979061470a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612807906145ea565b60405180910390fd5b61281d8585856001613815565b61282d6000848460000151612590565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661289b9190614bbc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661293f9190614a95565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612a459190614adb565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b8b57612abb81612582565b15612b8a576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf3868686600161381b565b505050505050565b612c036138ba565b612c0c82612582565b612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c429061456a565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8310612caf5760017f000000000000000000000000000000000000000000000000000000000000000a84612ca29190614bf0565b612cac9190614adb565b90505b60008390505b818110612dbd576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612da957809350505050612df9565b508080612db590614d0a565b915050612cb5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df09061492a565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612ee38473ffffffffffffffffffffffffffffffffffffffff16613821565b1561304c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f0c61255c565b8786866040518563ffffffff1660e01b8152600401612f2e9493929190614461565b602060405180830381600087803b158015612f4857600080fd5b505af1925050508015612f7957506040513d601f19601f82011682018060405250810190612f769190613ced565b60015b612ffc573d8060008114612fa9576040519150601f19603f3d011682016040523d82523d6000602084013e612fae565b606091505b50600081511415612ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612feb9061484a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613051565b600190505b949350505050565b6060600e805461306890614d34565b80601f016020809104026020016040519081016040528092919081815260200182805461309490614d34565b80156130e15780601f106130b6576101008083540402835291602001916130e1565b820191906000526020600020905b8154815290600101906020018083116130c457829003601f168201915b5050505050905090565b60606000821415613133576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613247565b600082905060005b6000821461316557808061314e90614d97565b915050600a8261315e9190614b31565b915061313b565b60008167ffffffffffffffff81111561318157613180614ecd565b5b6040519080825280601f01601f1916602001820160405280156131b35781602001600182028036833780820191505090505b5090505b60008514613240576001826131cc9190614bf0565b9150600a856131db9190614de0565b60306131e79190614adb565b60f81b8183815181106131fd576131fc614e9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132399190614b31565b94506131b7565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b49061462a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a39061488a565b60405180910390fd5b6133b581612582565b156133f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ec9061486a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344f9061496a565b60405180910390fd5b6134656000858386613815565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516135629190614a95565b6fffffffffffffffffffffffffffffffff1681526020018583602001516135899190614a95565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137f857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137986000888488612ec2565b6137d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ce9061484a565b60405180910390fd5b81806137e290614d97565b92505080806137f090614d97565b915050613727565b508060018190555061380d600087858861381b565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461384090614d34565b90600052602060002090601f01602090048101928261386257600085556138a9565b82601f1061387b57805160ff19168380011785556138a9565b828001600101855582156138a9579182015b828111156138a857825182559160200191906001019061388d565b5b5090506138b691906138f4565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561390d5760008160009055506001016138f5565b5090565b600061392461391f846149e5565b6149c0565b9050828152602081018484840111156139405761393f614f0b565b5b61394b848285614cc8565b509392505050565b600061396661396184614a16565b6149c0565b90508281526020810184848401111561398257613981614f0b565b5b61398d848285614cc8565b509392505050565b6000813590506139a4816158ae565b92915050565b60008083601f8401126139c0576139bf614f01565b5b8235905067ffffffffffffffff8111156139dd576139dc614efc565b5b6020830191508360208202830111156139f9576139f8614f06565b5b9250929050565b600081359050613a0f816158c5565b92915050565b600081359050613a24816158dc565b92915050565b600081519050613a39816158dc565b92915050565b600082601f830112613a5457613a53614f01565b5b8135613a64848260208601613911565b91505092915050565b600082601f830112613a8257613a81614f01565b5b8135613a92848260208601613953565b91505092915050565b600081359050613aaa816158f3565b92915050565b600060208284031215613ac657613ac5614f15565b5b6000613ad484828501613995565b91505092915050565b60008060408385031215613af457613af3614f15565b5b6000613b0285828601613995565b9250506020613b1385828601613995565b9150509250929050565b600080600060608486031215613b3657613b35614f15565b5b6000613b4486828701613995565b9350506020613b5586828701613995565b9250506040613b6686828701613a9b565b9150509250925092565b60008060008060808587031215613b8a57613b89614f15565b5b6000613b9887828801613995565b9450506020613ba987828801613995565b9350506040613bba87828801613a9b565b925050606085013567ffffffffffffffff811115613bdb57613bda614f10565b5b613be787828801613a3f565b91505092959194509250565b60008060408385031215613c0a57613c09614f15565b5b6000613c1885828601613995565b9250506020613c2985828601613a00565b9150509250929050565b60008060408385031215613c4a57613c49614f15565b5b6000613c5885828601613995565b9250506020613c6985828601613a9b565b9150509250929050565b60008060208385031215613c8a57613c89614f15565b5b600083013567ffffffffffffffff811115613ca857613ca7614f10565b5b613cb4858286016139aa565b92509250509250929050565b600060208284031215613cd657613cd5614f15565b5b6000613ce484828501613a15565b91505092915050565b600060208284031215613d0357613d02614f15565b5b6000613d1184828501613a2a565b91505092915050565b600060208284031215613d3057613d2f614f15565b5b600082013567ffffffffffffffff811115613d4e57613d4d614f10565b5b613d5a84828501613a6d565b91505092915050565b600060208284031215613d7957613d78614f15565b5b6000613d8784828501613a9b565b91505092915050565b613d9981614c24565b82525050565b613da881614c24565b82525050565b613db781614c36565b82525050565b6000613dc882614a47565b613dd28185614a5d565b9350613de2818560208601614cd7565b613deb81614f1a565b840191505092915050565b6000613e0182614a52565b613e0b8185614a79565b9350613e1b818560208601614cd7565b613e2481614f1a565b840191505092915050565b6000613e3a82614a52565b613e448185614a8a565b9350613e54818560208601614cd7565b80840191505092915050565b6000613e6d602283614a79565b9150613e7882614f2b565b604082019050919050565b6000613e90602c83614a79565b9150613e9b82614f7a565b604082019050919050565b6000613eb3602683614a79565b9150613ebe82614fc9565b604082019050919050565b6000613ed6601b83614a79565b9150613ee182615018565b602082019050919050565b6000613ef9602a83614a79565b9150613f0482615041565b604082019050919050565b6000613f1c602383614a79565b9150613f2782615090565b604082019050919050565b6000613f3f602383614a79565b9150613f4a826150df565b604082019050919050565b6000613f62601283614a79565b9150613f6d8261512e565b602082019050919050565b6000613f85602583614a79565b9150613f9082615157565b604082019050919050565b6000613fa8601983614a79565b9150613fb3826151a6565b602082019050919050565b6000613fcb603183614a79565b9150613fd6826151cf565b604082019050919050565b6000613fee601e83614a79565b9150613ff98261521e565b602082019050919050565b6000614011603983614a79565b915061401c82615247565b604082019050919050565b6000614034602b83614a79565b915061403f82615296565b604082019050919050565b6000614057601383614a79565b9150614062826152e5565b602082019050919050565b600061407a602683614a79565b91506140858261530e565b604082019050919050565b600061409d601d83614a79565b91506140a88261535d565b602082019050919050565b60006140c0602683614a79565b91506140cb82615386565b604082019050919050565b60006140e3600583614a8a565b91506140ee826153d5565b600582019050919050565b6000614106602883614a79565b9150614111826153fe565b604082019050919050565b6000614129601983614a79565b91506141348261544d565b602082019050919050565b600061414c602083614a79565b915061415782615476565b602082019050919050565b600061416f602f83614a79565b915061417a8261549f565b604082019050919050565b6000614192601a83614a79565b915061419d826154ee565b602082019050919050565b60006141b5603283614a79565b91506141c082615517565b604082019050919050565b60006141d8602983614a79565b91506141e382615566565b604082019050919050565b60006141fb602283614a79565b9150614206826155b5565b604082019050919050565b600061421e600083614a6e565b915061422982615604565b600082019050919050565b6000614241601083614a79565b915061424c82615607565b602082019050919050565b6000614264603383614a79565b915061426f82615630565b604082019050919050565b6000614287601d83614a79565b91506142928261567f565b602082019050919050565b60006142aa602183614a79565b91506142b5826156a8565b604082019050919050565b60006142cd601e83614a79565b91506142d8826156f7565b602082019050919050565b60006142f0602e83614a79565b91506142fb82615720565b604082019050919050565b6000614313601883614a79565b915061431e8261576f565b602082019050919050565b6000614336601f83614a79565b915061434182615798565b602082019050919050565b6000614359602f83614a79565b9150614364826157c1565b604082019050919050565b600061437c602d83614a79565b915061438782615810565b604082019050919050565b600061439f602283614a79565b91506143aa8261585f565b604082019050919050565b6040820160008201516143cb6000850182613d90565b5060208201516143de60208501826143f3565b50505050565b6143ed81614caa565b82525050565b6143fc81614cb4565b82525050565b600061440e8285613e2f565b915061441a8284613e2f565b9150614425826140d6565b91508190509392505050565b600061443c82614211565b9150819050919050565b600060208201905061445b6000830184613d9f565b92915050565b60006080820190506144766000830187613d9f565b6144836020830186613d9f565b61449060408301856143e4565b81810360608301526144a28184613dbd565b905095945050505050565b60006020820190506144c26000830184613dae565b92915050565b600060208201905081810360008301526144e28184613df6565b905092915050565b6000602082019050818103600083015261450381613e60565b9050919050565b6000602082019050818103600083015261452381613e83565b9050919050565b6000602082019050818103600083015261454381613ea6565b9050919050565b6000602082019050818103600083015261456381613ec9565b9050919050565b6000602082019050818103600083015261458381613eec565b9050919050565b600060208201905081810360008301526145a381613f0f565b9050919050565b600060208201905081810360008301526145c381613f32565b9050919050565b600060208201905081810360008301526145e381613f55565b9050919050565b6000602082019050818103600083015261460381613f78565b9050919050565b6000602082019050818103600083015261462381613f9b565b9050919050565b6000602082019050818103600083015261464381613fbe565b9050919050565b6000602082019050818103600083015261466381613fe1565b9050919050565b6000602082019050818103600083015261468381614004565b9050919050565b600060208201905081810360008301526146a381614027565b9050919050565b600060208201905081810360008301526146c38161404a565b9050919050565b600060208201905081810360008301526146e38161406d565b9050919050565b6000602082019050818103600083015261470381614090565b9050919050565b60006020820190508181036000830152614723816140b3565b9050919050565b60006020820190508181036000830152614743816140f9565b9050919050565b600060208201905081810360008301526147638161411c565b9050919050565b600060208201905081810360008301526147838161413f565b9050919050565b600060208201905081810360008301526147a381614162565b9050919050565b600060208201905081810360008301526147c381614185565b9050919050565b600060208201905081810360008301526147e3816141a8565b9050919050565b60006020820190508181036000830152614803816141cb565b9050919050565b60006020820190508181036000830152614823816141ee565b9050919050565b6000602082019050818103600083015261484381614234565b9050919050565b6000602082019050818103600083015261486381614257565b9050919050565b600060208201905081810360008301526148838161427a565b9050919050565b600060208201905081810360008301526148a38161429d565b9050919050565b600060208201905081810360008301526148c3816142c0565b9050919050565b600060208201905081810360008301526148e3816142e3565b9050919050565b6000602082019050818103600083015261490381614306565b9050919050565b6000602082019050818103600083015261492381614329565b9050919050565b600060208201905081810360008301526149438161434c565b9050919050565b600060208201905081810360008301526149638161436f565b9050919050565b6000602082019050818103600083015261498381614392565b9050919050565b600060408201905061499f60008301846143b5565b92915050565b60006020820190506149ba60008301846143e4565b92915050565b60006149ca6149db565b90506149d68282614d66565b919050565b6000604051905090565b600067ffffffffffffffff821115614a00576149ff614ecd565b5b614a0982614f1a565b9050602081019050919050565b600067ffffffffffffffff821115614a3157614a30614ecd565b5b614a3a82614f1a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614aa082614c6e565b9150614aab83614c6e565b9250826fffffffffffffffffffffffffffffffff03821115614ad057614acf614e11565b5b828201905092915050565b6000614ae682614caa565b9150614af183614caa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b2657614b25614e11565b5b828201905092915050565b6000614b3c82614caa565b9150614b4783614caa565b925082614b5757614b56614e40565b5b828204905092915050565b6000614b6d82614caa565b9150614b7883614caa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bb157614bb0614e11565b5b828202905092915050565b6000614bc782614c6e565b9150614bd283614c6e565b925082821015614be557614be4614e11565b5b828203905092915050565b6000614bfb82614caa565b9150614c0683614caa565b925082821015614c1957614c18614e11565b5b828203905092915050565b6000614c2f82614c8a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614cf5578082015181840152602081019050614cda565b83811115614d04576000848401525b50505050565b6000614d1582614caa565b91506000821415614d2957614d28614e11565b5b600182039050919050565b60006002820490506001821680614d4c57607f821691505b60208210811415614d6057614d5f614e6f565b5b50919050565b614d6f82614f1a565b810181811067ffffffffffffffff82111715614d8e57614d8d614ecd565b5b80604052505050565b6000614da282614caa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614dd557614dd4614e11565b5b600182019050919050565b6000614deb82614caa565b9150614df683614caa565b925082614e0657614e05614e40565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6520416464726573732063616e206d696e74207570746f2034204e46547360008201527f20696e205072652053616c650000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46726565204e4654732068617665206265656e206d696e7465642e0000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74205175616e746974792073686f756c64206265206d6f72652074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616e277420657863656564206d6f7265207468616e20313000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564206672656500000000000000000000000000600082015250565b7f596f7520617265206e6f74205768697465204c697374656420466f722046726560008201527f65204d696e740000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820696e20796f75722077616c6c6574000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6520416464726573732063616e206d696e742031204e46547320696e204660008201527f726565204d696e74000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632053616c65206973206e6f742041637469766500000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d6178203130204e4654732063616e206265206d696e74656420696e2061207360008201527f696e676c65205472780000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792073686f756c64206265206d6f7265207468616e20300000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564207468652071756f74610000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6158b781614c24565b81146158c257600080fd5b50565b6158ce81614c36565b81146158d957600080fd5b50565b6158e581614c42565b81146158f057600080fd5b50565b6158fc81614caa565b811461590757600080fd5b5056fea2646970667358221220bab3f6e02075a774fdb2c7985ad8588f3bac6000aa4a4166fcceafabec456fc264736f6c63430008070033

Deployed Bytecode Sourcemap

19852:5143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11169:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24446:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12741:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13942:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13558:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22909:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10137:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20474:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14625:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10420:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24233:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14772:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24915:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10238:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23226:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23121:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20366:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12618:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24674:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11544:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2626:103;;;;;;;;;;;;;:::i;:::-;;20052:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2403:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23551:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12840:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21021:1314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14151:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23704:181;;;;;;;;;;;;;:::i;:::-;;24337:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14934:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24144:83;;;;;;;;;;;;;:::i;:::-;;22342:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23891:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22769:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19955:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18064:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23440:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14432:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2738:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11169:370;11296:4;11341:25;11326:40;;;:11;:40;;;;:99;;;;11392:33;11377:48;;;:11;:48;;;;11326:99;:160;;;;11451:35;11436:50;;;:11;:50;;;;11326:160;:207;;;;11497:36;11521:11;11497:23;:36::i;:::-;11326:207;11312:221;;11169:370;;;:::o;24446:220::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24534:14:::1;24529:1;24513:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;24505:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24591:17;;24586:1;:22;;24578:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24645:15;24655:1;24658;24645:9;:15::i;:::-;24446:220:::0;;:::o;12741:94::-;12795:13;12824:5;12817:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12741:94;:::o;13942:204::-;14010:7;14034:16;14042:7;14034;:16::i;:::-;14026:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14116:15;:24;14132:7;14116:24;;;;;;;;;;;;;;;;;;;;;14109:31;;13942:204;;;:::o;13558:379::-;13627:13;13643:24;13659:7;13643:15;:24::i;:::-;13627:40;;13688:5;13682:11;;:2;:11;;;;13674:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;13773:5;13757:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13782:37;13799:5;13806:12;:10;:12::i;:::-;13782:16;:37::i;:::-;13757:62;13741:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;13903:28;13912:2;13916:7;13925:5;13903:8;:28::i;:::-;13620:317;13558:379;;:::o;22909:204::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23023:6:::1;23019:88;23034:6;;:13;;23032:1;:15;23019:88;;;23103:4;23062:27;:38;23090:6;;23097:1;23090:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23062:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;23048:3;;;;;:::i;:::-;;;;23019:88;;;;22909:204:::0;;:::o;10137:96::-;10190:7;10226:1;10213:12;;:14;;;;:::i;:::-;10206:21;;10137:96;:::o;20474:22::-;;;;:::o;14625:142::-;14733:28;14743:4;14749:2;14753:7;14733:9;:28::i;:::-;14625:142;;;:::o;10420:744::-;10529:7;10564:16;10574:5;10564:9;:16::i;:::-;10556:5;:24;10548:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10626:22;10651:13;:11;:13::i;:::-;10626:38;;10671:19;10701:25;10751:9;10746:350;10770:14;10766:1;:18;10746:350;;;10800:31;10834:11;:14;10846:1;10834:14;;;;;;;;;;;10800:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10887:1;10861:28;;:9;:14;;;:28;;;10857:89;;10922:9;:14;;;10902:34;;10857:89;10979:5;10958:26;;:17;:26;;;10954:135;;;11016:5;11001:11;:20;10997:59;;;11043:1;11036:8;;;;;;;;;10997:59;11066:13;;;;;:::i;:::-;;;;10954:135;10791:305;10786:3;;;;;:::i;:::-;;;;10746:350;;;;11102:56;;;;;;;;;;:::i;:::-;;;;;;;;10420:744;;;;;:::o;24233:98::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24316:9:::1;24308:5;:17;;;;24233:98:::0;:::o;14772:157::-;14884:39;14901:4;14907:2;14911:7;14884:39;;;;;;;;;;;;:16;:39::i;:::-;14772:157;;;:::o;24915:73::-;24955:4;24976:6;;24969:13;;24915:73;:::o;10238:177::-;10305:7;10337:13;:11;:13::i;:::-;10329:5;:21;10321:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10404:5;10397:12;;10238:177;;;:::o;23226:98::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23311:7:::1;23295:13;:23;;;;;;;;;;;;:::i;:::-;;23226:98:::0;:::o;23121:99::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23211:3:::1;23193:15;:21;;;;;;;;;;;;:::i;:::-;;23121:99:::0;:::o;20366:29::-;;;;;;;;;;;;;:::o;12618:118::-;12682:7;12705:20;12717:7;12705:11;:20::i;:::-;:25;;;12698:32;;12618:118;;;:::o;24674:235::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24739:1:::1;24730:6;:10;;;;24755:1;24752;:4;24749:157;;;24776:7;24770:5;:13;;;;24749:157;;;24813:1;24810;:4;24806:100;;;24834:11;24828:5;:17;;;;24806:100;;;24886:10;24880:5;:16;;;;24806:100;24749:157;24674:235:::0;:::o;11544:211::-;11608:7;11649:1;11632:19;;:5;:19;;;;11624:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;11721:12;:19;11734:5;11721:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;11713:36;;11706:43;;11544:211;;;:::o;2626:103::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2691:30:::1;2718:1;2691:18;:30::i;:::-;2626:103::o:0;20052:34::-;;;;:::o;2403:87::-;2449:7;2476:6;;;;;;;;;;;2469:13;;2403:87;:::o;23551:147::-;23632:21;;:::i;:::-;23672:20;23684:7;23672:11;:20::i;:::-;23665:27;;23551:147;;;:::o;12840:98::-;12896:13;12925:7;12918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12840:98;:::o;21021:1314::-;20958:10;20945:23;;:9;:23;;;20937:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21103:1:::1;21093:6;;:11;21090:1238;;;21120:27;:39;21148:10;21120:39;;;;;;;;;;;;;;;;;;;;;;;;;21112:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;21233:3;21217:13;:11;:13::i;:::-;:19;21209:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21310:1;21283:24;21296:10;21283:12;:24::i;:::-;:28;21275:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21365:1;21353:8;:13;21345:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21418:24;21428:10;21440:1;21418:9;:24::i;:::-;21090:1238;;;21476:1;21466:6;;:11;21462:866;;;21504:1;21493:8;:12;21485:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21571:1;21559:8;:13;;21551:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21663:1;21635:24;21648:10;21635:12;:24::i;:::-;:29;;21627:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21739:14;21727:8;21711:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;21703:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21812:8;21804:5;;:16;;;;:::i;:::-;21791:9;:29;;21783:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21861:31;21871:10;21883:8;21861:9;:31::i;:::-;21462:866;;;21936:1;21926:6;;:11;21918:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21993:1;21982:8;:12;21974:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;22060:17;;22048:8;:29;;22040:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;22165:14;22153:8;22137:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;22129:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22238:8;22230:5;;:16;;;;:::i;:::-;22217:9;:29;;22209:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22287:31;22297:10;22309:8;22287:9;:31::i;:::-;21462:866;21090:1238;21021:1314:::0;:::o;14151:274::-;14254:12;:10;:12::i;:::-;14242:24;;:8;:24;;;;14234:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14351:8;14306:18;:32;14325:12;:10;:12::i;:::-;14306:32;;;;;;;;;;;;;;;:42;14339:8;14306:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;14400:8;14371:48;;14386:12;:10;:12::i;:::-;14371:48;;;14410:8;14371:48;;;;;;:::i;:::-;;;;;;;;14151:274;;:::o;23704:181::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;185:1:::1;331:7;;:19;;323:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;185:1;392:7;:18;;;;23769:12:::2;23787:10;:15;;23810:21;23787:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23768:68;;;23851:7;23843:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;23761:124;141:1:::1;435:7;:22;;;;23704:181::o:0;24337:102::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24432:1:::1;24412:17;:21;;;;24337:102:::0;:::o;14934:311::-;15071:28;15081:4;15087:2;15091:7;15071:9;:28::i;:::-;15122:48;15145:4;15151:2;15155:7;15164:5;15122:22;:48::i;:::-;15106:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;14934:311;;;;:::o;24144:83::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24212:9:::1;;;;;;;;;;;24211:10;24199:9;;:22;;;;;;;;;;;;;;;;;;24144:83::o:0;22342:421::-;22415:13;22445:16;22453:7;22445;:16::i;:::-;22437:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22522:9;;;;;;;;;;;22519:239;;;22539:21;22563:10;:8;:10::i;:::-;22539:34;;22618:1;22600:7;22594:21;:25;:112;;;;;;;;;;;;;;;;;22655:7;22664:18;:7;:16;:18::i;:::-;22638:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22594:112;22580:126;;;;;22519:239;22735:15;22728:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22342:421;;;;:::o;23891:247::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23985:1:::1;23974:8;:12;23966:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24061:14;24049:8;24033:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;24025:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24103:29;24113:8;24123;24103:9;:29::i;:::-;23891:247:::0;;:::o;22769:130::-;22839:4;22859:27;:34;22887:5;22859:34;;;;;;;;;;;;;;;;;;;;;;;;;22852:41;;22769:130;;;:::o;19955:37::-;;;;:::o;18064:43::-;;;;:::o;23440:107::-;23498:7;23521:20;23535:5;23521:13;:20::i;:::-;23514:27;;23440:107;;;:::o;14432:186::-;14554:4;14577:18;:25;14596:5;14577:25;;;;;;;;;;;;;;;:35;14603:8;14577:35;;;;;;;;;;;;;;;;;;;;;;;;;14570:42;;14432:186;;;;:::o;2738:201::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:1:::1;2827:22;;:8;:22;;;;2819:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2903:28;2922:8;2903:18;:28::i;:::-;2738:201:::0;:::o;7056:157::-;7141:4;7180:25;7165:40;;;:11;:40;;;;7158:47;;7056:157;;;:::o;1946:98::-;1999:7;2026:10;2019:17;;1946:98;:::o;15361:::-;15426:27;15436:2;15440:8;15426:27;;;;;;;;;;;;:9;:27::i;:::-;15361:98;;:::o;15250:105::-;15307:4;15337:12;;15327:7;:22;15320:29;;15250:105;;;:::o;17886:172::-;18010:2;17983:15;:24;17999:7;17983:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;18044:7;18040:2;18024:28;;18033:5;18024:28;;;;;;;;;;;;17886:172;;;:::o;16621:1260::-;16718:35;16756:20;16768:7;16756:11;:20::i;:::-;16718:58;;16785:22;16827:13;:18;;;16811:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;16880:12;:10;:12::i;:::-;16856:36;;:20;16868:7;16856:11;:20::i;:::-;:36;;;16811:81;:142;;;;16903:50;16920:13;:18;;;16940:12;:10;:12::i;:::-;16903:16;:50::i;:::-;16811:142;16785:169;;16979:17;16963:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;17111:4;17089:26;;:13;:18;;;:26;;;17073:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;17200:1;17186:16;;:2;:16;;;;17178:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;17253:43;17275:4;17281:2;17285:7;17294:1;17253:21;:43::i;:::-;17304:49;17321:1;17325:7;17334:13;:18;;;17304:8;:49::i;:::-;17392:1;17362:12;:18;17375:4;17362:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17428:1;17400:12;:16;17413:2;17400:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17459:43;;;;;;;;17474:2;17459:43;;;;;;17485:15;17459:43;;;;;17436:11;:20;17448:7;17436:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17510:19;17542:1;17532:7;:11;;;;:::i;:::-;17510:33;;17595:1;17554:43;;:11;:24;17566:11;17554:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;17550:236;;;17612:20;17620:11;17612:7;:20::i;:::-;17608:171;;;17672:97;;;;;;;;17699:13;:18;;;17672:97;;;;;;17730:13;:28;;;17672:97;;;;;17645:11;:24;17657:11;17645:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17608:171;17550:236;17818:7;17814:2;17799:27;;17808:4;17799:27;;;;;;;;;;;;17833:42;17854:4;17860:2;17864:7;17873:1;17833:20;:42::i;:::-;16711:1170;;;16621:1260;;;:::o;12007:606::-;12083:21;;:::i;:::-;12124:16;12132:7;12124;:16::i;:::-;12116:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12196:26;12244:12;12233:7;:23;12229:93;;12313:1;12298:12;12288:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;12267:47;;12229:93;12335:12;12350:7;12335:22;;12330:212;12367:18;12359:4;:26;12330:212;;12404:31;12438:11;:17;12450:4;12438:17;;;;;;;;;;;12404:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12494:1;12468:28;;:9;:14;;;:28;;;12464:71;;12516:9;12509:16;;;;;;;12464:71;12395:147;12387:6;;;;;:::i;:::-;;;;12330:212;;;;12550:57;;;;;;;;;;:::i;:::-;;;;;;;;12007:606;;;;:::o;2948:191::-;3022:16;3041:6;;;;;;;;;;;3022:25;;3067:8;3058:6;;:17;;;;;;;;;;;;;;;;;;3122:8;3091:40;;3112:8;3091:40;;;;;;;;;;;;3011:128;2948:191;:::o;18864:690::-;19001:4;19018:15;:2;:13;;;:15::i;:::-;19014:535;;;19073:2;19057:36;;;19094:12;:10;:12::i;:::-;19108:4;19114:7;19123:5;19057:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19044:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19305:1;19288:6;:13;:18;19284:215;;;19321:61;;;;;;;;;;:::i;:::-;;;;;;;;19284:215;19467:6;19461:13;19452:6;19448:2;19444:15;19437:38;19044:464;19189:45;;;19179:55;;;:6;:55;;;;19172:62;;;;;19014:535;19537:4;19530:11;;18864:690;;;;;;;:::o;23328:108::-;23388:13;23417;23410:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23328:108;:::o;563:533::-;619:13;659:1;650:5;:10;646:53;;;677:10;;;;;;;;;;;;;;;;;;;;;646:53;709:12;724:5;709:20;;740:14;765:78;780:1;772:4;:9;765:78;;798:8;;;;;:::i;:::-;;;;829:2;821:10;;;;;:::i;:::-;;;765:78;;;853:19;885:6;875:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;853:39;;903:154;919:1;910:5;:10;903:154;;947:1;937:11;;;;;:::i;:::-;;;1014:2;1006:5;:10;;;;:::i;:::-;993:2;:24;;;;:::i;:::-;980:39;;963:6;970;963:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1043:2;1034:11;;;;;:::i;:::-;;;903:154;;;1081:6;1067:21;;;;;563:533;;;;:::o;11761:240::-;11822:7;11871:1;11854:19;;:5;:19;;;;11838:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;11962:12;:19;11975:5;11962:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;11954:41;;11947:48;;11761:240;;;:::o;15464:1152::-;15569:20;15592:12;;15569:35;;15633:1;15619:16;;:2;:16;;;;15611:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15690:21;15698:12;15690:7;:21::i;:::-;15689:22;15681:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15772:12;15760:8;:24;;15752:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15832:61;15862:1;15866:2;15870:12;15884:8;15832:21;:61::i;:::-;15902:30;15935:12;:16;15948:2;15935:16;;;;;;;;;;;;;;;15902:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15977:119;;;;;;;;16027:8;15997:11;:19;;;:39;;;;:::i;:::-;15977:119;;;;;;16080:8;16045:11;:24;;;:44;;;;:::i;:::-;15977:119;;;;;15958:12;:16;15971:2;15958:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16131:43;;;;;;;;16146:2;16131:43;;;;;;16157:15;16131:43;;;;;16103:11;:25;16115:12;16103:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16183:20;16206:12;16183:35;;16232:9;16227:281;16251:8;16247:1;:12;16227:281;;;16305:12;16301:2;16280:38;;16297:1;16280:38;;;;;;;;;;;;16345:59;16376:1;16380:2;16384:12;16398:5;16345:22;:59::i;:::-;16327:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;16486:14;;;;;:::i;:::-;;;;16261:3;;;;;:::i;:::-;;;;16227:281;;;;16531:12;16516;:27;;;;16550:60;16579:1;16583:2;16587:12;16601:8;16550:20;:60::i;:::-;15562:1054;;;15464:1152;;;:::o;19559:141::-;;;;;:::o;19705:140::-;;;;;:::o;3171:197::-;3231:4;3249:12;3316:7;3304:20;3296:28;;3359:1;3352:4;:8;3345:15;;;3171:197;;;:::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:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:108::-;8391:24;8409:5;8391:24;:::i;:::-;8386:3;8379:37;8314:108;;:::o;8428:118::-;8515:24;8533:5;8515:24;:::i;:::-;8510:3;8503:37;8428:118;;:::o;8552:109::-;8633:21;8648:5;8633:21;:::i;:::-;8628:3;8621:34;8552:109;;:::o;8667:360::-;8753:3;8781:38;8813:5;8781:38;:::i;:::-;8835:70;8898:6;8893:3;8835:70;:::i;:::-;8828:77;;8914:52;8959:6;8954:3;8947:4;8940:5;8936:16;8914:52;:::i;:::-;8991:29;9013:6;8991:29;:::i;:::-;8986:3;8982:39;8975:46;;8757:270;8667:360;;;;:::o;9033:364::-;9121:3;9149:39;9182:5;9149:39;:::i;:::-;9204:71;9268:6;9263:3;9204:71;:::i;:::-;9197:78;;9284:52;9329:6;9324:3;9317:4;9310:5;9306:16;9284:52;:::i;:::-;9361:29;9383:6;9361:29;:::i;:::-;9356:3;9352:39;9345:46;;9125:272;9033:364;;;;:::o;9403:377::-;9509:3;9537:39;9570:5;9537:39;:::i;:::-;9592:89;9674:6;9669:3;9592:89;:::i;:::-;9585:96;;9690:52;9735:6;9730:3;9723:4;9716:5;9712:16;9690:52;:::i;:::-;9767:6;9762:3;9758:16;9751:23;;9513:267;9403:377;;;;:::o;9786:366::-;9928:3;9949:67;10013:2;10008:3;9949:67;:::i;:::-;9942:74;;10025:93;10114:3;10025:93;:::i;:::-;10143:2;10138:3;10134:12;10127:19;;9786:366;;;:::o;10158:::-;10300:3;10321:67;10385:2;10380:3;10321:67;:::i;:::-;10314:74;;10397:93;10486:3;10397:93;:::i;:::-;10515:2;10510:3;10506:12;10499:19;;10158:366;;;:::o;10530:::-;10672:3;10693:67;10757:2;10752:3;10693:67;:::i;:::-;10686:74;;10769:93;10858:3;10769:93;:::i;:::-;10887:2;10882:3;10878:12;10871:19;;10530:366;;;:::o;10902:::-;11044:3;11065:67;11129:2;11124:3;11065:67;:::i;:::-;11058:74;;11141:93;11230:3;11141:93;:::i;:::-;11259:2;11254:3;11250:12;11243:19;;10902:366;;;:::o;11274:::-;11416:3;11437:67;11501:2;11496:3;11437:67;:::i;:::-;11430:74;;11513:93;11602:3;11513:93;:::i;:::-;11631:2;11626:3;11622:12;11615:19;;11274:366;;;:::o;11646:::-;11788:3;11809:67;11873:2;11868:3;11809:67;:::i;:::-;11802:74;;11885:93;11974:3;11885:93;:::i;:::-;12003:2;11998:3;11994:12;11987:19;;11646:366;;;:::o;12018:::-;12160:3;12181:67;12245:2;12240:3;12181:67;:::i;:::-;12174:74;;12257:93;12346:3;12257:93;:::i;:::-;12375:2;12370:3;12366:12;12359:19;;12018:366;;;:::o;12390:::-;12532:3;12553:67;12617:2;12612:3;12553:67;:::i;:::-;12546:74;;12629:93;12718:3;12629:93;:::i;:::-;12747:2;12742:3;12738:12;12731:19;;12390:366;;;:::o;12762:::-;12904:3;12925:67;12989:2;12984:3;12925:67;:::i;:::-;12918:74;;13001:93;13090:3;13001:93;:::i;:::-;13119:2;13114:3;13110:12;13103:19;;12762:366;;;:::o;13134:::-;13276:3;13297:67;13361:2;13356:3;13297:67;:::i;:::-;13290:74;;13373:93;13462:3;13373:93;:::i;:::-;13491:2;13486:3;13482:12;13475:19;;13134:366;;;:::o;13506:::-;13648:3;13669:67;13733:2;13728:3;13669:67;:::i;:::-;13662:74;;13745:93;13834:3;13745:93;:::i;:::-;13863:2;13858:3;13854:12;13847:19;;13506:366;;;:::o;13878:::-;14020:3;14041:67;14105:2;14100:3;14041:67;:::i;:::-;14034:74;;14117:93;14206:3;14117:93;:::i;:::-;14235:2;14230:3;14226:12;14219:19;;13878:366;;;:::o;14250:::-;14392:3;14413:67;14477:2;14472:3;14413:67;:::i;:::-;14406:74;;14489:93;14578:3;14489:93;:::i;:::-;14607:2;14602:3;14598:12;14591:19;;14250:366;;;:::o;14622:::-;14764:3;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14861:93;14950:3;14861:93;:::i;:::-;14979:2;14974:3;14970:12;14963:19;;14622:366;;;:::o;14994:::-;15136:3;15157:67;15221:2;15216:3;15157:67;:::i;:::-;15150:74;;15233:93;15322:3;15233:93;:::i;:::-;15351:2;15346:3;15342:12;15335:19;;14994:366;;;:::o;15366:::-;15508:3;15529:67;15593:2;15588:3;15529:67;:::i;:::-;15522:74;;15605:93;15694:3;15605:93;:::i;:::-;15723:2;15718:3;15714:12;15707:19;;15366:366;;;:::o;15738:::-;15880:3;15901:67;15965:2;15960:3;15901:67;:::i;:::-;15894:74;;15977:93;16066:3;15977:93;:::i;:::-;16095:2;16090:3;16086:12;16079:19;;15738:366;;;:::o;16110:::-;16252:3;16273:67;16337:2;16332:3;16273:67;:::i;:::-;16266:74;;16349:93;16438:3;16349:93;:::i;:::-;16467:2;16462:3;16458:12;16451:19;;16110:366;;;:::o;16482:400::-;16642:3;16663:84;16745:1;16740:3;16663:84;:::i;:::-;16656:91;;16756:93;16845:3;16756:93;:::i;:::-;16874:1;16869:3;16865:11;16858:18;;16482:400;;;:::o;16888:366::-;17030:3;17051:67;17115:2;17110:3;17051:67;:::i;:::-;17044:74;;17127:93;17216:3;17127:93;:::i;:::-;17245:2;17240:3;17236:12;17229:19;;16888:366;;;:::o;17260:::-;17402:3;17423:67;17487:2;17482:3;17423:67;:::i;:::-;17416:74;;17499:93;17588:3;17499:93;:::i;:::-;17617:2;17612:3;17608:12;17601:19;;17260:366;;;:::o;17632:::-;17774:3;17795:67;17859:2;17854:3;17795:67;:::i;:::-;17788:74;;17871:93;17960:3;17871:93;:::i;:::-;17989:2;17984:3;17980:12;17973:19;;17632:366;;;:::o;18004:::-;18146:3;18167:67;18231:2;18226:3;18167:67;:::i;:::-;18160:74;;18243:93;18332:3;18243:93;:::i;:::-;18361:2;18356:3;18352:12;18345:19;;18004:366;;;:::o;18376:::-;18518:3;18539:67;18603:2;18598:3;18539:67;:::i;:::-;18532:74;;18615:93;18704:3;18615:93;:::i;:::-;18733:2;18728:3;18724:12;18717:19;;18376:366;;;:::o;18748:::-;18890:3;18911:67;18975:2;18970:3;18911:67;:::i;:::-;18904:74;;18987:93;19076:3;18987:93;:::i;:::-;19105:2;19100:3;19096:12;19089:19;;18748:366;;;:::o;19120:::-;19262:3;19283:67;19347:2;19342:3;19283:67;:::i;:::-;19276:74;;19359:93;19448:3;19359:93;:::i;:::-;19477:2;19472:3;19468:12;19461:19;;19120:366;;;:::o;19492:::-;19634:3;19655:67;19719:2;19714:3;19655:67;:::i;:::-;19648:74;;19731:93;19820:3;19731:93;:::i;:::-;19849:2;19844:3;19840:12;19833:19;;19492:366;;;:::o;19864:398::-;20023:3;20044:83;20125:1;20120:3;20044:83;:::i;:::-;20037:90;;20136:93;20225:3;20136:93;:::i;:::-;20254:1;20249:3;20245:11;20238:18;;19864:398;;;:::o;20268:366::-;20410:3;20431:67;20495:2;20490:3;20431:67;:::i;:::-;20424:74;;20507:93;20596:3;20507:93;:::i;:::-;20625:2;20620:3;20616:12;20609:19;;20268:366;;;:::o;20640:::-;20782:3;20803:67;20867:2;20862:3;20803:67;:::i;:::-;20796:74;;20879:93;20968:3;20879:93;:::i;:::-;20997:2;20992:3;20988:12;20981:19;;20640:366;;;:::o;21012:::-;21154:3;21175:67;21239:2;21234:3;21175:67;:::i;:::-;21168:74;;21251:93;21340:3;21251:93;:::i;:::-;21369:2;21364:3;21360:12;21353:19;;21012:366;;;:::o;21384:::-;21526:3;21547:67;21611:2;21606:3;21547:67;:::i;:::-;21540:74;;21623:93;21712:3;21623:93;:::i;:::-;21741:2;21736:3;21732:12;21725:19;;21384:366;;;:::o;21756:::-;21898:3;21919:67;21983:2;21978:3;21919:67;:::i;:::-;21912:74;;21995:93;22084:3;21995:93;:::i;:::-;22113:2;22108:3;22104:12;22097:19;;21756:366;;;:::o;22128:::-;22270:3;22291:67;22355:2;22350:3;22291:67;:::i;:::-;22284:74;;22367:93;22456:3;22367:93;:::i;:::-;22485:2;22480:3;22476:12;22469:19;;22128:366;;;:::o;22500:::-;22642:3;22663:67;22727:2;22722:3;22663:67;:::i;:::-;22656:74;;22739:93;22828:3;22739:93;:::i;:::-;22857:2;22852:3;22848:12;22841:19;;22500:366;;;:::o;22872:::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:::-;23386:3;23407:67;23471:2;23466:3;23407:67;:::i;:::-;23400:74;;23483:93;23572:3;23483:93;:::i;:::-;23601:2;23596:3;23592:12;23585:19;;23244:366;;;:::o;23616:::-;23758:3;23779:67;23843:2;23838:3;23779:67;:::i;:::-;23772:74;;23855:93;23944:3;23855:93;:::i;:::-;23973:2;23968:3;23964:12;23957:19;;23616:366;;;:::o;23988:::-;24130:3;24151:67;24215:2;24210:3;24151:67;:::i;:::-;24144:74;;24227:93;24316:3;24227:93;:::i;:::-;24345:2;24340:3;24336:12;24329:19;;23988:366;;;:::o;24430:527::-;24589:4;24584:3;24580:14;24676:4;24669:5;24665:16;24659:23;24695:63;24752:4;24747:3;24743:14;24729:12;24695:63;:::i;:::-;24604:164;24860:4;24853:5;24849:16;24843:23;24879:61;24934:4;24929:3;24925:14;24911:12;24879:61;:::i;:::-;24778:172;24558:399;24430:527;;:::o;24963:118::-;25050:24;25068:5;25050:24;:::i;:::-;25045:3;25038:37;24963:118;;:::o;25087:105::-;25162:23;25179:5;25162:23;:::i;:::-;25157:3;25150:36;25087:105;;:::o;25198:701::-;25479:3;25501:95;25592:3;25583:6;25501:95;:::i;:::-;25494:102;;25613:95;25704:3;25695:6;25613:95;:::i;:::-;25606:102;;25725:148;25869:3;25725:148;:::i;:::-;25718:155;;25890:3;25883:10;;25198:701;;;;;:::o;25905:379::-;26089:3;26111:147;26254:3;26111:147;:::i;:::-;26104:154;;26275:3;26268:10;;25905:379;;;:::o;26290:222::-;26383:4;26421:2;26410:9;26406:18;26398:26;;26434:71;26502:1;26491:9;26487:17;26478:6;26434:71;:::i;:::-;26290:222;;;;:::o;26518:640::-;26713:4;26751:3;26740:9;26736:19;26728:27;;26765:71;26833:1;26822:9;26818:17;26809:6;26765:71;:::i;:::-;26846:72;26914:2;26903:9;26899:18;26890:6;26846:72;:::i;:::-;26928;26996:2;26985:9;26981:18;26972:6;26928:72;:::i;:::-;27047:9;27041:4;27037:20;27032:2;27021:9;27017:18;27010:48;27075:76;27146:4;27137:6;27075:76;:::i;:::-;27067:84;;26518:640;;;;;;;:::o;27164:210::-;27251:4;27289:2;27278:9;27274:18;27266:26;;27302:65;27364:1;27353:9;27349:17;27340:6;27302:65;:::i;:::-;27164:210;;;;:::o;27380:313::-;27493:4;27531:2;27520:9;27516:18;27508:26;;27580:9;27574:4;27570:20;27566:1;27555:9;27551:17;27544:47;27608:78;27681:4;27672:6;27608:78;:::i;:::-;27600:86;;27380:313;;;;:::o;27699:419::-;27865:4;27903:2;27892:9;27888:18;27880:26;;27952:9;27946:4;27942:20;27938:1;27927:9;27923:17;27916:47;27980:131;28106:4;27980:131;:::i;:::-;27972:139;;27699:419;;;:::o;28124:::-;28290:4;28328:2;28317:9;28313:18;28305:26;;28377:9;28371:4;28367:20;28363:1;28352:9;28348:17;28341:47;28405:131;28531:4;28405:131;:::i;:::-;28397:139;;28124:419;;;:::o;28549:::-;28715:4;28753:2;28742:9;28738:18;28730:26;;28802:9;28796:4;28792:20;28788:1;28777:9;28773:17;28766:47;28830:131;28956:4;28830:131;:::i;:::-;28822:139;;28549:419;;;:::o;28974:::-;29140:4;29178:2;29167:9;29163:18;29155:26;;29227:9;29221:4;29217:20;29213:1;29202:9;29198:17;29191:47;29255:131;29381:4;29255:131;:::i;:::-;29247:139;;28974:419;;;:::o;29399:::-;29565:4;29603:2;29592:9;29588:18;29580:26;;29652:9;29646:4;29642:20;29638:1;29627:9;29623:17;29616:47;29680:131;29806:4;29680:131;:::i;:::-;29672:139;;29399:419;;;:::o;29824:::-;29990:4;30028:2;30017:9;30013:18;30005:26;;30077:9;30071:4;30067:20;30063:1;30052:9;30048:17;30041:47;30105:131;30231:4;30105:131;:::i;:::-;30097:139;;29824:419;;;:::o;30249:::-;30415:4;30453:2;30442:9;30438:18;30430:26;;30502:9;30496:4;30492:20;30488:1;30477:9;30473:17;30466:47;30530:131;30656:4;30530:131;:::i;:::-;30522:139;;30249:419;;;:::o;30674:::-;30840:4;30878:2;30867:9;30863:18;30855:26;;30927:9;30921:4;30917:20;30913:1;30902:9;30898:17;30891:47;30955:131;31081:4;30955:131;:::i;:::-;30947:139;;30674:419;;;:::o;31099:::-;31265:4;31303:2;31292:9;31288:18;31280:26;;31352:9;31346:4;31342:20;31338:1;31327:9;31323:17;31316:47;31380:131;31506:4;31380:131;:::i;:::-;31372:139;;31099:419;;;:::o;31524:::-;31690:4;31728:2;31717:9;31713:18;31705:26;;31777:9;31771:4;31767:20;31763:1;31752:9;31748:17;31741:47;31805:131;31931:4;31805:131;:::i;:::-;31797:139;;31524:419;;;:::o;31949:::-;32115:4;32153:2;32142:9;32138:18;32130:26;;32202:9;32196:4;32192:20;32188:1;32177:9;32173:17;32166:47;32230:131;32356:4;32230:131;:::i;:::-;32222:139;;31949:419;;;:::o;32374:::-;32540:4;32578:2;32567:9;32563:18;32555:26;;32627:9;32621:4;32617:20;32613:1;32602:9;32598:17;32591:47;32655:131;32781:4;32655:131;:::i;:::-;32647:139;;32374:419;;;:::o;32799:::-;32965:4;33003:2;32992:9;32988:18;32980:26;;33052:9;33046:4;33042:20;33038:1;33027:9;33023:17;33016:47;33080:131;33206:4;33080:131;:::i;:::-;33072:139;;32799:419;;;:::o;33224:::-;33390:4;33428:2;33417:9;33413:18;33405:26;;33477:9;33471:4;33467:20;33463:1;33452:9;33448:17;33441:47;33505:131;33631:4;33505:131;:::i;:::-;33497:139;;33224:419;;;:::o;33649:::-;33815:4;33853:2;33842:9;33838:18;33830:26;;33902:9;33896:4;33892:20;33888:1;33877:9;33873:17;33866:47;33930:131;34056:4;33930:131;:::i;:::-;33922:139;;33649:419;;;:::o;34074:::-;34240:4;34278:2;34267:9;34263:18;34255:26;;34327:9;34321:4;34317:20;34313:1;34302:9;34298:17;34291:47;34355:131;34481:4;34355:131;:::i;:::-;34347:139;;34074:419;;;:::o;34499:::-;34665:4;34703:2;34692:9;34688:18;34680:26;;34752:9;34746:4;34742:20;34738:1;34727:9;34723:17;34716:47;34780:131;34906:4;34780:131;:::i;:::-;34772:139;;34499:419;;;:::o;34924:::-;35090:4;35128:2;35117:9;35113:18;35105:26;;35177:9;35171:4;35167:20;35163:1;35152:9;35148:17;35141:47;35205:131;35331:4;35205:131;:::i;:::-;35197:139;;34924:419;;;:::o;35349:::-;35515:4;35553:2;35542:9;35538:18;35530:26;;35602:9;35596:4;35592:20;35588:1;35577:9;35573:17;35566:47;35630:131;35756:4;35630:131;:::i;:::-;35622:139;;35349:419;;;:::o;35774:::-;35940:4;35978:2;35967:9;35963:18;35955:26;;36027:9;36021:4;36017:20;36013:1;36002:9;35998:17;35991:47;36055:131;36181:4;36055:131;:::i;:::-;36047:139;;35774:419;;;:::o;36199:::-;36365:4;36403:2;36392:9;36388:18;36380:26;;36452:9;36446:4;36442:20;36438:1;36427:9;36423:17;36416:47;36480:131;36606:4;36480:131;:::i;:::-;36472:139;;36199:419;;;:::o;36624:::-;36790:4;36828:2;36817:9;36813:18;36805:26;;36877:9;36871:4;36867:20;36863:1;36852:9;36848:17;36841:47;36905:131;37031:4;36905:131;:::i;:::-;36897:139;;36624:419;;;:::o;37049:::-;37215:4;37253:2;37242:9;37238:18;37230:26;;37302:9;37296:4;37292:20;37288:1;37277:9;37273:17;37266:47;37330:131;37456:4;37330:131;:::i;:::-;37322:139;;37049:419;;;:::o;37474:::-;37640:4;37678:2;37667:9;37663:18;37655:26;;37727:9;37721:4;37717:20;37713:1;37702:9;37698:17;37691:47;37755:131;37881:4;37755:131;:::i;:::-;37747:139;;37474:419;;;:::o;37899:::-;38065:4;38103:2;38092:9;38088:18;38080:26;;38152:9;38146:4;38142:20;38138:1;38127:9;38123:17;38116:47;38180:131;38306:4;38180:131;:::i;:::-;38172:139;;37899:419;;;:::o;38324:::-;38490:4;38528:2;38517:9;38513:18;38505:26;;38577:9;38571:4;38567:20;38563:1;38552:9;38548:17;38541:47;38605:131;38731:4;38605:131;:::i;:::-;38597:139;;38324:419;;;:::o;38749:::-;38915:4;38953:2;38942:9;38938:18;38930:26;;39002:9;38996:4;38992:20;38988:1;38977:9;38973:17;38966:47;39030:131;39156:4;39030:131;:::i;:::-;39022:139;;38749:419;;;:::o;39174:::-;39340:4;39378:2;39367:9;39363:18;39355:26;;39427:9;39421:4;39417:20;39413:1;39402:9;39398:17;39391:47;39455:131;39581:4;39455:131;:::i;:::-;39447:139;;39174:419;;;:::o;39599:::-;39765:4;39803:2;39792:9;39788:18;39780:26;;39852:9;39846:4;39842:20;39838:1;39827:9;39823:17;39816:47;39880:131;40006:4;39880:131;:::i;:::-;39872:139;;39599:419;;;:::o;40024:::-;40190:4;40228:2;40217:9;40213:18;40205:26;;40277:9;40271:4;40267:20;40263:1;40252:9;40248:17;40241:47;40305:131;40431:4;40305:131;:::i;:::-;40297:139;;40024:419;;;:::o;40449:::-;40615:4;40653:2;40642:9;40638:18;40630:26;;40702:9;40696:4;40692:20;40688:1;40677:9;40673:17;40666:47;40730:131;40856:4;40730:131;:::i;:::-;40722:139;;40449:419;;;:::o;40874:::-;41040:4;41078:2;41067:9;41063:18;41055:26;;41127:9;41121:4;41117:20;41113:1;41102:9;41098:17;41091:47;41155:131;41281:4;41155:131;:::i;:::-;41147:139;;40874:419;;;:::o;41299:::-;41465:4;41503:2;41492:9;41488:18;41480:26;;41552:9;41546:4;41542:20;41538:1;41527:9;41523:17;41516:47;41580:131;41706:4;41580:131;:::i;:::-;41572:139;;41299:419;;;:::o;41724:::-;41890:4;41928:2;41917:9;41913:18;41905:26;;41977:9;41971:4;41967:20;41963:1;41952:9;41948:17;41941:47;42005:131;42131:4;42005:131;:::i;:::-;41997:139;;41724:419;;;:::o;42149:::-;42315:4;42353:2;42342:9;42338:18;42330:26;;42402:9;42396:4;42392:20;42388:1;42377:9;42373:17;42366:47;42430:131;42556:4;42430:131;:::i;:::-;42422:139;;42149:419;;;:::o;42574:::-;42740:4;42778:2;42767:9;42763:18;42755:26;;42827:9;42821:4;42817:20;42813:1;42802:9;42798:17;42791:47;42855:131;42981:4;42855:131;:::i;:::-;42847:139;;42574:419;;;:::o;42999:::-;43165:4;43203:2;43192:9;43188:18;43180:26;;43252:9;43246:4;43242:20;43238:1;43227:9;43223:17;43216:47;43280:131;43406:4;43280:131;:::i;:::-;43272:139;;42999:419;;;:::o;43424:346::-;43579:4;43617:2;43606:9;43602:18;43594:26;;43630:133;43760:1;43749:9;43745:17;43736:6;43630:133;:::i;:::-;43424:346;;;;:::o;43776:222::-;43869:4;43907:2;43896:9;43892:18;43884:26;;43920:71;43988:1;43977:9;43973:17;43964:6;43920:71;:::i;:::-;43776:222;;;;:::o;44004:129::-;44038:6;44065:20;;:::i;:::-;44055:30;;44094:33;44122:4;44114:6;44094:33;:::i;:::-;44004:129;;;:::o;44139:75::-;44172:6;44205:2;44199:9;44189:19;;44139:75;:::o;44220:307::-;44281:4;44371:18;44363:6;44360:30;44357:56;;;44393:18;;:::i;:::-;44357:56;44431:29;44453:6;44431:29;:::i;:::-;44423:37;;44515:4;44509;44505:15;44497:23;;44220:307;;;:::o;44533:308::-;44595:4;44685:18;44677:6;44674:30;44671:56;;;44707:18;;:::i;:::-;44671:56;44745:29;44767:6;44745:29;:::i;:::-;44737:37;;44829:4;44823;44819:15;44811:23;;44533:308;;;:::o;44847:98::-;44898:6;44932:5;44926:12;44916:22;;44847:98;;;:::o;44951:99::-;45003:6;45037:5;45031:12;45021:22;;44951:99;;;:::o;45056:168::-;45139:11;45173:6;45168:3;45161:19;45213:4;45208:3;45204:14;45189:29;;45056:168;;;;:::o;45230:147::-;45331:11;45368:3;45353:18;;45230:147;;;;:::o;45383:169::-;45467:11;45501:6;45496:3;45489:19;45541:4;45536:3;45532:14;45517:29;;45383:169;;;;:::o;45558:148::-;45660:11;45697:3;45682:18;;45558:148;;;;:::o;45712:273::-;45752:3;45771:20;45789:1;45771:20;:::i;:::-;45766:25;;45805:20;45823:1;45805:20;:::i;:::-;45800:25;;45927:1;45891:34;45887:42;45884:1;45881:49;45878:75;;;45933:18;;:::i;:::-;45878:75;45977:1;45974;45970:9;45963:16;;45712:273;;;;:::o;45991:305::-;46031:3;46050:20;46068:1;46050:20;:::i;:::-;46045:25;;46084:20;46102:1;46084:20;:::i;:::-;46079:25;;46238:1;46170:66;46166:74;46163:1;46160:81;46157:107;;;46244:18;;:::i;:::-;46157:107;46288:1;46285;46281:9;46274:16;;45991:305;;;;:::o;46302:185::-;46342:1;46359:20;46377:1;46359:20;:::i;:::-;46354:25;;46393:20;46411:1;46393:20;:::i;:::-;46388:25;;46432:1;46422:35;;46437:18;;:::i;:::-;46422:35;46479:1;46476;46472:9;46467:14;;46302:185;;;;:::o;46493:348::-;46533:7;46556:20;46574:1;46556:20;:::i;:::-;46551:25;;46590:20;46608:1;46590:20;:::i;:::-;46585:25;;46778:1;46710:66;46706:74;46703:1;46700:81;46695:1;46688:9;46681:17;46677:105;46674:131;;;46785:18;;:::i;:::-;46674:131;46833:1;46830;46826:9;46815:20;;46493:348;;;;:::o;46847:191::-;46887:4;46907:20;46925:1;46907:20;:::i;:::-;46902:25;;46941:20;46959:1;46941:20;:::i;:::-;46936:25;;46980:1;46977;46974:8;46971:34;;;46985:18;;:::i;:::-;46971:34;47030:1;47027;47023:9;47015:17;;46847:191;;;;:::o;47044:::-;47084:4;47104:20;47122:1;47104:20;:::i;:::-;47099:25;;47138:20;47156:1;47138:20;:::i;:::-;47133:25;;47177:1;47174;47171:8;47168:34;;;47182:18;;:::i;:::-;47168:34;47227:1;47224;47220:9;47212:17;;47044:191;;;;:::o;47241:96::-;47278:7;47307:24;47325:5;47307:24;:::i;:::-;47296:35;;47241:96;;;:::o;47343:90::-;47377:7;47420:5;47413:13;47406:21;47395:32;;47343:90;;;:::o;47439:149::-;47475:7;47515:66;47508:5;47504:78;47493:89;;47439:149;;;:::o;47594:118::-;47631:7;47671:34;47664:5;47660:46;47649:57;;47594:118;;;:::o;47718:126::-;47755:7;47795:42;47788:5;47784:54;47773:65;;47718:126;;;:::o;47850:77::-;47887:7;47916:5;47905:16;;47850:77;;;:::o;47933:101::-;47969:7;48009:18;48002:5;47998:30;47987:41;;47933:101;;;:::o;48040:154::-;48124:6;48119:3;48114;48101:30;48186:1;48177:6;48172:3;48168:16;48161:27;48040:154;;;:::o;48200:307::-;48268:1;48278:113;48292:6;48289:1;48286:13;48278:113;;;48377:1;48372:3;48368:11;48362:18;48358:1;48353:3;48349:11;48342:39;48314:2;48311:1;48307:10;48302:15;;48278:113;;;48409:6;48406:1;48403:13;48400:101;;;48489:1;48480:6;48475:3;48471:16;48464:27;48400:101;48249:258;48200:307;;;:::o;48513:171::-;48552:3;48575:24;48593:5;48575:24;:::i;:::-;48566:33;;48621:4;48614:5;48611:15;48608:41;;;48629:18;;:::i;:::-;48608:41;48676:1;48669:5;48665:13;48658:20;;48513:171;;;:::o;48690:320::-;48734:6;48771:1;48765:4;48761:12;48751:22;;48818:1;48812:4;48808:12;48839:18;48829:81;;48895:4;48887:6;48883:17;48873:27;;48829:81;48957:2;48949:6;48946:14;48926:18;48923:38;48920:84;;;48976:18;;:::i;:::-;48920:84;48741:269;48690:320;;;:::o;49016:281::-;49099:27;49121:4;49099:27;:::i;:::-;49091:6;49087:40;49229:6;49217:10;49214:22;49193:18;49181:10;49178:34;49175:62;49172:88;;;49240:18;;:::i;:::-;49172:88;49280:10;49276:2;49269:22;49059:238;49016:281;;:::o;49303:233::-;49342:3;49365:24;49383:5;49365:24;:::i;:::-;49356:33;;49411:66;49404:5;49401:77;49398:103;;;49481:18;;:::i;:::-;49398:103;49528:1;49521:5;49517:13;49510:20;;49303:233;;;:::o;49542:176::-;49574:1;49591:20;49609:1;49591:20;:::i;:::-;49586:25;;49625:20;49643:1;49625:20;:::i;:::-;49620:25;;49664:1;49654:35;;49669:18;;:::i;:::-;49654:35;49710:1;49707;49703:9;49698:14;;49542:176;;;;:::o;49724:180::-;49772:77;49769:1;49762:88;49869:4;49866:1;49859:15;49893:4;49890:1;49883:15;49910:180;49958:77;49955:1;49948:88;50055:4;50052:1;50045:15;50079:4;50076:1;50069:15;50096:180;50144:77;50141:1;50134:88;50241:4;50238:1;50231:15;50265:4;50262:1;50255:15;50282:180;50330:77;50327:1;50320:88;50427:4;50424:1;50417:15;50451:4;50448:1;50441:15;50468:180;50516:77;50513:1;50506:88;50613:4;50610:1;50603:15;50637:4;50634:1;50627:15;50654:117;50763:1;50760;50753:12;50777:117;50886:1;50883;50876:12;50900:117;51009:1;51006;50999:12;51023:117;51132:1;51129;51122:12;51146:117;51255:1;51252;51245:12;51269:117;51378:1;51375;51368:12;51392:102;51433:6;51484:2;51480:7;51475:2;51468:5;51464:14;51460:28;51450:38;;51392:102;;;:::o;51500:221::-;51640:34;51636:1;51628:6;51624:14;51617:58;51709:4;51704:2;51696:6;51692:15;51685:29;51500:221;:::o;51727:231::-;51867:34;51863:1;51855:6;51851:14;51844:58;51936:14;51931:2;51923:6;51919:15;51912:39;51727:231;:::o;51964:225::-;52104:34;52100:1;52092:6;52088:14;52081:58;52173:8;52168:2;52160:6;52156:15;52149:33;51964:225;:::o;52195:177::-;52335:29;52331:1;52323:6;52319:14;52312:53;52195:177;:::o;52378:229::-;52518:34;52514:1;52506:6;52502:14;52495:58;52587:12;52582:2;52574:6;52570:15;52563:37;52378:229;:::o;52613:222::-;52753:34;52749:1;52741:6;52737:14;52730:58;52822:5;52817:2;52809:6;52805:15;52798:30;52613:222;:::o;52841:::-;52981:34;52977:1;52969:6;52965:14;52958:58;53050:5;53045:2;53037:6;53033:15;53026:30;52841:222;:::o;53069:168::-;53209:20;53205:1;53197:6;53193:14;53186:44;53069:168;:::o;53243:224::-;53383:34;53379:1;53371:6;53367:14;53360:58;53452:7;53447:2;53439:6;53435:15;53428:32;53243:224;:::o;53473:175::-;53613:27;53609:1;53601:6;53597:14;53590:51;53473:175;:::o;53654:236::-;53794:34;53790:1;53782:6;53778:14;53771:58;53863:19;53858:2;53850:6;53846:15;53839:44;53654:236;:::o;53896:180::-;54036:32;54032:1;54024:6;54020:14;54013:56;53896:180;:::o;54082:244::-;54222:34;54218:1;54210:6;54206:14;54199:58;54291:27;54286:2;54278:6;54274:15;54267:52;54082:244;:::o;54332:230::-;54472:34;54468:1;54460:6;54456:14;54449:58;54541:13;54536:2;54528:6;54524:15;54517:38;54332:230;:::o;54568:169::-;54708:21;54704:1;54696:6;54692:14;54685:45;54568:169;:::o;54743:225::-;54883:34;54879:1;54871:6;54867:14;54860:58;54952:8;54947:2;54939:6;54935:15;54928:33;54743:225;:::o;54974:179::-;55114:31;55110:1;55102:6;55098:14;55091:55;54974:179;:::o;55159:225::-;55299:34;55295:1;55287:6;55283:14;55276:58;55368:8;55363:2;55355:6;55351:15;55344:33;55159:225;:::o;55390:155::-;55530:7;55526:1;55518:6;55514:14;55507:31;55390:155;:::o;55551:227::-;55691:34;55687:1;55679:6;55675:14;55668:58;55760:10;55755:2;55747:6;55743:15;55736:35;55551:227;:::o;55784:175::-;55924:27;55920:1;55912:6;55908:14;55901:51;55784:175;:::o;55965:182::-;56105:34;56101:1;56093:6;56089:14;56082:58;55965:182;:::o;56153:234::-;56293:34;56289:1;56281:6;56277:14;56270:58;56362:17;56357:2;56349:6;56345:15;56338:42;56153:234;:::o;56393:176::-;56533:28;56529:1;56521:6;56517:14;56510:52;56393:176;:::o;56575:237::-;56715:34;56711:1;56703:6;56699:14;56692:58;56784:20;56779:2;56771:6;56767:15;56760:45;56575:237;:::o;56818:228::-;56958:34;56954:1;56946:6;56942:14;56935:58;57027:11;57022:2;57014:6;57010:15;57003:36;56818:228;:::o;57052:221::-;57192:34;57188:1;57180:6;57176:14;57169:58;57261:4;57256:2;57248:6;57244:15;57237:29;57052:221;:::o;57279:114::-;;:::o;57399:166::-;57539:18;57535:1;57527:6;57523:14;57516:42;57399:166;:::o;57571:238::-;57711:34;57707:1;57699:6;57695:14;57688:58;57780:21;57775:2;57767:6;57763:15;57756:46;57571:238;:::o;57815:179::-;57955:31;57951:1;57943:6;57939:14;57932:55;57815:179;:::o;58000:220::-;58140:34;58136:1;58128:6;58124:14;58117:58;58209:3;58204:2;58196:6;58192:15;58185:28;58000:220;:::o;58226:180::-;58366:32;58362:1;58354:6;58350:14;58343:56;58226:180;:::o;58412:233::-;58552:34;58548:1;58540:6;58536:14;58529:58;58621:16;58616:2;58608:6;58604:15;58597:41;58412:233;:::o;58651:174::-;58791:26;58787:1;58779:6;58775:14;58768:50;58651:174;:::o;58831:181::-;58971:33;58967:1;58959:6;58955:14;58948:57;58831:181;:::o;59018:234::-;59158:34;59154:1;59146:6;59142:14;59135:58;59227:17;59222:2;59214:6;59210:15;59203:42;59018:234;:::o;59258:232::-;59398:34;59394:1;59386:6;59382:14;59375:58;59467:15;59462:2;59454:6;59450:15;59443:40;59258:232;:::o;59496:221::-;59636:34;59632:1;59624:6;59620:14;59613:58;59705:4;59700:2;59692:6;59688:15;59681:29;59496:221;:::o;59723:122::-;59796:24;59814:5;59796:24;:::i;:::-;59789:5;59786:35;59776:63;;59835:1;59832;59825:12;59776:63;59723:122;:::o;59851:116::-;59921:21;59936:5;59921:21;:::i;:::-;59914:5;59911:32;59901:60;;59957:1;59954;59947:12;59901:60;59851:116;:::o;59973:120::-;60045:23;60062:5;60045:23;:::i;:::-;60038:5;60035:34;60025:62;;60083:1;60080;60073:12;60025:62;59973:120;:::o;60099:122::-;60172:24;60190:5;60172:24;:::i;:::-;60165:5;60162:35;60152:63;;60211:1;60208;60201:12;60152:63;60099:122;:::o

Swarm Source

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