ETH Price: $3,378.99 (-1.89%)
Gas: 2 Gwei

Token

Nifty Hands (NiftyHands)
 

Overview

Max Total Supply

3,107 NiftyHands

Holders

1,116

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
inthearenatryingthings.eth
0xb6d19afe6de6c1ab49b964e202ebbf6b8e590a33
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:
NiftyHands

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-09-09
*/

// 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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


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

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

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

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

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


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

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


abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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


library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.
        return account.code.length > 0;
    }

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

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

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

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

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

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

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


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 IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}


interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    function balanceOf(address account, uint256 id) external view returns (uint256);

    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    function setApprovalForAll(address operator, bool approved) external;

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

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

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}


interface IERC1155MetadataURI is IERC1155 {
    function uri(uint256 id) external view returns (string memory);
}


contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    string private _uri;

    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

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

    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}


contract NiftyHands is ERC1155, Ownable, ReentrancyGuard {
  using Strings for uint256;

  struct Code {
    uint256 discount;
    uint256 supply;
  }

  uint256 public minPrice = 0.06 ether;
  // Genesis stock is 9999
  uint256 public stock = 9999;
  string public name;
  string public symbol;
  string public baseURI;

  mapping(address => uint256[]) private userTokens;
  mapping(uint256 => address) private tokenOwners;
  mapping(string => Code) private codes;
  mapping(address => uint256) private userSecretBalance;
  uint256[] private mintedTokens;
  string[] private codesList;
  uint256 private maxPerUser = 5;
  uint256 private maxPerUserSecret = 3;
  bool private paused = false;
  bool private secretMintPaused = false;


  constructor() ERC1155("") {
    name = "Nifty Hands";
    symbol = "NiftyHands";
    setURI("https://nifty-hands.com/nft/json/");
  }

  modifier mintCompliance(uint256 _id) {
    require(!paused, "Nifty error: NFT sales are on pause");
    require(_id <= stock, "Nifty error: Not enough stock");
    require(userTokens[tokenOwners[_id]].length <= maxPerUser, "Nifty error: you exceeded the max number of tokens per user");
    require(tokenOwners[_id] == address(0), "Nifty error: This token has been minted");
    _;
  }

  function mint(address _to, uint256 _id) 
    public 
    payable 
    mintCompliance(_id) 
    nonReentrant 
  {
    require(msg.value >= minPrice || msg.sender == owner(), "Nifty error: Minting fee is below floor price");
    _mint(_to, _id, 1, "");
    addToken(_to, _id);
  }

  function secretMint(address _to, uint256 _id, string memory _code) 
    public 
    payable 
    mintCompliance(_id) 
    nonReentrant 
  {
    require(!secretMintPaused, "Nifty error: NFT sales are on pause");
    require(codes[_code].supply > 0 || codes[_code].discount != 0, "Nifty error: code isn't valid or expired");
    require(msg.value*100 >= minPrice*(100-codes[_code].discount), "Nifty error: price is lower than discounted");
    require(userSecretBalance[_to] <= maxPerUserSecret, "Nifty error: you exceeded the max number of tokens per user with secret codes");
    _mint(_to, _id, 1, "");
    addToken(_to, _id);
    userSecretBalance[_to]++;
    codes[_code].supply--;
  }

  function _afterTokenTransfer(
    address operator, 
    address from, 
    address to, 
    uint256[] memory ids, 
    uint256[] memory amounts, 
    bytes memory data
  ) 
    internal 
    virtual 
    override 
  {
    if (from != address(0) && to != address(0)) {
      deleteToken(ids[0]);
      addToken(to, ids[0]);
    }
  }

  function validateCode(string memory _code) 
    public 
    view 
    returns(uint256) 
  {
    require(codes[_code].discount >= 0 && codes[_code].discount <= 100, "Nifty error: code value isn't within [0, 100]");
    require(codes[_code].supply > 0, "Nifty error: secret code is expired");
    return codes[_code].discount;
  }

  function burn(uint256 _id) public {
    require(msg.sender == tokenOwners[_id], "Only owner can burn token");
    _burn(msg.sender, _id, 1);
    deleteToken(_id);
  }

  function tokensOfOwner(address _owner) public view returns(uint256[] memory) {
    return userTokens[_owner];
  }

  function allTokens() public view returns(uint256[] memory) {
    return mintedTokens;
  }

  function supply() public view returns(uint256) {
    return mintedTokens.length;
  }

  function allSecretCodes() public view onlyOwner returns(string[] memory) {
    return codesList;
  }

  function secretCodeSupply(string memory _code) public view onlyOwner returns(uint256) {
    return codes[_code].supply;
  }

  function uri(uint256 _id) public override view returns (string memory) {
    return string(
        abi.encodePacked(
            baseURI,
            _id.toString(),
            ".json"
        )
    );
  }


  // Settings modules

  function pause() public onlyOwner {
    paused = !paused;
  }

  function secretMintPause() public onlyOwner {
    secretMintPaused = !secretMintPaused;
  }

  function setMinPrice(uint256 _minPrice) public onlyOwner {
    minPrice = _minPrice;
  }

  function setStock(uint256 _stock) public onlyOwner {
    stock = _stock;
  }

  function setURI(string memory _baseURI) public onlyOwner {
    baseURI = _baseURI;
  }

  function setMaxPerUser(uint256 _maxPerUser) public onlyOwner {
    maxPerUser = _maxPerUser;
  }

  function setMaxPerUserSecret(uint256 _maxPerUserSecret) public onlyOwner {
    maxPerUserSecret = _maxPerUserSecret;
  }

  function addCode(string memory _code, Code memory _secretCode) public onlyOwner {
    require(codes[_code].discount == 0, "Nifty error: code already exist");
    require(_secretCode.discount >= 0 && _secretCode.discount <= 100, "Nifty error: code value isn't within [0, 100]");
    codes[_code] = _secretCode;
    codesList.push(_code);
  }

  function deleteCode(string memory _code) public onlyOwner {
    require(codes[_code].discount > 0, "Nifty error: code doesn't exist");
    delete codes[_code];
    deleteTokenFromArrayString(_code, codesList);
  }

  function withdrawAll() public payable onlyOwner nonReentrant {
    require(payable(msg.sender).send(address(this).balance));
  }


  // Util modules

  function addToken(address _to, uint _id) private {
    userTokens[_to].push(_id);
    tokenOwners[_id] = _to;
    mintedTokens.push(_id);
  }

  function deleteToken(uint256 _id) private {
    require (tokenOwners[_id] != address(0), "Nifty error: token with this id has not been minted");
    //delete from mintedTokens
    require (deleteTokenFromArray(_id, mintedTokens), "Nifty error: token wasn't found among minted tokens");
    //delete from userTokens
    require (deleteTokenFromArray(_id, userTokens[tokenOwners[_id]]), "Nifty error: token wasn't found among user tokens");
    //delete from tokenOwners
    delete tokenOwners[_id];
  }

  function deleteTokenFromArray(uint256 _id, uint256[] storage array) private returns(bool) {
    for (uint256 i = 0; i <= mintedTokens.length; i++) {
      if (array[i] == _id) {
        array[i] = array[array.length - 1];
        array.pop();
        return true;
      }
    }
    return false;
  }

  function deleteTokenFromArrayString(string memory _value, string[] storage array) private returns(bool) {
    for (uint256 i = 0; i <= mintedTokens.length; i++) {
      if (keccak256(abi.encodePacked((array[i]))) == keccak256(abi.encodePacked((_value)))) {
        array[i] = array[array.length - 1];
        array.pop();
        return true;
      }
    }
    return false;
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"string","name":"_code","type":"string"},{"components":[{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"internalType":"struct NiftyHands.Code","name":"_secretCode","type":"tuple"}],"name":"addCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allSecretCodes","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_code","type":"string"}],"name":"deleteCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_code","type":"string"}],"name":"secretCodeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_code","type":"string"}],"name":"secretMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"secretMintPause","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":"uint256","name":"_maxPerUser","type":"uint256"}],"name":"setMaxPerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerUserSecret","type":"uint256"}],"name":"setMaxPerUserSecret","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPrice","type":"uint256"}],"name":"setMinPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stock","type":"uint256"}],"name":"setStock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supply","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":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_code","type":"string"}],"name":"validateCode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266d529ae9e86000060055561270f600655600560105560036011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060200160405280600081525062000084816200017960201b60201c565b50620000a5620000996200019560201b60201c565b6200019d60201b60201c565b60016004819055506040518060400160405280600b81526020017f4e696674792048616e647300000000000000000000000000000000000000000081525060079080519060200190620000fa9291906200034a565b506040518060400160405280600a81526020017f4e6966747948616e64730000000000000000000000000000000000000000000081525060089080519060200190620001489291906200034a565b506200017360405180606001604052806021815260200162006180602191396200026360201b60201c565b620004e2565b8060029080519060200190620001919291906200034a565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002736200028f60201b60201c565b80600990805190602001906200028b9291906200034a565b5050565b6200029f6200019560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002c56200032060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200031e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003159062000421565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003589062000454565b90600052602060002090601f0160209004810192826200037c5760008555620003c8565b82601f106200039757805160ff1916838001178555620003c8565b82800160010185558215620003c8579182015b82811115620003c7578251825591602001919060010190620003aa565b5b509050620003d79190620003db565b5090565b5b80821115620003f6576000816000905550600101620003dc565b5090565b60006200040960208362000443565b91506200041682620004b9565b602082019050919050565b600060208201905081810360008301526200043c81620003fa565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200046d57607f821691505b602082108114156200048457620004836200048a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615c8e80620004f26000396000f3fe6080604052600436106102035760003560e01c8063715018a611610118578063a68e16df116100a0578063ca45ac1f1161006f578063ca45ac1f146106ef578063e45be8eb1461072c578063e985e9c514610757578063f242432a14610794578063f2fde38b146107bd57610203565b8063a68e16df14610668578063baff8b4d14610691578063bdf3c4ae146106ad578063be4ef738146106d857610203565b8063853828b6116100e7578063853828b6146105b4578063864c9b70146105be5780638da5cb5b146105e957806395d89b4114610614578063a22cb4651461063f57610203565b8063715018a614610520578063813dcee7146105375780638456cb59146105605780638462151c1461057757610203565b806340c10f191161019b5780634e1273f41161016a5780634e1273f41461043b57806359721499146104785780635ea8cd12146104a15780636c0360eb146104ca5780636ff97f1d146104f557610203565b806340c10f191461039057806342966c68146103ac578063474a9995146103d557806349e96fdd146103fe57610203565b806306fdde03116101d757806306fdde03146102d65780630e89341c1461030157806329982aa71461033e5780632eb2c2d61461036757610203565b8062fdd58e1461020857806301ffc9a71461024557806302fe530514610282578063047fc9aa146102ab575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190613d07565b6107e6565b60405161023c9190614c22565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613e2e565b6108af565b6040516102799190614805565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613e88565b610991565b005b3480156102b757600080fd5b506102c06109b3565b6040516102cd9190614c22565b60405180910390f35b3480156102e257600080fd5b506102eb6109c0565b6040516102f89190614820565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613f2d565b610a4e565b6040516103359190614820565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190613f2d565b610a82565b005b34801561037357600080fd5b5061038e60048036038101906103899190613b61565b610a94565b005b6103aa60048036038101906103a59190613d07565b610b35565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613f2d565b610e2a565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613f2d565b610ee3565b005b34801561040a57600080fd5b5061042560048036038101906104209190613e88565b610ef5565b6040516104329190614c22565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190613db6565b611016565b60405161046f91906147ac565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613ed1565b61112f565b005b3480156104ad57600080fd5b506104c860048036038101906104c39190613f2d565b61126a565b005b3480156104d657600080fd5b506104df61127c565b6040516104ec9190614820565b60405180910390f35b34801561050157600080fd5b5061050a61130a565b60405161051791906147ac565b60405180910390f35b34801561052c57600080fd5b50610535611362565b005b34801561054357600080fd5b5061055e60048036038101906105599190613f2d565b611376565b005b34801561056c57600080fd5b50610575611388565b005b34801561058357600080fd5b5061059e60048036038101906105999190613af4565b6113bc565b6040516105ab91906147ac565b60405180910390f35b6105bc611453565b005b3480156105ca57600080fd5b506105d36114f1565b6040516105e0919061478a565b60405180910390f35b3480156105f557600080fd5b506105fe6115d2565b60405161060b91906146ad565b60405180910390f35b34801561062057600080fd5b506106296115fc565b6040516106369190614820565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613cc7565b61168a565b005b34801561067457600080fd5b5061068f600480360381019061068a9190613e88565b6116a0565b005b6106ab60048036038101906106a69190613d47565b61174c565b005b3480156106b957600080fd5b506106c2611c3a565b6040516106cf9190614c22565b60405180910390f35b3480156106e457600080fd5b506106ed611c40565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613e88565b611c74565b6040516107239190614c22565b60405180910390f35b34801561073857600080fd5b50610741611ca7565b60405161074e9190614c22565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613b21565b611cad565b60405161078b9190614805565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613c30565b611d41565b005b3480156107c957600080fd5b506107e460048036038101906107df9190613af4565b611de2565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e90614942565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098a575061098982611e66565b5b9050919050565b610999611ed0565b80600990805190602001906109af9291906136af565b5050565b6000600e80549050905090565b600780546109cd90615015565b80601f01602080910402602001604051908101604052809291908181526020018280546109f990615015565b8015610a465780601f10610a1b57610100808354040283529160200191610a46565b820191906000526020600020905b815481529060010190602001808311610a2957829003601f168201915b505050505081565b60606009610a5b83611f4e565b604051602001610a6c92919061467e565b6040516020818303038152906040529050919050565b610a8a611ed0565b8060118190555050565b610a9c6120af565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ae25750610ae185610adc6120af565b611cad565b5b610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890614862565b60405180910390fd5b610b2e85858585856120b7565b5050505050565b80601260009054906101000a900460ff1615610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d906148a2565b60405180910390fd5b600654811115610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290614aa2565b60405180910390fd5b601054600a6000600b600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90614982565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e906149c2565b60405180910390fd5b60026004541415610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6490614bc2565b60405180910390fd5b600260048190555060055434101580610db85750610d896115d2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90614c02565b60405180910390fd5b610e1383836001604051806020016040528060008152506123d9565b610e1d838361258a565b6001600481905550505050565b600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290614922565b60405180910390fd5b610ed73382600161266f565b610ee0816128b6565b50565b610eeb611ed0565b8060068190555050565b600080600c83604051610f089190614650565b90815260200160405180910390206000015410158015610f4a57506064600c83604051610f359190614650565b90815260200160405180910390206000015411155b610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090614b02565b60405180910390fd5b6000600c83604051610f9b9190614650565b90815260200160405180910390206001015411610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe490614962565b60405180910390fd5b600c82604051610ffd9190614650565b9081526020016040518091039020600001549050919050565b6060815183511461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390614b42565b60405180910390fd5b6000835167ffffffffffffffff811115611079576110786151dd565b5b6040519080825280602002602001820160405280156110a75781602001602082028036833780820191505090505b50905060005b8451811015611124576110f48582815181106110cc576110cb6151ae565b5b60200260200101518583815181106110e7576110e66151ae565b5b60200260200101516107e6565b828281518110611107576111066151ae565b5b6020026020010181815250508061111d90615078565b90506110ad565b508091505092915050565b611137611ed0565b6000600c836040516111499190614650565b9081526020016040518091039020600001541461119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290614be2565b60405180910390fd5b60008160000151101580156111b557506064816000015111155b6111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb90614b02565b60405180910390fd5b80600c836040516112059190614650565b90815260200160405180910390206000820151816000015560208201518160010155905050600f829080600181540180825580915050600190039060005260206000200160009091909190915090805190602001906112659291906136af565b505050565b611272611ed0565b8060058190555050565b6009805461128990615015565b80601f01602080910402602001604051908101604052809291908181526020018280546112b590615015565b80156113025780601f106112d757610100808354040283529160200191611302565b820191906000526020600020905b8154815290600101906020018083116112e557829003601f168201915b505050505081565b6060600e80548060200260200160405190810160405280929190818152602001828054801561135857602002820191906000526020600020905b815481526020019060010190808311611344575b5050505050905090565b61136a611ed0565b6113746000612a96565b565b61137e611ed0565b8060108190555050565b611390611ed0565b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b6060600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561144757602002820191906000526020600020905b815481526020019060010190808311611433575b50505050509050919050565b61145b611ed0565b600260045414156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614bc2565b60405180910390fd5b60026004819055503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506114e757600080fd5b6001600481905550565b60606114fb611ed0565b600f805480602002602001604051908101604052809291908181526020016000905b828210156115c957838290600052602060002001805461153c90615015565b80601f016020809104026020016040519081016040528092919081815260200182805461156890615015565b80156115b55780601f1061158a576101008083540402835291602001916115b5565b820191906000526020600020905b81548152906001019060200180831161159857829003601f168201915b50505050508152602001906001019061151d565b50505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6008805461160990615015565b80601f016020809104026020016040519081016040528092919081815260200182805461163590615015565b80156116825780601f1061165757610100808354040283529160200191611682565b820191906000526020600020905b81548152906001019060200180831161166557829003601f168201915b505050505081565b61169c6116956120af565b8383612b5c565b5050565b6116a8611ed0565b6000600c826040516116ba9190614650565b9081526020016040518091039020600001541161170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614ac2565b60405180910390fd5b600c8160405161171c9190614650565b90815260200160405180910390206000808201600090556001820160009055505061174881600f612cc9565b5050565b81601260009054906101000a900460ff161561179d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611794906148a2565b60405180910390fd5b6006548111156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990614aa2565b60405180910390fd5b601054600a6000600b600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111561189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614982565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906149c2565b60405180910390fd5b60026004541415611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90614bc2565b60405180910390fd5b6002600481905550601260019054906101000a900460ff16156119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d3906148a2565b60405180910390fd5b6000600c836040516119ee9190614650565b9081526020016040518091039020600101541180611a2e57506000600c83604051611a199190614650565b90815260200160405180910390206000015414155b611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490614b82565b60405180910390fd5b600c82604051611a7d9190614650565b9081526020016040518091039020600001546064611a9b9190614f01565b600554611aa89190614ea7565b606434611ab59190614ea7565b1015611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed906149e2565b60405180910390fd5b601154600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190614ae2565b60405180910390fd5b611b9684846001604051806020016040528060008152506123d9565b611ba0848461258a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bf090615078565b9190505550600c82604051611c059190614650565b90815260200160405180910390206001016000815480929190611c2790614feb565b9190505550600160048190555050505050565b60065481565b611c48611ed0565b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b6000611c7e611ed0565b600c82604051611c8e9190614650565b9081526020016040518091039020600101549050919050565b60055481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d496120af565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611d8f5750611d8e85611d896120af565b611cad565b5b611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590614862565b60405180910390fd5b611ddb8585858585612e07565b5050505050565b611dea611ed0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e51906148c2565b60405180910390fd5b611e6381612a96565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ed86120af565b73ffffffffffffffffffffffffffffffffffffffff16611ef66115d2565b73ffffffffffffffffffffffffffffffffffffffff1614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614a62565b60405180910390fd5b565b60606000821415611f96576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120aa565b600082905060005b60008214611fc8578080611fb190615078565b915050600a82611fc19190614e76565b9150611f9e565b60008167ffffffffffffffff811115611fe457611fe36151dd565b5b6040519080825280601f01601f1916602001820160405280156120165781602001600182028036833780820191505090505b5090505b600085146120a35760018261202f9190614f01565b9150600a8561203e91906150c1565b603061204a9190614e20565b60f81b8183815181106120605761205f6151ae565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561209c9190614e76565b945061201a565b8093505050505b919050565b600033905090565b81518351146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561216b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612162906149a2565b60405180910390fd5b60006121756120af565b90506121858187878787876130a3565b60005b84518110156123365760008582815181106121a6576121a56151ae565b5b6020026020010151905060008583815181106121c5576121c46151ae565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90614a42565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461231b9190614e20565b925050819055505050508061232f90615078565b9050612188565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516123ad9291906147ce565b60405180910390a46123c38187878787876130ab565b6123d181878787878761316c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614ba2565b60405180910390fd5b60006124536120af565b9050600061246085613353565b9050600061246d85613353565b905061247e836000898585896130a3565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124dd9190614e20565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161255b929190614c3d565b60405180910390a4612572836000898585896130ab565b612581836000898989896133cd565b50505050505050565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505581600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e8190806001815401808255809150506001900390600052602060002001600090919091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614a22565b60405180910390fd5b60006126e96120af565b905060006126f684613353565b9050600061270384613353565b9050612723838760008585604051806020016040528060008152506130a3565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b1906148e2565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612887929190614c3d565b60405180910390a46128ad848860008686604051806020016040528060008152506130ab565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614a02565b60405180910390fd5b61296481600e6135b4565b6129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a90614902565b60405180910390fd5b612a1e81600a6000600b600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206135b4565b612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5490614a82565b60405180910390fd5b600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290614b22565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cbc9190614805565b60405180910390a3505050565b600080600090505b600e805490508111612dfb5783604051602001612cee9190614650565b60405160208183030381529060405280519060200120838281548110612d1757612d166151ae565b5b90600052602060002001604051602001612d319190614667565b604051602081830303815290604052805190602001201415612de8578260018480549050612d5f9190614f01565b81548110612d7057612d6f6151ae565b5b90600052602060002001838281548110612d8d57612d8c6151ae565b5b90600052602060002001908054612da390615015565b612dae929190613735565b5082805480612dc057612dbf61517f565b5b600190038181906000526020600020016000612ddc91906137c2565b90556001915050612e01565b8080612df390615078565b915050612cd1565b50600090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e906149a2565b60405180910390fd5b6000612e816120af565b90506000612e8e85613353565b90506000612e9b85613353565b9050612eab8389898585896130a3565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3990614a42565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff79190614e20565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051613074929190614c3d565b60405180910390a461308a848a8a86868a6130ab565b613098848a8a8a8a8a6133cd565b505050505050505050565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156131155750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156131645761313e83600081518110613131576131306151ae565b5b60200260200101516128b6565b6131638484600081518110613156576131556151ae565b5b602002602001015161258a565b5b505050505050565b61318b8473ffffffffffffffffffffffffffffffffffffffff1661368c565b1561334b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016131d19594939291906146c8565b602060405180830381600087803b1580156131eb57600080fd5b505af192505050801561321c57506040513d601f19601f820116820180604052508101906132199190613e5b565b60015b6132c25761322861520c565b806308c379a01415613285575061323d615b66565b806132485750613287565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327c9190614820565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b990614842565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334090614882565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115613372576133716151dd565b5b6040519080825280602002602001820160405280156133a05781602001602082028036833780820191505090505b50905082816000815181106133b8576133b76151ae565b5b60200260200101818152505080915050919050565b6133ec8473ffffffffffffffffffffffffffffffffffffffff1661368c565b156135ac578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613432959493929190614730565b602060405180830381600087803b15801561344c57600080fd5b505af192505050801561347d57506040513d601f19601f8201168201806040525081019061347a9190613e5b565b60015b6135235761348961520c565b806308c379a014156134e6575061349e615b66565b806134a957506134e8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd9190614820565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351a90614842565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a190614882565b60405180910390fd5b505b505050505050565b600080600090505b600e80549050811161368057838382815481106135dc576135db6151ae565b5b9060005260206000200154141561366d5782600184805490506135ff9190614f01565b815481106136105761360f6151ae565b5b906000526020600020015483828154811061362e5761362d6151ae565b5b90600052602060002001819055508280548061364d5761364c61517f565b5b600190038181906000526020600020016000905590556001915050613686565b808061367890615078565b9150506135bc565b50600090505b92915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546136bb90615015565b90600052602060002090601f0160209004810192826136dd5760008555613724565b82601f106136f657805160ff1916838001178555613724565b82800160010185558215613724579182015b82811115613723578251825591602001919060010190613708565b5b5090506137319190613802565b5090565b82805461374190615015565b90600052602060002090601f01602090048101928261376357600085556137b1565b82601f1061377457805485556137b1565b828001600101855582156137b157600052602060002091601f016020900482015b828111156137b0578254825591600101919060010190613795565b5b5090506137be9190613802565b5090565b5080546137ce90615015565b6000825580601f106137e057506137ff565b601f0160209004906000526020600020908101906137fe9190613802565b5b50565b5b8082111561381b576000816000905550600101613803565b5090565b600061383261382d84614c8b565b614c66565b9050808382526020820190508285602086028201111561385557613854615238565b5b60005b85811015613885578161386b8882613983565b845260208401935060208301925050600181019050613858565b5050509392505050565b60006138a261389d84614cb7565b614c66565b905080838252602082019050828560208602820111156138c5576138c4615238565b5b60005b858110156138f557816138db8882613adf565b8452602084019350602083019250506001810190506138c8565b5050509392505050565b600061391261390d84614ce3565b614c66565b90508281526020810184848401111561392e5761392d61523d565b5b613939848285614fa9565b509392505050565b600061395461394f84614d14565b614c66565b9050828152602081018484840111156139705761396f61523d565b5b61397b848285614fa9565b509392505050565b60008135905061399281615bfc565b92915050565b600082601f8301126139ad576139ac61522e565b5b81356139bd84826020860161381f565b91505092915050565b600082601f8301126139db576139da61522e565b5b81356139eb84826020860161388f565b91505092915050565b600081359050613a0381615c13565b92915050565b600081359050613a1881615c2a565b92915050565b600081519050613a2d81615c2a565b92915050565b600082601f830112613a4857613a4761522e565b5b8135613a588482602086016138ff565b91505092915050565b600082601f830112613a7657613a7561522e565b5b8135613a86848260208601613941565b91505092915050565b600060408284031215613aa557613aa4615233565b5b613aaf6040614c66565b90506000613abf84828501613adf565b6000830152506020613ad384828501613adf565b60208301525092915050565b600081359050613aee81615c41565b92915050565b600060208284031215613b0a57613b09615247565b5b6000613b1884828501613983565b91505092915050565b60008060408385031215613b3857613b37615247565b5b6000613b4685828601613983565b9250506020613b5785828601613983565b9150509250929050565b600080600080600060a08688031215613b7d57613b7c615247565b5b6000613b8b88828901613983565b9550506020613b9c88828901613983565b945050604086013567ffffffffffffffff811115613bbd57613bbc615242565b5b613bc9888289016139c6565b935050606086013567ffffffffffffffff811115613bea57613be9615242565b5b613bf6888289016139c6565b925050608086013567ffffffffffffffff811115613c1757613c16615242565b5b613c2388828901613a33565b9150509295509295909350565b600080600080600060a08688031215613c4c57613c4b615247565b5b6000613c5a88828901613983565b9550506020613c6b88828901613983565b9450506040613c7c88828901613adf565b9350506060613c8d88828901613adf565b925050608086013567ffffffffffffffff811115613cae57613cad615242565b5b613cba88828901613a33565b9150509295509295909350565b60008060408385031215613cde57613cdd615247565b5b6000613cec85828601613983565b9250506020613cfd858286016139f4565b9150509250929050565b60008060408385031215613d1e57613d1d615247565b5b6000613d2c85828601613983565b9250506020613d3d85828601613adf565b9150509250929050565b600080600060608486031215613d6057613d5f615247565b5b6000613d6e86828701613983565b9350506020613d7f86828701613adf565b925050604084013567ffffffffffffffff811115613da057613d9f615242565b5b613dac86828701613a61565b9150509250925092565b60008060408385031215613dcd57613dcc615247565b5b600083013567ffffffffffffffff811115613deb57613dea615242565b5b613df785828601613998565b925050602083013567ffffffffffffffff811115613e1857613e17615242565b5b613e24858286016139c6565b9150509250929050565b600060208284031215613e4457613e43615247565b5b6000613e5284828501613a09565b91505092915050565b600060208284031215613e7157613e70615247565b5b6000613e7f84828501613a1e565b91505092915050565b600060208284031215613e9e57613e9d615247565b5b600082013567ffffffffffffffff811115613ebc57613ebb615242565b5b613ec884828501613a61565b91505092915050565b60008060608385031215613ee857613ee7615247565b5b600083013567ffffffffffffffff811115613f0657613f05615242565b5b613f1285828601613a61565b9250506020613f2385828601613a8f565b9150509250929050565b600060208284031215613f4357613f42615247565b5b6000613f5184828501613adf565b91505092915050565b6000613f6683836140b0565b905092915050565b6000613f7a8383614632565b60208301905092915050565b613f8f81614f35565b82525050565b6000613fa082614d7a565b613faa8185614dc0565b935083602082028501613fbc85614d45565b8060005b85811015613ff85784840389528151613fd98582613f5a565b9450613fe483614da6565b925060208a01995050600181019050613fc0565b50829750879550505050505092915050565b600061401582614d85565b61401f8185614dd1565b935061402a83614d55565b8060005b8381101561405b5781516140428882613f6e565b975061404d83614db3565b92505060018101905061402e565b5085935050505092915050565b61407181614f47565b82525050565b600061408282614d90565b61408c8185614de2565b935061409c818560208601614fb8565b6140a58161524c565b840191505092915050565b60006140bb82614d9b565b6140c58185614df3565b93506140d5818560208601614fb8565b6140de8161524c565b840191505092915050565b60006140f482614d9b565b6140fe8185614e04565b935061410e818560208601614fb8565b6141178161524c565b840191505092915050565b600061412d82614d9b565b6141378185614e15565b9350614147818560208601614fb8565b80840191505092915050565b6000815461416081615015565b61416a8186614e15565b945060018216600081146141855760018114614196576141c9565b60ff198316865281860193506141c9565b61419f85614d65565b60005b838110156141c1578154818901526001820191506020810190506141a2565b838801955050505b50505092915050565b60006141df603483614e04565b91506141ea8261526a565b604082019050919050565b6000614202602f83614e04565b915061420d826152b9565b604082019050919050565b6000614225602883614e04565b915061423082615308565b604082019050919050565b6000614248602383614e04565b915061425382615357565b604082019050919050565b600061426b602683614e04565b9150614276826153a6565b604082019050919050565b600061428e602483614e04565b9150614299826153f5565b604082019050919050565b60006142b1603383614e04565b91506142bc82615444565b604082019050919050565b60006142d4601983614e04565b91506142df82615493565b602082019050919050565b60006142f7602a83614e04565b9150614302826154bc565b604082019050919050565b600061431a602383614e04565b91506143258261550b565b604082019050919050565b600061433d603b83614e04565b91506143488261555a565b604082019050919050565b6000614360602583614e04565b915061436b826155a9565b604082019050919050565b6000614383602783614e04565b915061438e826155f8565b604082019050919050565b60006143a6602b83614e04565b91506143b182615647565b604082019050919050565b60006143c9603383614e04565b91506143d482615696565b604082019050919050565b60006143ec602383614e04565b91506143f7826156e5565b604082019050919050565b600061440f602a83614e04565b915061441a82615734565b604082019050919050565b6000614432600583614e15565b915061443d82615783565b600582019050919050565b6000614455602083614e04565b9150614460826157ac565b602082019050919050565b6000614478603183614e04565b9150614483826157d5565b604082019050919050565b600061449b601d83614e04565b91506144a682615824565b602082019050919050565b60006144be601f83614e04565b91506144c98261584d565b602082019050919050565b60006144e1604d83614e04565b91506144ec82615876565b606082019050919050565b6000614504602d83614e04565b915061450f826158eb565b604082019050919050565b6000614527602983614e04565b91506145328261593a565b604082019050919050565b600061454a602983614e04565b915061455582615989565b604082019050919050565b600061456d602883614e04565b9150614578826159d8565b604082019050919050565b6000614590602883614e04565b915061459b82615a27565b604082019050919050565b60006145b3602183614e04565b91506145be82615a76565b604082019050919050565b60006145d6601f83614e04565b91506145e182615ac5565b602082019050919050565b60006145f9601f83614e04565b915061460482615aee565b602082019050919050565b600061461c602d83614e04565b915061462782615b17565b604082019050919050565b61463b81614f9f565b82525050565b61464a81614f9f565b82525050565b600061465c8284614122565b915081905092915050565b60006146738284614153565b915081905092915050565b600061468a8285614153565b91506146968284614122565b91506146a182614425565b91508190509392505050565b60006020820190506146c26000830184613f86565b92915050565b600060a0820190506146dd6000830188613f86565b6146ea6020830187613f86565b81810360408301526146fc818661400a565b90508181036060830152614710818561400a565b905081810360808301526147248184614077565b90509695505050505050565b600060a0820190506147456000830188613f86565b6147526020830187613f86565b61475f6040830186614641565b61476c6060830185614641565b818103608083015261477e8184614077565b90509695505050505050565b600060208201905081810360008301526147a48184613f95565b905092915050565b600060208201905081810360008301526147c6818461400a565b905092915050565b600060408201905081810360008301526147e8818561400a565b905081810360208301526147fc818461400a565b90509392505050565b600060208201905061481a6000830184614068565b92915050565b6000602082019050818103600083015261483a81846140e9565b905092915050565b6000602082019050818103600083015261485b816141d2565b9050919050565b6000602082019050818103600083015261487b816141f5565b9050919050565b6000602082019050818103600083015261489b81614218565b9050919050565b600060208201905081810360008301526148bb8161423b565b9050919050565b600060208201905081810360008301526148db8161425e565b9050919050565b600060208201905081810360008301526148fb81614281565b9050919050565b6000602082019050818103600083015261491b816142a4565b9050919050565b6000602082019050818103600083015261493b816142c7565b9050919050565b6000602082019050818103600083015261495b816142ea565b9050919050565b6000602082019050818103600083015261497b8161430d565b9050919050565b6000602082019050818103600083015261499b81614330565b9050919050565b600060208201905081810360008301526149bb81614353565b9050919050565b600060208201905081810360008301526149db81614376565b9050919050565b600060208201905081810360008301526149fb81614399565b9050919050565b60006020820190508181036000830152614a1b816143bc565b9050919050565b60006020820190508181036000830152614a3b816143df565b9050919050565b60006020820190508181036000830152614a5b81614402565b9050919050565b60006020820190508181036000830152614a7b81614448565b9050919050565b60006020820190508181036000830152614a9b8161446b565b9050919050565b60006020820190508181036000830152614abb8161448e565b9050919050565b60006020820190508181036000830152614adb816144b1565b9050919050565b60006020820190508181036000830152614afb816144d4565b9050919050565b60006020820190508181036000830152614b1b816144f7565b9050919050565b60006020820190508181036000830152614b3b8161451a565b9050919050565b60006020820190508181036000830152614b5b8161453d565b9050919050565b60006020820190508181036000830152614b7b81614560565b9050919050565b60006020820190508181036000830152614b9b81614583565b9050919050565b60006020820190508181036000830152614bbb816145a6565b9050919050565b60006020820190508181036000830152614bdb816145c9565b9050919050565b60006020820190508181036000830152614bfb816145ec565b9050919050565b60006020820190508181036000830152614c1b8161460f565b9050919050565b6000602082019050614c376000830184614641565b92915050565b6000604082019050614c526000830185614641565b614c5f6020830184614641565b9392505050565b6000614c70614c81565b9050614c7c8282615047565b919050565b6000604051905090565b600067ffffffffffffffff821115614ca657614ca56151dd565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cd257614cd16151dd565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cfe57614cfd6151dd565b5b614d078261524c565b9050602081019050919050565b600067ffffffffffffffff821115614d2f57614d2e6151dd565b5b614d388261524c565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e2b82614f9f565b9150614e3683614f9f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e6b57614e6a6150f2565b5b828201905092915050565b6000614e8182614f9f565b9150614e8c83614f9f565b925082614e9c57614e9b615121565b5b828204905092915050565b6000614eb282614f9f565b9150614ebd83614f9f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ef657614ef56150f2565b5b828202905092915050565b6000614f0c82614f9f565b9150614f1783614f9f565b925082821015614f2a57614f296150f2565b5b828203905092915050565b6000614f4082614f7f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614fd6578082015181840152602081019050614fbb565b83811115614fe5576000848401525b50505050565b6000614ff682614f9f565b9150600082141561500a576150096150f2565b5b600182039050919050565b6000600282049050600182168061502d57607f821691505b6020821081141561504157615040615150565b5b50919050565b6150508261524c565b810181811067ffffffffffffffff8211171561506f5761506e6151dd565b5b80604052505050565b600061508382614f9f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150b6576150b56150f2565b5b600182019050919050565b60006150cc82614f9f565b91506150d783614f9f565b9250826150e7576150e6615121565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561522b5760046000803e61522860005161525d565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a204e46542073616c657320617265206f6e20706160008201527f7573650000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20746f6b656e207761736e277420666f756e642060008201527f616d6f6e67206d696e74656420746f6b656e7300000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e206275726e20746f6b656e00000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a2073656372657420636f6465206973206578706960008201527f7265640000000000000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20796f7520657863656564656420746865206d6160008201527f78206e756d626572206f6620746f6b656e732070657220757365720000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a205468697320746f6b656e20686173206265656e60008201527f206d696e74656400000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a207072696365206973206c6f776572207468616e60008201527f20646973636f756e746564000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20746f6b656e207769746820746869732069642060008201527f686173206e6f74206265656e206d696e74656400000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e69667479206572726f723a20746f6b656e207761736e277420666f756e642060008201527f616d6f6e67207573657220746f6b656e73000000000000000000000000000000602082015250565b7f4e69667479206572726f723a204e6f7420656e6f7567682073746f636b000000600082015250565b7f4e69667479206572726f723a20636f646520646f65736e277420657869737400600082015250565b7f4e69667479206572726f723a20796f7520657863656564656420746865206d6160008201527f78206e756d626572206f6620746f6b656e73207065722075736572207769746860208201527f2073656372657420636f64657300000000000000000000000000000000000000604082015250565b7f4e69667479206572726f723a20636f64652076616c75652069736e277420776960008201527f7468696e205b302c203130305d00000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20636f64652069736e27742076616c6964206f7260008201527f2065787069726564000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4e69667479206572726f723a20636f646520616c726561647920657869737400600082015250565b7f4e69667479206572726f723a204d696e74696e67206665652069732062656c6f60008201527f7720666c6f6f7220707269636500000000000000000000000000000000000000602082015250565b600060443d1015615b7657615bf9565b615b7e614c81565b60043d036004823e80513d602482011167ffffffffffffffff82111715615ba6575050615bf9565b808201805167ffffffffffffffff811115615bc45750505050615bf9565b80602083010160043d038501811115615be1575050505050615bf9565b615bf082602001850186615047565b82955050505050505b90565b615c0581614f35565b8114615c1057600080fd5b50565b615c1c81614f47565b8114615c2757600080fd5b50565b615c3381614f53565b8114615c3e57600080fd5b50565b615c4a81614f9f565b8114615c5557600080fd5b5056fea26469706673582212206871dceb07fc3b6377dd3d25dcb7e5019dfec446da5830e947a11b49bd70cf1964736f6c6343000807003368747470733a2f2f6e696674792d68616e64732e636f6d2f6e66742f6a736f6e2f

Deployed Bytecode

0x6080604052600436106102035760003560e01c8063715018a611610118578063a68e16df116100a0578063ca45ac1f1161006f578063ca45ac1f146106ef578063e45be8eb1461072c578063e985e9c514610757578063f242432a14610794578063f2fde38b146107bd57610203565b8063a68e16df14610668578063baff8b4d14610691578063bdf3c4ae146106ad578063be4ef738146106d857610203565b8063853828b6116100e7578063853828b6146105b4578063864c9b70146105be5780638da5cb5b146105e957806395d89b4114610614578063a22cb4651461063f57610203565b8063715018a614610520578063813dcee7146105375780638456cb59146105605780638462151c1461057757610203565b806340c10f191161019b5780634e1273f41161016a5780634e1273f41461043b57806359721499146104785780635ea8cd12146104a15780636c0360eb146104ca5780636ff97f1d146104f557610203565b806340c10f191461039057806342966c68146103ac578063474a9995146103d557806349e96fdd146103fe57610203565b806306fdde03116101d757806306fdde03146102d65780630e89341c1461030157806329982aa71461033e5780632eb2c2d61461036757610203565b8062fdd58e1461020857806301ffc9a71461024557806302fe530514610282578063047fc9aa146102ab575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190613d07565b6107e6565b60405161023c9190614c22565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613e2e565b6108af565b6040516102799190614805565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613e88565b610991565b005b3480156102b757600080fd5b506102c06109b3565b6040516102cd9190614c22565b60405180910390f35b3480156102e257600080fd5b506102eb6109c0565b6040516102f89190614820565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613f2d565b610a4e565b6040516103359190614820565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190613f2d565b610a82565b005b34801561037357600080fd5b5061038e60048036038101906103899190613b61565b610a94565b005b6103aa60048036038101906103a59190613d07565b610b35565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613f2d565b610e2a565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613f2d565b610ee3565b005b34801561040a57600080fd5b5061042560048036038101906104209190613e88565b610ef5565b6040516104329190614c22565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190613db6565b611016565b60405161046f91906147ac565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613ed1565b61112f565b005b3480156104ad57600080fd5b506104c860048036038101906104c39190613f2d565b61126a565b005b3480156104d657600080fd5b506104df61127c565b6040516104ec9190614820565b60405180910390f35b34801561050157600080fd5b5061050a61130a565b60405161051791906147ac565b60405180910390f35b34801561052c57600080fd5b50610535611362565b005b34801561054357600080fd5b5061055e60048036038101906105599190613f2d565b611376565b005b34801561056c57600080fd5b50610575611388565b005b34801561058357600080fd5b5061059e60048036038101906105999190613af4565b6113bc565b6040516105ab91906147ac565b60405180910390f35b6105bc611453565b005b3480156105ca57600080fd5b506105d36114f1565b6040516105e0919061478a565b60405180910390f35b3480156105f557600080fd5b506105fe6115d2565b60405161060b91906146ad565b60405180910390f35b34801561062057600080fd5b506106296115fc565b6040516106369190614820565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613cc7565b61168a565b005b34801561067457600080fd5b5061068f600480360381019061068a9190613e88565b6116a0565b005b6106ab60048036038101906106a69190613d47565b61174c565b005b3480156106b957600080fd5b506106c2611c3a565b6040516106cf9190614c22565b60405180910390f35b3480156106e457600080fd5b506106ed611c40565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613e88565b611c74565b6040516107239190614c22565b60405180910390f35b34801561073857600080fd5b50610741611ca7565b60405161074e9190614c22565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613b21565b611cad565b60405161078b9190614805565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613c30565b611d41565b005b3480156107c957600080fd5b506107e460048036038101906107df9190613af4565b611de2565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e90614942565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098a575061098982611e66565b5b9050919050565b610999611ed0565b80600990805190602001906109af9291906136af565b5050565b6000600e80549050905090565b600780546109cd90615015565b80601f01602080910402602001604051908101604052809291908181526020018280546109f990615015565b8015610a465780601f10610a1b57610100808354040283529160200191610a46565b820191906000526020600020905b815481529060010190602001808311610a2957829003601f168201915b505050505081565b60606009610a5b83611f4e565b604051602001610a6c92919061467e565b6040516020818303038152906040529050919050565b610a8a611ed0565b8060118190555050565b610a9c6120af565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ae25750610ae185610adc6120af565b611cad565b5b610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890614862565b60405180910390fd5b610b2e85858585856120b7565b5050505050565b80601260009054906101000a900460ff1615610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d906148a2565b60405180910390fd5b600654811115610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290614aa2565b60405180910390fd5b601054600a6000600b600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90614982565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e906149c2565b60405180910390fd5b60026004541415610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6490614bc2565b60405180910390fd5b600260048190555060055434101580610db85750610d896115d2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90614c02565b60405180910390fd5b610e1383836001604051806020016040528060008152506123d9565b610e1d838361258a565b6001600481905550505050565b600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290614922565b60405180910390fd5b610ed73382600161266f565b610ee0816128b6565b50565b610eeb611ed0565b8060068190555050565b600080600c83604051610f089190614650565b90815260200160405180910390206000015410158015610f4a57506064600c83604051610f359190614650565b90815260200160405180910390206000015411155b610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090614b02565b60405180910390fd5b6000600c83604051610f9b9190614650565b90815260200160405180910390206001015411610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe490614962565b60405180910390fd5b600c82604051610ffd9190614650565b9081526020016040518091039020600001549050919050565b6060815183511461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390614b42565b60405180910390fd5b6000835167ffffffffffffffff811115611079576110786151dd565b5b6040519080825280602002602001820160405280156110a75781602001602082028036833780820191505090505b50905060005b8451811015611124576110f48582815181106110cc576110cb6151ae565b5b60200260200101518583815181106110e7576110e66151ae565b5b60200260200101516107e6565b828281518110611107576111066151ae565b5b6020026020010181815250508061111d90615078565b90506110ad565b508091505092915050565b611137611ed0565b6000600c836040516111499190614650565b9081526020016040518091039020600001541461119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290614be2565b60405180910390fd5b60008160000151101580156111b557506064816000015111155b6111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb90614b02565b60405180910390fd5b80600c836040516112059190614650565b90815260200160405180910390206000820151816000015560208201518160010155905050600f829080600181540180825580915050600190039060005260206000200160009091909190915090805190602001906112659291906136af565b505050565b611272611ed0565b8060058190555050565b6009805461128990615015565b80601f01602080910402602001604051908101604052809291908181526020018280546112b590615015565b80156113025780601f106112d757610100808354040283529160200191611302565b820191906000526020600020905b8154815290600101906020018083116112e557829003601f168201915b505050505081565b6060600e80548060200260200160405190810160405280929190818152602001828054801561135857602002820191906000526020600020905b815481526020019060010190808311611344575b5050505050905090565b61136a611ed0565b6113746000612a96565b565b61137e611ed0565b8060108190555050565b611390611ed0565b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b6060600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561144757602002820191906000526020600020905b815481526020019060010190808311611433575b50505050509050919050565b61145b611ed0565b600260045414156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614bc2565b60405180910390fd5b60026004819055503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506114e757600080fd5b6001600481905550565b60606114fb611ed0565b600f805480602002602001604051908101604052809291908181526020016000905b828210156115c957838290600052602060002001805461153c90615015565b80601f016020809104026020016040519081016040528092919081815260200182805461156890615015565b80156115b55780601f1061158a576101008083540402835291602001916115b5565b820191906000526020600020905b81548152906001019060200180831161159857829003601f168201915b50505050508152602001906001019061151d565b50505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6008805461160990615015565b80601f016020809104026020016040519081016040528092919081815260200182805461163590615015565b80156116825780601f1061165757610100808354040283529160200191611682565b820191906000526020600020905b81548152906001019060200180831161166557829003601f168201915b505050505081565b61169c6116956120af565b8383612b5c565b5050565b6116a8611ed0565b6000600c826040516116ba9190614650565b9081526020016040518091039020600001541161170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614ac2565b60405180910390fd5b600c8160405161171c9190614650565b90815260200160405180910390206000808201600090556001820160009055505061174881600f612cc9565b5050565b81601260009054906101000a900460ff161561179d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611794906148a2565b60405180910390fd5b6006548111156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990614aa2565b60405180910390fd5b601054600a6000600b600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050111561189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614982565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906149c2565b60405180910390fd5b60026004541415611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90614bc2565b60405180910390fd5b6002600481905550601260019054906101000a900460ff16156119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d3906148a2565b60405180910390fd5b6000600c836040516119ee9190614650565b9081526020016040518091039020600101541180611a2e57506000600c83604051611a199190614650565b90815260200160405180910390206000015414155b611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490614b82565b60405180910390fd5b600c82604051611a7d9190614650565b9081526020016040518091039020600001546064611a9b9190614f01565b600554611aa89190614ea7565b606434611ab59190614ea7565b1015611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed906149e2565b60405180910390fd5b601154600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190614ae2565b60405180910390fd5b611b9684846001604051806020016040528060008152506123d9565b611ba0848461258a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bf090615078565b9190505550600c82604051611c059190614650565b90815260200160405180910390206001016000815480929190611c2790614feb565b9190505550600160048190555050505050565b60065481565b611c48611ed0565b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b6000611c7e611ed0565b600c82604051611c8e9190614650565b9081526020016040518091039020600101549050919050565b60055481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d496120af565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611d8f5750611d8e85611d896120af565b611cad565b5b611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590614862565b60405180910390fd5b611ddb8585858585612e07565b5050505050565b611dea611ed0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e51906148c2565b60405180910390fd5b611e6381612a96565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ed86120af565b73ffffffffffffffffffffffffffffffffffffffff16611ef66115d2565b73ffffffffffffffffffffffffffffffffffffffff1614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390614a62565b60405180910390fd5b565b60606000821415611f96576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120aa565b600082905060005b60008214611fc8578080611fb190615078565b915050600a82611fc19190614e76565b9150611f9e565b60008167ffffffffffffffff811115611fe457611fe36151dd565b5b6040519080825280601f01601f1916602001820160405280156120165781602001600182028036833780820191505090505b5090505b600085146120a35760018261202f9190614f01565b9150600a8561203e91906150c1565b603061204a9190614e20565b60f81b8183815181106120605761205f6151ae565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561209c9190614e76565b945061201a565b8093505050505b919050565b600033905090565b81518351146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290614b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561216b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612162906149a2565b60405180910390fd5b60006121756120af565b90506121858187878787876130a3565b60005b84518110156123365760008582815181106121a6576121a56151ae565b5b6020026020010151905060008583815181106121c5576121c46151ae565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90614a42565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461231b9190614e20565b925050819055505050508061232f90615078565b9050612188565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516123ad9291906147ce565b60405180910390a46123c38187878787876130ab565b6123d181878787878761316c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614ba2565b60405180910390fd5b60006124536120af565b9050600061246085613353565b9050600061246d85613353565b905061247e836000898585896130a3565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124dd9190614e20565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161255b929190614c3d565b60405180910390a4612572836000898585896130ab565b612581836000898989896133cd565b50505050505050565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505581600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e8190806001815401808255809150506001900390600052602060002001600090919091909150555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614a22565b60405180910390fd5b60006126e96120af565b905060006126f684613353565b9050600061270384613353565b9050612723838760008585604051806020016040528060008152506130a3565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b1906148e2565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612887929190614c3d565b60405180910390a46128ad848860008686604051806020016040528060008152506130ab565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614a02565b60405180910390fd5b61296481600e6135b4565b6129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a90614902565b60405180910390fd5b612a1e81600a6000600b600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206135b4565b612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5490614a82565b60405180910390fd5b600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290614b22565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cbc9190614805565b60405180910390a3505050565b600080600090505b600e805490508111612dfb5783604051602001612cee9190614650565b60405160208183030381529060405280519060200120838281548110612d1757612d166151ae565b5b90600052602060002001604051602001612d319190614667565b604051602081830303815290604052805190602001201415612de8578260018480549050612d5f9190614f01565b81548110612d7057612d6f6151ae565b5b90600052602060002001838281548110612d8d57612d8c6151ae565b5b90600052602060002001908054612da390615015565b612dae929190613735565b5082805480612dc057612dbf61517f565b5b600190038181906000526020600020016000612ddc91906137c2565b90556001915050612e01565b8080612df390615078565b915050612cd1565b50600090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e906149a2565b60405180910390fd5b6000612e816120af565b90506000612e8e85613353565b90506000612e9b85613353565b9050612eab8389898585896130a3565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3990614a42565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff79190614e20565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051613074929190614c3d565b60405180910390a461308a848a8a86868a6130ab565b613098848a8a8a8a8a6133cd565b505050505050505050565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156131155750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156131645761313e83600081518110613131576131306151ae565b5b60200260200101516128b6565b6131638484600081518110613156576131556151ae565b5b602002602001015161258a565b5b505050505050565b61318b8473ffffffffffffffffffffffffffffffffffffffff1661368c565b1561334b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016131d19594939291906146c8565b602060405180830381600087803b1580156131eb57600080fd5b505af192505050801561321c57506040513d601f19601f820116820180604052508101906132199190613e5b565b60015b6132c25761322861520c565b806308c379a01415613285575061323d615b66565b806132485750613287565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327c9190614820565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b990614842565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334090614882565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115613372576133716151dd565b5b6040519080825280602002602001820160405280156133a05781602001602082028036833780820191505090505b50905082816000815181106133b8576133b76151ae565b5b60200260200101818152505080915050919050565b6133ec8473ffffffffffffffffffffffffffffffffffffffff1661368c565b156135ac578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613432959493929190614730565b602060405180830381600087803b15801561344c57600080fd5b505af192505050801561347d57506040513d601f19601f8201168201806040525081019061347a9190613e5b565b60015b6135235761348961520c565b806308c379a014156134e6575061349e615b66565b806134a957506134e8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd9190614820565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351a90614842565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a190614882565b60405180910390fd5b505b505050505050565b600080600090505b600e80549050811161368057838382815481106135dc576135db6151ae565b5b9060005260206000200154141561366d5782600184805490506135ff9190614f01565b815481106136105761360f6151ae565b5b906000526020600020015483828154811061362e5761362d6151ae565b5b90600052602060002001819055508280548061364d5761364c61517f565b5b600190038181906000526020600020016000905590556001915050613686565b808061367890615078565b9150506135bc565b50600090505b92915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546136bb90615015565b90600052602060002090601f0160209004810192826136dd5760008555613724565b82601f106136f657805160ff1916838001178555613724565b82800160010185558215613724579182015b82811115613723578251825591602001919060010190613708565b5b5090506137319190613802565b5090565b82805461374190615015565b90600052602060002090601f01602090048101928261376357600085556137b1565b82601f1061377457805485556137b1565b828001600101855582156137b157600052602060002091601f016020900482015b828111156137b0578254825591600101919060010190613795565b5b5090506137be9190613802565b5090565b5080546137ce90615015565b6000825580601f106137e057506137ff565b601f0160209004906000526020600020908101906137fe9190613802565b5b50565b5b8082111561381b576000816000905550600101613803565b5090565b600061383261382d84614c8b565b614c66565b9050808382526020820190508285602086028201111561385557613854615238565b5b60005b85811015613885578161386b8882613983565b845260208401935060208301925050600181019050613858565b5050509392505050565b60006138a261389d84614cb7565b614c66565b905080838252602082019050828560208602820111156138c5576138c4615238565b5b60005b858110156138f557816138db8882613adf565b8452602084019350602083019250506001810190506138c8565b5050509392505050565b600061391261390d84614ce3565b614c66565b90508281526020810184848401111561392e5761392d61523d565b5b613939848285614fa9565b509392505050565b600061395461394f84614d14565b614c66565b9050828152602081018484840111156139705761396f61523d565b5b61397b848285614fa9565b509392505050565b60008135905061399281615bfc565b92915050565b600082601f8301126139ad576139ac61522e565b5b81356139bd84826020860161381f565b91505092915050565b600082601f8301126139db576139da61522e565b5b81356139eb84826020860161388f565b91505092915050565b600081359050613a0381615c13565b92915050565b600081359050613a1881615c2a565b92915050565b600081519050613a2d81615c2a565b92915050565b600082601f830112613a4857613a4761522e565b5b8135613a588482602086016138ff565b91505092915050565b600082601f830112613a7657613a7561522e565b5b8135613a86848260208601613941565b91505092915050565b600060408284031215613aa557613aa4615233565b5b613aaf6040614c66565b90506000613abf84828501613adf565b6000830152506020613ad384828501613adf565b60208301525092915050565b600081359050613aee81615c41565b92915050565b600060208284031215613b0a57613b09615247565b5b6000613b1884828501613983565b91505092915050565b60008060408385031215613b3857613b37615247565b5b6000613b4685828601613983565b9250506020613b5785828601613983565b9150509250929050565b600080600080600060a08688031215613b7d57613b7c615247565b5b6000613b8b88828901613983565b9550506020613b9c88828901613983565b945050604086013567ffffffffffffffff811115613bbd57613bbc615242565b5b613bc9888289016139c6565b935050606086013567ffffffffffffffff811115613bea57613be9615242565b5b613bf6888289016139c6565b925050608086013567ffffffffffffffff811115613c1757613c16615242565b5b613c2388828901613a33565b9150509295509295909350565b600080600080600060a08688031215613c4c57613c4b615247565b5b6000613c5a88828901613983565b9550506020613c6b88828901613983565b9450506040613c7c88828901613adf565b9350506060613c8d88828901613adf565b925050608086013567ffffffffffffffff811115613cae57613cad615242565b5b613cba88828901613a33565b9150509295509295909350565b60008060408385031215613cde57613cdd615247565b5b6000613cec85828601613983565b9250506020613cfd858286016139f4565b9150509250929050565b60008060408385031215613d1e57613d1d615247565b5b6000613d2c85828601613983565b9250506020613d3d85828601613adf565b9150509250929050565b600080600060608486031215613d6057613d5f615247565b5b6000613d6e86828701613983565b9350506020613d7f86828701613adf565b925050604084013567ffffffffffffffff811115613da057613d9f615242565b5b613dac86828701613a61565b9150509250925092565b60008060408385031215613dcd57613dcc615247565b5b600083013567ffffffffffffffff811115613deb57613dea615242565b5b613df785828601613998565b925050602083013567ffffffffffffffff811115613e1857613e17615242565b5b613e24858286016139c6565b9150509250929050565b600060208284031215613e4457613e43615247565b5b6000613e5284828501613a09565b91505092915050565b600060208284031215613e7157613e70615247565b5b6000613e7f84828501613a1e565b91505092915050565b600060208284031215613e9e57613e9d615247565b5b600082013567ffffffffffffffff811115613ebc57613ebb615242565b5b613ec884828501613a61565b91505092915050565b60008060608385031215613ee857613ee7615247565b5b600083013567ffffffffffffffff811115613f0657613f05615242565b5b613f1285828601613a61565b9250506020613f2385828601613a8f565b9150509250929050565b600060208284031215613f4357613f42615247565b5b6000613f5184828501613adf565b91505092915050565b6000613f6683836140b0565b905092915050565b6000613f7a8383614632565b60208301905092915050565b613f8f81614f35565b82525050565b6000613fa082614d7a565b613faa8185614dc0565b935083602082028501613fbc85614d45565b8060005b85811015613ff85784840389528151613fd98582613f5a565b9450613fe483614da6565b925060208a01995050600181019050613fc0565b50829750879550505050505092915050565b600061401582614d85565b61401f8185614dd1565b935061402a83614d55565b8060005b8381101561405b5781516140428882613f6e565b975061404d83614db3565b92505060018101905061402e565b5085935050505092915050565b61407181614f47565b82525050565b600061408282614d90565b61408c8185614de2565b935061409c818560208601614fb8565b6140a58161524c565b840191505092915050565b60006140bb82614d9b565b6140c58185614df3565b93506140d5818560208601614fb8565b6140de8161524c565b840191505092915050565b60006140f482614d9b565b6140fe8185614e04565b935061410e818560208601614fb8565b6141178161524c565b840191505092915050565b600061412d82614d9b565b6141378185614e15565b9350614147818560208601614fb8565b80840191505092915050565b6000815461416081615015565b61416a8186614e15565b945060018216600081146141855760018114614196576141c9565b60ff198316865281860193506141c9565b61419f85614d65565b60005b838110156141c1578154818901526001820191506020810190506141a2565b838801955050505b50505092915050565b60006141df603483614e04565b91506141ea8261526a565b604082019050919050565b6000614202602f83614e04565b915061420d826152b9565b604082019050919050565b6000614225602883614e04565b915061423082615308565b604082019050919050565b6000614248602383614e04565b915061425382615357565b604082019050919050565b600061426b602683614e04565b9150614276826153a6565b604082019050919050565b600061428e602483614e04565b9150614299826153f5565b604082019050919050565b60006142b1603383614e04565b91506142bc82615444565b604082019050919050565b60006142d4601983614e04565b91506142df82615493565b602082019050919050565b60006142f7602a83614e04565b9150614302826154bc565b604082019050919050565b600061431a602383614e04565b91506143258261550b565b604082019050919050565b600061433d603b83614e04565b91506143488261555a565b604082019050919050565b6000614360602583614e04565b915061436b826155a9565b604082019050919050565b6000614383602783614e04565b915061438e826155f8565b604082019050919050565b60006143a6602b83614e04565b91506143b182615647565b604082019050919050565b60006143c9603383614e04565b91506143d482615696565b604082019050919050565b60006143ec602383614e04565b91506143f7826156e5565b604082019050919050565b600061440f602a83614e04565b915061441a82615734565b604082019050919050565b6000614432600583614e15565b915061443d82615783565b600582019050919050565b6000614455602083614e04565b9150614460826157ac565b602082019050919050565b6000614478603183614e04565b9150614483826157d5565b604082019050919050565b600061449b601d83614e04565b91506144a682615824565b602082019050919050565b60006144be601f83614e04565b91506144c98261584d565b602082019050919050565b60006144e1604d83614e04565b91506144ec82615876565b606082019050919050565b6000614504602d83614e04565b915061450f826158eb565b604082019050919050565b6000614527602983614e04565b91506145328261593a565b604082019050919050565b600061454a602983614e04565b915061455582615989565b604082019050919050565b600061456d602883614e04565b9150614578826159d8565b604082019050919050565b6000614590602883614e04565b915061459b82615a27565b604082019050919050565b60006145b3602183614e04565b91506145be82615a76565b604082019050919050565b60006145d6601f83614e04565b91506145e182615ac5565b602082019050919050565b60006145f9601f83614e04565b915061460482615aee565b602082019050919050565b600061461c602d83614e04565b915061462782615b17565b604082019050919050565b61463b81614f9f565b82525050565b61464a81614f9f565b82525050565b600061465c8284614122565b915081905092915050565b60006146738284614153565b915081905092915050565b600061468a8285614153565b91506146968284614122565b91506146a182614425565b91508190509392505050565b60006020820190506146c26000830184613f86565b92915050565b600060a0820190506146dd6000830188613f86565b6146ea6020830187613f86565b81810360408301526146fc818661400a565b90508181036060830152614710818561400a565b905081810360808301526147248184614077565b90509695505050505050565b600060a0820190506147456000830188613f86565b6147526020830187613f86565b61475f6040830186614641565b61476c6060830185614641565b818103608083015261477e8184614077565b90509695505050505050565b600060208201905081810360008301526147a48184613f95565b905092915050565b600060208201905081810360008301526147c6818461400a565b905092915050565b600060408201905081810360008301526147e8818561400a565b905081810360208301526147fc818461400a565b90509392505050565b600060208201905061481a6000830184614068565b92915050565b6000602082019050818103600083015261483a81846140e9565b905092915050565b6000602082019050818103600083015261485b816141d2565b9050919050565b6000602082019050818103600083015261487b816141f5565b9050919050565b6000602082019050818103600083015261489b81614218565b9050919050565b600060208201905081810360008301526148bb8161423b565b9050919050565b600060208201905081810360008301526148db8161425e565b9050919050565b600060208201905081810360008301526148fb81614281565b9050919050565b6000602082019050818103600083015261491b816142a4565b9050919050565b6000602082019050818103600083015261493b816142c7565b9050919050565b6000602082019050818103600083015261495b816142ea565b9050919050565b6000602082019050818103600083015261497b8161430d565b9050919050565b6000602082019050818103600083015261499b81614330565b9050919050565b600060208201905081810360008301526149bb81614353565b9050919050565b600060208201905081810360008301526149db81614376565b9050919050565b600060208201905081810360008301526149fb81614399565b9050919050565b60006020820190508181036000830152614a1b816143bc565b9050919050565b60006020820190508181036000830152614a3b816143df565b9050919050565b60006020820190508181036000830152614a5b81614402565b9050919050565b60006020820190508181036000830152614a7b81614448565b9050919050565b60006020820190508181036000830152614a9b8161446b565b9050919050565b60006020820190508181036000830152614abb8161448e565b9050919050565b60006020820190508181036000830152614adb816144b1565b9050919050565b60006020820190508181036000830152614afb816144d4565b9050919050565b60006020820190508181036000830152614b1b816144f7565b9050919050565b60006020820190508181036000830152614b3b8161451a565b9050919050565b60006020820190508181036000830152614b5b8161453d565b9050919050565b60006020820190508181036000830152614b7b81614560565b9050919050565b60006020820190508181036000830152614b9b81614583565b9050919050565b60006020820190508181036000830152614bbb816145a6565b9050919050565b60006020820190508181036000830152614bdb816145c9565b9050919050565b60006020820190508181036000830152614bfb816145ec565b9050919050565b60006020820190508181036000830152614c1b8161460f565b9050919050565b6000602082019050614c376000830184614641565b92915050565b6000604082019050614c526000830185614641565b614c5f6020830184614641565b9392505050565b6000614c70614c81565b9050614c7c8282615047565b919050565b6000604051905090565b600067ffffffffffffffff821115614ca657614ca56151dd565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cd257614cd16151dd565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cfe57614cfd6151dd565b5b614d078261524c565b9050602081019050919050565b600067ffffffffffffffff821115614d2f57614d2e6151dd565b5b614d388261524c565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e2b82614f9f565b9150614e3683614f9f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e6b57614e6a6150f2565b5b828201905092915050565b6000614e8182614f9f565b9150614e8c83614f9f565b925082614e9c57614e9b615121565b5b828204905092915050565b6000614eb282614f9f565b9150614ebd83614f9f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ef657614ef56150f2565b5b828202905092915050565b6000614f0c82614f9f565b9150614f1783614f9f565b925082821015614f2a57614f296150f2565b5b828203905092915050565b6000614f4082614f7f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614fd6578082015181840152602081019050614fbb565b83811115614fe5576000848401525b50505050565b6000614ff682614f9f565b9150600082141561500a576150096150f2565b5b600182039050919050565b6000600282049050600182168061502d57607f821691505b6020821081141561504157615040615150565b5b50919050565b6150508261524c565b810181811067ffffffffffffffff8211171561506f5761506e6151dd565b5b80604052505050565b600061508382614f9f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150b6576150b56150f2565b5b600182019050919050565b60006150cc82614f9f565b91506150d783614f9f565b9250826150e7576150e6615121565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561522b5760046000803e61522860005161525d565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a204e46542073616c657320617265206f6e20706160008201527f7573650000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20746f6b656e207761736e277420666f756e642060008201527f616d6f6e67206d696e74656420746f6b656e7300000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e206275726e20746f6b656e00000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a2073656372657420636f6465206973206578706960008201527f7265640000000000000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20796f7520657863656564656420746865206d6160008201527f78206e756d626572206f6620746f6b656e732070657220757365720000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a205468697320746f6b656e20686173206265656e60008201527f206d696e74656400000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a207072696365206973206c6f776572207468616e60008201527f20646973636f756e746564000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20746f6b656e207769746820746869732069642060008201527f686173206e6f74206265656e206d696e74656400000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e69667479206572726f723a20746f6b656e207761736e277420666f756e642060008201527f616d6f6e67207573657220746f6b656e73000000000000000000000000000000602082015250565b7f4e69667479206572726f723a204e6f7420656e6f7567682073746f636b000000600082015250565b7f4e69667479206572726f723a20636f646520646f65736e277420657869737400600082015250565b7f4e69667479206572726f723a20796f7520657863656564656420746865206d6160008201527f78206e756d626572206f6620746f6b656e73207065722075736572207769746860208201527f2073656372657420636f64657300000000000000000000000000000000000000604082015250565b7f4e69667479206572726f723a20636f64652076616c75652069736e277420776960008201527f7468696e205b302c203130305d00000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4e69667479206572726f723a20636f64652069736e27742076616c6964206f7260008201527f2065787069726564000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4e69667479206572726f723a20636f646520616c726561647920657869737400600082015250565b7f4e69667479206572726f723a204d696e74696e67206665652069732062656c6f60008201527f7720666c6f6f7220707269636500000000000000000000000000000000000000602082015250565b600060443d1015615b7657615bf9565b615b7e614c81565b60043d036004823e80513d602482011167ffffffffffffffff82111715615ba6575050615bf9565b808201805167ffffffffffffffff811115615bc45750505050615bf9565b80602083010160043d038501811115615be1575050505050615bf9565b615bf082602001850186615047565b82955050505050505b90565b615c0581614f35565b8114615c1057600080fd5b50565b615c1c81614f47565b8114615c2757600080fd5b50565b615c3381614f53565b8114615c3e57600080fd5b50565b615c4a81614f9f565b8114615c5557600080fd5b5056fea26469706673582212206871dceb07fc3b6377dd3d25dcb7e5019dfec446da5830e947a11b49bd70cf1964736f6c63430008070033

Deployed Bytecode Sourcemap

20801:6754:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10671:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10240:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25124:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24197:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21064:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24528:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25322:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12195:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22105:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23803:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25040:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23461:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10909:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25450:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24944:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21112:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24100:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3202:103;;;;;;;;;;;;;:::i;:::-;;25218:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24776:63;;;;;;;;;;;;;:::i;:::-;;23979:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26024:130;;;:::i;:::-;;24289:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2967:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21087:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11441:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25801:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22398:702;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21032:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24845:93;;;;;;;;;;;;;:::i;:::-;;24397:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20963:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11604:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11780:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3313:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10671:230;10757:7;10804:1;10785:21;;:7;:21;;;;10777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10871:9;:13;10881:2;10871:13;;;;;;;;;;;:22;10885:7;10871:22;;;;;;;;;;;;;;;;10864:29;;10671:230;;;;:::o;10240:310::-;10342:4;10394:26;10379:41;;;:11;:41;;;;:110;;;;10452:37;10437:52;;;:11;:52;;;;10379:110;:163;;;;10506:36;10530:11;10506:23;:36::i;:::-;10379:163;10359:183;;10240:310;;;:::o;25124:88::-;2926:13;:11;:13::i;:::-;25198:8:::1;25188:7;:18;;;;;;;;;;;;:::i;:::-;;25124:88:::0;:::o;24197:86::-;24235:7;24258:12;:19;;;;24251:26;;24197:86;:::o;21064:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24528:215::-;24584:13;24661:7;24683:14;:3;:12;:14::i;:::-;24630:100;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24606:131;;24528:215;;;:::o;25322:122::-;2926:13;:11;:13::i;:::-;25421:17:::1;25402:16;:36;;;;25322:122:::0;:::o;12195:439::-;12436:12;:10;:12::i;:::-;12428:20;;:4;:20;;;:60;;;;12452:36;12469:4;12475:12;:10;:12::i;:::-;12452:16;:36::i;:::-;12428:60;12406:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;12574:52;12597:4;12603:2;12607:3;12612:7;12621:4;12574:22;:52::i;:::-;12195:439;;;;;:::o;22105:287::-;22193:3;21761:6;;;;;;;;;;;21760:7;21752:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21829:5;;21822:3;:12;;21814:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;21922:10;;21883;:28;21894:11;:16;21906:3;21894:16;;;;;;;;;;;;;;;;;;;;;21883:28;;;;;;;;;;;;;;;:35;;;;:49;;21875:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22039:1;22011:30;;:11;:16;22023:3;22011:16;;;;;;;;;;;;;;;;;;;;;:30;;;22003:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;187:1:::1;407:7;;:19;;399:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;187:1;540:7;:18;;;;22249:8:::2;;22236:9;:21;;:46;;;;22275:7;:5;:7::i;:::-;22261:21;;:10;:21;;;22236:46;22228:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;22339:22;22345:3;22350;22355:1;22339:22;;;;;;;;;;;::::0;:5:::2;:22::i;:::-;22368:18;22377:3;22382;22368:8;:18::i;:::-;143:1:::1;719:7;:22;;;;22105:287:::0;;;:::o;23803:170::-;23866:11;:16;23878:3;23866:16;;;;;;;;;;;;;;;;;;;;;23852:30;;:10;:30;;;23844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23919:25;23925:10;23937:3;23942:1;23919:5;:25::i;:::-;23951:16;23963:3;23951:11;:16::i;:::-;23803:170;:::o;25040:78::-;2926:13;:11;:13::i;:::-;25106:6:::1;25098:5;:14;;;;25040:78:::0;:::o;23461:336::-;23542:7;23595:1;23570:5;23576;23570:12;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;:26;;:58;;;;;23625:3;23600:5;23606;23600:12;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;:28;;23570:58;23562:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;23715:1;23693:5;23699;23693:12;;;;;;:::i;:::-;;;;;;;;;;;;;:19;;;:23;23685:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23770:5;23776;23770:12;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;23763:28;;23461:336;;;:::o;10909:524::-;11065:16;11126:3;:10;11107:8;:15;:29;11099:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;11195:30;11242:8;:15;11228:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11195:63;;11276:9;11271:122;11295:8;:15;11291:1;:19;11271:122;;;11351:30;11361:8;11370:1;11361:11;;;;;;;;:::i;:::-;;;;;;;;11374:3;11378:1;11374:6;;;;;;;;:::i;:::-;;;;;;;;11351:9;:30::i;:::-;11332:13;11346:1;11332:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;11312:3;;;;:::i;:::-;;;11271:122;;;;11412:13;11405:20;;;10909:524;;;;:::o;25450:345::-;2926:13;:11;:13::i;:::-;25570:1:::1;25545:5;25551;25545:12;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;:26;25537:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25646:1;25622:11;:20;;;:25;;:56;;;;;25675:3;25651:11;:20;;;:27;;25622:56;25614:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;25750:11;25735:5;25741;25735:12;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;;25768:9;25783:5;25768:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25450:345:::0;;:::o;24944:90::-;2926:13;:11;:13::i;:::-;25019:9:::1;25008:8;:20;;;;24944:90:::0;:::o;21112:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24100:91::-;24141:16;24173:12;24166:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24100:91;:::o;3202:103::-;2926:13;:11;:13::i;:::-;3267:30:::1;3294:1;3267:18;:30::i;:::-;3202:103::o:0;25218:98::-;2926:13;:11;:13::i;:::-;25299:11:::1;25286:10;:24;;;;25218:98:::0;:::o;24776:63::-;2926:13;:11;:13::i;:::-;24827:6:::1;;;;;;;;;;;24826:7;24817:6;;:16;;;;;;;;;;;;;;;;;;24776:63::o:0;23979:115::-;24038:16;24070:10;:18;24081:6;24070:18;;;;;;;;;;;;;;;24063:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23979:115;;;:::o;26024:130::-;2926:13;:11;:13::i;:::-;187:1:::1;407:7;;:19;;399:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;187:1;540:7;:18;;;;26108:10:::2;26100:24;;:47;26125:21;26100:47;;;;;;;;;;;;;;;;;;;;;;;26092:56;;;::::0;::::2;;143:1:::1;719:7;:22;;;;26024:130::o:0;24289:102::-;24345:15;2926:13;:11;:13::i;:::-;24376:9:::1;24369:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24289:102:::0;:::o;2967:87::-;3013:7;3040:6;;;;;;;;;;;3033:13;;2967:87;:::o;21087:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11441:155::-;11536:52;11555:12;:10;:12::i;:::-;11569:8;11579;11536:18;:52::i;:::-;11441:155;;:::o;25801:217::-;2926:13;:11;:13::i;:::-;25898:1:::1;25874:5;25880;25874:12;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;:25;25866:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25949:5;25955;25949:12;;;;;;:::i;:::-;;;;;;;;;;;;;;25942:19:::0;::::1;;;;;;;;;;;;;25968:44;25995:5;26002:9;25968:26;:44::i;:::-;;25801:217:::0;:::o;22398:702::-;22513:3;21761:6;;;;;;;;;;;21760:7;21752:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21829:5;;21822:3;:12;;21814:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;21922:10;;21883;:28;21894:11;:16;21906:3;21894:16;;;;;;;;;;;;;;;;;;;;;21883:28;;;;;;;;;;;;;;;:35;;;;:49;;21875:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22039:1;22011:30;;:11;:16;22023:3;22011:16;;;;;;;;;;;;;;;;;;;;;:30;;;22003:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;187:1:::1;407:7;;:19;;399:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;187:1;540:7;:18;;;;22557:16:::2;;;;;;;;;;;22556:17;22548:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22650:1;22628:5;22634;22628:12;;;;;;:::i;:::-;;;;;;;;;;;;;:19;;;:23;:53;;;;22680:1;22655:5;22661;22655:12;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;:26;;22628:53;22620:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;22772:5;22778;22772:12;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;22768:3;:25;;;;:::i;:::-;22758:8;;:36;;;;:::i;:::-;22751:3;22741:9;:13;;;;:::i;:::-;:53;;22733:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;22883:16;;22857:17;:22;22875:3;22857:22;;;;;;;;;;;;;;;;:42;;22849:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;22988:22;22994:3;22999;23004:1;22988:22;;;;;;;;;;;::::0;:5:::2;:22::i;:::-;23017:18;23026:3;23031;23017:8;:18::i;:::-;23042:17;:22;23060:3;23042:22;;;;;;;;;;;;;;;;:24;;;;;;;;;:::i;:::-;;;;;;23073:5;23079;23073:12;;;;;;:::i;:::-;;;;;;;;;;;;;:19;;;:21;;;;;;;;;:::i;:::-;;;;;;143:1:::1;719:7;:22;;;;22398:702:::0;;;;:::o;21032:27::-;;;;:::o;24845:93::-;2926:13;:11;:13::i;:::-;24916:16:::1;;;;;;;;;;;24915:17;24896:16;;:36;;;;;;;;;;;;;;;;;;24845:93::o:0;24397:125::-;24474:7;2926:13;:11;:13::i;:::-;24497:5:::1;24503;24497:12;;;;;;:::i;:::-;;;;;;;;;;;;;:19;;;24490:26;;24397:125:::0;;;:::o;20963:36::-;;;;:::o;11604:168::-;11703:4;11727:18;:27;11746:7;11727:27;;;;;;;;;;;;;;;:37;11755:8;11727:37;;;;;;;;;;;;;;;;;;;;;;;;;11720:44;;11604:168;;;;:::o;11780:407::-;11996:12;:10;:12::i;:::-;11988:20;;:4;:20;;;:60;;;;12012:36;12029:4;12035:12;:10;:12::i;:::-;12012:16;:36::i;:::-;11988:60;11966:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;12134:45;12152:4;12158:2;12162;12166:6;12174:4;12134:17;:45::i;:::-;11780:407;;;;;:::o;3313:201::-;2926:13;:11;:13::i;:::-;3422:1:::1;3402:22;;:8;:22;;;;3394:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3478:28;3497:8;3478:18;:28::i;:::-;3313:201:::0;:::o;7754:157::-;7839:4;7878:25;7863:40;;;:11;:40;;;;7856:47;;7754:157;;;:::o;3062:132::-;3137:12;:10;:12::i;:::-;3126:23;;:7;:5;:7::i;:::-;:23;;;3118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3062:132::o;898:532::-;954:13;993:1;984:5;:10;980:53;;;1011:10;;;;;;;;;;;;;;;;;;;;;980:53;1043:12;1058:5;1043:20;;1074:14;1099:78;1114:1;1106:4;:9;1099:78;;1132:8;;;;;:::i;:::-;;;;1163:2;1155:10;;;;;:::i;:::-;;;1099:78;;;1187:19;1219:6;1209:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1187:39;;1237:154;1253:1;1244:5;:10;1237:154;;1281:1;1271:11;;;;;:::i;:::-;;;1348:2;1340:5;:10;;;;:::i;:::-;1327:2;:24;;;;:::i;:::-;1314:39;;1297:6;1304;1297:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1377:2;1368:11;;;;;:::i;:::-;;;1237:154;;;1415:6;1401:21;;;;;898:532;;;;:::o;2438:98::-;2491:7;2518:10;2511:17;;2438:98;:::o;13624:1146::-;13851:7;:14;13837:3;:10;:28;13829:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13943:1;13929:16;;:2;:16;;;;13921:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;14000:16;14019:12;:10;:12::i;:::-;14000:31;;14044:60;14065:8;14075:4;14081:2;14085:3;14090:7;14099:4;14044:20;:60::i;:::-;14122:9;14117:421;14141:3;:10;14137:1;:14;14117:421;;;14173:10;14186:3;14190:1;14186:6;;;;;;;;:::i;:::-;;;;;;;;14173:19;;14207:14;14224:7;14232:1;14224:10;;;;;;;;:::i;:::-;;;;;;;;14207:27;;14251:19;14273:9;:13;14283:2;14273:13;;;;;;;;;;;:19;14287:4;14273:19;;;;;;;;;;;;;;;;14251:41;;14330:6;14315:11;:21;;14307:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;14463:6;14449:11;:20;14427:9;:13;14437:2;14427:13;;;;;;;;;;;:19;14441:4;14427:19;;;;;;;;;;;;;;;:42;;;;14520:6;14499:9;:13;14509:2;14499:13;;;;;;;;;;;:17;14513:2;14499:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;14158:380;;;14153:3;;;;:::i;:::-;;;14117:421;;;;14585:2;14555:47;;14579:4;14555:47;;14569:8;14555:47;;;14589:3;14594:7;14555:47;;;;;;;:::i;:::-;;;;;;;;14615:59;14635:8;14645:4;14651:2;14655:3;14660:7;14669:4;14615:19;:59::i;:::-;14687:75;14723:8;14733:4;14739:2;14743:3;14748:7;14757:4;14687:35;:75::i;:::-;13818:952;13624:1146;;;;;:::o;14874:729::-;15041:1;15027:16;;:2;:16;;;;15019:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15094:16;15113:12;:10;:12::i;:::-;15094:31;;15136:20;15159:21;15177:2;15159:17;:21::i;:::-;15136:44;;15191:24;15218:25;15236:6;15218:17;:25::i;:::-;15191:52;;15256:66;15277:8;15295:1;15299:2;15303:3;15308:7;15317:4;15256:20;:66::i;:::-;15356:6;15335:9;:13;15345:2;15335:13;;;;;;;;;;;:17;15349:2;15335:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;15415:2;15378:52;;15411:1;15378:52;;15393:8;15378:52;;;15419:2;15423:6;15378:52;;;;;;;:::i;:::-;;;;;;;;15443:65;15463:8;15481:1;15485:2;15489:3;15494:7;15503:4;15443:19;:65::i;:::-;15521:74;15552:8;15570:1;15574:2;15578;15582:6;15590:4;15521:30;:74::i;:::-;15008:595;;;14874:729;;;;:::o;26183:145::-;26239:10;:15;26250:3;26239:15;;;;;;;;;;;;;;;26260:3;26239:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26290:3;26271:11;:16;26283:3;26271:16;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;26300:12;26318:3;26300:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:145;;:::o;16432:808::-;16575:1;16559:18;;:4;:18;;;;16551:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;16630:16;16649:12;:10;:12::i;:::-;16630:31;;16672:20;16695:21;16713:2;16695:17;:21::i;:::-;16672:44;;16727:24;16754:25;16772:6;16754:17;:25::i;:::-;16727:52;;16792:66;16813:8;16823:4;16837:1;16841:3;16846:7;16792:66;;;;;;;;;;;;:20;:66::i;:::-;16871:19;16893:9;:13;16903:2;16893:13;;;;;;;;;;;:19;16907:4;16893:19;;;;;;;;;;;;;;;;16871:41;;16946:6;16931:11;:21;;16923:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17065:6;17051:11;:20;17029:9;:13;17039:2;17029:13;;;;;;;;;;;:19;17043:4;17029:19;;;;;;;;;;;;;;;:42;;;;17139:1;17100:54;;17125:4;17100:54;;17115:8;17100:54;;;17143:2;17147:6;17100:54;;;;;;;:::i;:::-;;;;;;;;17167:65;17187:8;17197:4;17211:1;17215:3;17220:7;17167:65;;;;;;;;;;;;:19;:65::i;:::-;16540:700;;;;16432:808;;;:::o;26334:509::-;26420:1;26392:30;;:11;:16;26404:3;26392:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26383:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;26526:39;26547:3;26552:12;26526:20;:39::i;:::-;26517:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;26667:55;26688:3;26693:10;:28;26704:11;:16;26716:3;26704:16;;;;;;;;;;;;;;;;;;;;;26693:28;;;;;;;;;;;;;;;26667:20;:55::i;:::-;26658:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;26821:11;:16;26833:3;26821:16;;;;;;;;;;;;26814:23;;;;;;;;;;;26334:509;:::o;3522:191::-;3596:16;3615:6;;;;;;;;;;;3596:25;;3641:8;3632:6;;:17;;;;;;;;;;;;;;;;;;3696:8;3665:40;;3686:8;3665:40;;;;;;;;;;;;3585:128;3522:191;:::o;18225:331::-;18380:8;18371:17;;:5;:17;;;;18363:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18483:8;18445:18;:25;18464:5;18445:25;;;;;;;;;;;;;;;:35;18471:8;18445:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18529:8;18507:41;;18522:5;18507:41;;;18539:8;18507:41;;;;;;:::i;:::-;;;;;;;;18225:331;;;:::o;27163:387::-;27261:4;27279:9;27291:1;27279:13;;27274:252;27299:12;:19;;;;27294:1;:24;27274:252;;27409:6;27391:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;27381:37;;;;;;27366:5;27372:1;27366:8;;;;;;;;:::i;:::-;;;;;;;;;27348:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;27338:39;;;;;;:80;27334:185;;;27442:5;27463:1;27448:5;:12;;;;:16;;;;:::i;:::-;27442:23;;;;;;;;:::i;:::-;;;;;;;;;27431:5;27437:1;27431:8;;;;;;;;:::i;:::-;;;;;;;;;:34;;;;;;:::i;:::-;;;;;;:::i;:::-;;27476:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27505:4;27498:11;;;;;27334:185;27320:3;;;;;:::i;:::-;;;;27274:252;;;;27539:5;27532:12;;27163:387;;;;;:::o;12642:974::-;12844:1;12830:16;;:2;:16;;;;12822:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12901:16;12920:12;:10;:12::i;:::-;12901:31;;12943:20;12966:21;12984:2;12966:17;:21::i;:::-;12943:44;;12998:24;13025:25;13043:6;13025:17;:25::i;:::-;12998:52;;13063:60;13084:8;13094:4;13100:2;13104:3;13109:7;13118:4;13063:20;:60::i;:::-;13136:19;13158:9;:13;13168:2;13158:13;;;;;;;;;;;:19;13172:4;13158:19;;;;;;;;;;;;;;;;13136:41;;13211:6;13196:11;:21;;13188:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;13336:6;13322:11;:20;13300:9;:13;13310:2;13300:13;;;;;;;;;;;:19;13314:4;13300:19;;;;;;;;;;;;;;;:42;;;;13385:6;13364:9;:13;13374:2;13364:13;;;;;;;;;;;:17;13378:2;13364:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;13440:2;13409:46;;13434:4;13409:46;;13424:8;13409:46;;;13444:2;13448:6;13409:46;;;;;;;:::i;:::-;;;;;;;;13468:59;13488:8;13498:4;13504:2;13508:3;13513:7;13522:4;13468:19;:59::i;:::-;13540:68;13571:8;13581:4;13587:2;13591;13595:6;13603:4;13540:30;:68::i;:::-;12811:805;;;;12642:974;;;;;:::o;18564:221::-;;;;;;;:::o;23106:349::-;23361:1;23345:18;;:4;:18;;;;:38;;;;;23381:1;23367:16;;:2;:16;;;;23345:38;23341:109;;;23394:19;23406:3;23410:1;23406:6;;;;;;;;:::i;:::-;;;;;;;;23394:11;:19::i;:::-;23422:20;23431:2;23435:3;23439:1;23435:6;;;;;;;;:::i;:::-;;;;;;;;23422:8;:20::i;:::-;23341:109;23106:349;;;;;;:::o;19773:813::-;20013:15;:2;:13;;;:15::i;:::-;20009:570;;;20066:2;20049:43;;;20093:8;20103:4;20109:3;20114:7;20123:4;20049:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20045:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;20441:6;20434:14;;;;;;;;;;;:::i;:::-;;;;;;;;20045:523;;;20490:62;;;;;;;;;;:::i;:::-;;;;;;;;20045:523;20222:48;;;20210:60;;;:8;:60;;;;20206:159;;20295:50;;;;;;;;;;:::i;:::-;;;;;;;;20206:159;20129:251;20009:570;19773:813;;;;;;:::o;20594:198::-;20660:16;20689:22;20728:1;20714:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20689:41;;20752:7;20741:5;20747:1;20741:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;20779:5;20772:12;;;20594:198;;;:::o;19021:744::-;19236:15;:2;:13;;;:15::i;:::-;19232:526;;;19289:2;19272:38;;;19311:8;19321:4;19327:2;19331:6;19339:4;19272:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19268:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;19620:6;19613:14;;;;;;;;;;;:::i;:::-;;;;;;;;19268:479;;;19669:62;;;;;;;;;;:::i;:::-;;;;;;;;19268:479;19406:43;;;19394:55;;;:8;:55;;;;19390:154;;19474:50;;;;;;;;;;:::i;:::-;;;;;;;;19390:154;19345:214;19232:526;19021:744;;;;;;:::o;26849:308::-;26933:4;26951:9;26963:1;26951:13;;26946:187;26971:12;:19;;;;26966:1;:24;26946:187;;27022:3;27010:5;27016:1;27010:8;;;;;;;;:::i;:::-;;;;;;;;;;:15;27006:120;;;27049:5;27070:1;27055:5;:12;;;;:16;;;;:::i;:::-;27049:23;;;;;;;;:::i;:::-;;;;;;;;;;27038:5;27044:1;27038:8;;;;;;;;:::i;:::-;;;;;;;;;:34;;;;27083:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27112:4;27105:11;;;;;27006:120;26992:3;;;;;:::i;:::-;;;;26946:187;;;;27146:5;27139:12;;26849:308;;;;;:::o;3745:324::-;3805:4;4060:1;4038:7;:19;;;:23;4031:30;;3745:324;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4438:577::-;4509:5;4553:4;4541:9;4536:3;4532:19;4528:30;4525:117;;;4561:79;;:::i;:::-;4525:117;4660:21;4676:4;4660:21;:::i;:::-;4651:30;;4744:1;4784:49;4829:3;4820:6;4809:9;4805:22;4784:49;:::i;:::-;4777:4;4770:5;4766:16;4759:75;4691:154;4906:2;4947:49;4992:3;4983:6;4972:9;4968:22;4947:49;:::i;:::-;4940:4;4933:5;4929:16;4922:75;4855:153;4438:577;;;;:::o;5021:139::-;5067:5;5105:6;5092:20;5083:29;;5121:33;5148:5;5121:33;:::i;:::-;5021:139;;;;:::o;5166:329::-;5225:6;5274:2;5262:9;5253:7;5249:23;5245:32;5242:119;;;5280:79;;:::i;:::-;5242:119;5400:1;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5371:117;5166:329;;;;:::o;5501:474::-;5569:6;5577;5626:2;5614:9;5605:7;5601:23;5597:32;5594:119;;;5632:79;;:::i;:::-;5594:119;5752:1;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;:::i;:::-;5767:63;;5723:117;5879:2;5905:53;5950:7;5941:6;5930:9;5926:22;5905:53;:::i;:::-;5895:63;;5850:118;5501:474;;;;;:::o;5981:1509::-;6135:6;6143;6151;6159;6167;6216:3;6204:9;6195:7;6191:23;6187:33;6184:120;;;6223:79;;:::i;:::-;6184:120;6343:1;6368:53;6413:7;6404:6;6393:9;6389:22;6368:53;:::i;:::-;6358:63;;6314:117;6470:2;6496:53;6541:7;6532:6;6521:9;6517:22;6496:53;:::i;:::-;6486:63;;6441:118;6626:2;6615:9;6611:18;6598:32;6657:18;6649:6;6646:30;6643:117;;;6679:79;;:::i;:::-;6643:117;6784:78;6854:7;6845:6;6834:9;6830:22;6784:78;:::i;:::-;6774:88;;6569:303;6939:2;6928:9;6924:18;6911:32;6970:18;6962:6;6959:30;6956:117;;;6992:79;;:::i;:::-;6956:117;7097:78;7167:7;7158:6;7147:9;7143:22;7097:78;:::i;:::-;7087:88;;6882:303;7252:3;7241:9;7237:19;7224:33;7284:18;7276:6;7273:30;7270:117;;;7306:79;;:::i;:::-;7270:117;7411:62;7465:7;7456:6;7445:9;7441:22;7411:62;:::i;:::-;7401:72;;7195:288;5981:1509;;;;;;;;:::o;7496:1089::-;7600:6;7608;7616;7624;7632;7681:3;7669:9;7660:7;7656:23;7652:33;7649:120;;;7688:79;;:::i;:::-;7649:120;7808:1;7833:53;7878:7;7869:6;7858:9;7854:22;7833:53;:::i;:::-;7823:63;;7779:117;7935:2;7961:53;8006:7;7997:6;7986:9;7982:22;7961:53;:::i;:::-;7951:63;;7906:118;8063:2;8089:53;8134:7;8125:6;8114:9;8110:22;8089:53;:::i;:::-;8079:63;;8034:118;8191:2;8217:53;8262:7;8253:6;8242:9;8238:22;8217:53;:::i;:::-;8207:63;;8162:118;8347:3;8336:9;8332:19;8319:33;8379:18;8371:6;8368:30;8365:117;;;8401:79;;:::i;:::-;8365:117;8506:62;8560:7;8551:6;8540:9;8536:22;8506:62;:::i;:::-;8496:72;;8290:288;7496:1089;;;;;;;;:::o;8591:468::-;8656:6;8664;8713:2;8701:9;8692:7;8688:23;8684:32;8681:119;;;8719:79;;:::i;:::-;8681:119;8839:1;8864:53;8909:7;8900:6;8889:9;8885:22;8864:53;:::i;:::-;8854:63;;8810:117;8966:2;8992:50;9034:7;9025:6;9014:9;9010:22;8992:50;:::i;:::-;8982:60;;8937:115;8591:468;;;;;:::o;9065:474::-;9133:6;9141;9190:2;9178:9;9169:7;9165:23;9161:32;9158:119;;;9196:79;;:::i;:::-;9158:119;9316:1;9341:53;9386:7;9377:6;9366:9;9362:22;9341:53;:::i;:::-;9331:63;;9287:117;9443:2;9469:53;9514:7;9505:6;9494:9;9490:22;9469:53;:::i;:::-;9459:63;;9414:118;9065:474;;;;;:::o;9545:799::-;9632:6;9640;9648;9697:2;9685:9;9676:7;9672:23;9668:32;9665:119;;;9703:79;;:::i;:::-;9665:119;9823:1;9848:53;9893:7;9884:6;9873:9;9869:22;9848:53;:::i;:::-;9838:63;;9794:117;9950:2;9976:53;10021:7;10012:6;10001:9;9997:22;9976:53;:::i;:::-;9966:63;;9921:118;10106:2;10095:9;10091:18;10078:32;10137:18;10129:6;10126:30;10123:117;;;10159:79;;:::i;:::-;10123:117;10264:63;10319:7;10310:6;10299:9;10295:22;10264:63;:::i;:::-;10254:73;;10049:288;9545:799;;;;;:::o;10350:894::-;10468:6;10476;10525:2;10513:9;10504:7;10500:23;10496:32;10493:119;;;10531:79;;:::i;:::-;10493:119;10679:1;10668:9;10664:17;10651:31;10709:18;10701:6;10698:30;10695:117;;;10731:79;;:::i;:::-;10695:117;10836:78;10906:7;10897:6;10886:9;10882:22;10836:78;:::i;:::-;10826:88;;10622:302;10991:2;10980:9;10976:18;10963:32;11022:18;11014:6;11011:30;11008:117;;;11044:79;;:::i;:::-;11008:117;11149:78;11219:7;11210:6;11199:9;11195:22;11149:78;:::i;:::-;11139:88;;10934:303;10350:894;;;;;:::o;11250:327::-;11308:6;11357:2;11345:9;11336:7;11332:23;11328:32;11325:119;;;11363:79;;:::i;:::-;11325:119;11483:1;11508:52;11552:7;11543:6;11532:9;11528:22;11508:52;:::i;:::-;11498:62;;11454:116;11250:327;;;;:::o;11583:349::-;11652:6;11701:2;11689:9;11680:7;11676:23;11672:32;11669:119;;;11707:79;;:::i;:::-;11669:119;11827:1;11852:63;11907:7;11898:6;11887:9;11883:22;11852:63;:::i;:::-;11842:73;;11798:127;11583:349;;;;:::o;11938:509::-;12007:6;12056:2;12044:9;12035:7;12031:23;12027:32;12024:119;;;12062:79;;:::i;:::-;12024:119;12210:1;12199:9;12195:17;12182:31;12240:18;12232:6;12229:30;12226:117;;;12262:79;;:::i;:::-;12226:117;12367:63;12422:7;12413:6;12402:9;12398:22;12367:63;:::i;:::-;12357:73;;12153:287;11938:509;;;;:::o;12453:698::-;12553:6;12561;12610:2;12598:9;12589:7;12585:23;12581:32;12578:119;;;12616:79;;:::i;:::-;12578:119;12764:1;12753:9;12749:17;12736:31;12794:18;12786:6;12783:30;12780:117;;;12816:79;;:::i;:::-;12780:117;12921:63;12976:7;12967:6;12956:9;12952:22;12921:63;:::i;:::-;12911:73;;12707:287;13033:2;13059:75;13126:7;13117:6;13106:9;13102:22;13059:75;:::i;:::-;13049:85;;13004:140;12453:698;;;;;:::o;13157:329::-;13216:6;13265:2;13253:9;13244:7;13240:23;13236:32;13233:119;;;13271:79;;:::i;:::-;13233:119;13391:1;13416:53;13461:7;13452:6;13441:9;13437:22;13416:53;:::i;:::-;13406:63;;13362:117;13157:329;;;;:::o;13492:196::-;13581:10;13616:66;13678:3;13670:6;13616:66;:::i;:::-;13602:80;;13492:196;;;;:::o;13694:179::-;13763:10;13784:46;13826:3;13818:6;13784:46;:::i;:::-;13862:4;13857:3;13853:14;13839:28;;13694:179;;;;:::o;13879:118::-;13966:24;13984:5;13966:24;:::i;:::-;13961:3;13954:37;13879:118;;:::o;14031:991::-;14170:3;14199:64;14257:5;14199:64;:::i;:::-;14279:96;14368:6;14363:3;14279:96;:::i;:::-;14272:103;;14401:3;14446:4;14438:6;14434:17;14429:3;14425:27;14476:66;14536:5;14476:66;:::i;:::-;14565:7;14596:1;14581:396;14606:6;14603:1;14600:13;14581:396;;;14677:9;14671:4;14667:20;14662:3;14655:33;14728:6;14722:13;14756:84;14835:4;14820:13;14756:84;:::i;:::-;14748:92;;14863:70;14926:6;14863:70;:::i;:::-;14853:80;;14962:4;14957:3;14953:14;14946:21;;14641:336;14628:1;14625;14621:9;14616:14;;14581:396;;;14585:14;14993:4;14986:11;;15013:3;15006:10;;14175:847;;;;;14031:991;;;;:::o;15058:732::-;15177:3;15206:54;15254:5;15206:54;:::i;:::-;15276:86;15355:6;15350:3;15276:86;:::i;:::-;15269:93;;15386:56;15436:5;15386:56;:::i;:::-;15465:7;15496:1;15481:284;15506:6;15503:1;15500:13;15481:284;;;15582:6;15576:13;15609:63;15668:3;15653:13;15609:63;:::i;:::-;15602:70;;15695:60;15748:6;15695:60;:::i;:::-;15685:70;;15541:224;15528:1;15525;15521:9;15516:14;;15481:284;;;15485:14;15781:3;15774:10;;15182:608;;;15058:732;;;;:::o;15796:109::-;15877:21;15892:5;15877:21;:::i;:::-;15872:3;15865:34;15796:109;;:::o;15911:360::-;15997:3;16025:38;16057:5;16025:38;:::i;:::-;16079:70;16142:6;16137:3;16079:70;:::i;:::-;16072:77;;16158:52;16203:6;16198:3;16191:4;16184:5;16180:16;16158:52;:::i;:::-;16235:29;16257:6;16235:29;:::i;:::-;16230:3;16226:39;16219:46;;16001:270;15911:360;;;;:::o;16277:344::-;16355:3;16383:39;16416:5;16383:39;:::i;:::-;16438:61;16492:6;16487:3;16438:61;:::i;:::-;16431:68;;16508:52;16553:6;16548:3;16541:4;16534:5;16530:16;16508:52;:::i;:::-;16585:29;16607:6;16585:29;:::i;:::-;16580:3;16576:39;16569:46;;16359:262;16277:344;;;;:::o;16627:364::-;16715:3;16743:39;16776:5;16743:39;:::i;:::-;16798:71;16862:6;16857:3;16798:71;:::i;:::-;16791:78;;16878:52;16923:6;16918:3;16911:4;16904:5;16900:16;16878:52;:::i;:::-;16955:29;16977:6;16955:29;:::i;:::-;16950:3;16946:39;16939:46;;16719:272;16627:364;;;;:::o;16997:377::-;17103:3;17131:39;17164:5;17131:39;:::i;:::-;17186:89;17268:6;17263:3;17186:89;:::i;:::-;17179:96;;17284:52;17329:6;17324:3;17317:4;17310:5;17306:16;17284:52;:::i;:::-;17361:6;17356:3;17352:16;17345:23;;17107:267;16997:377;;;;:::o;17404:845::-;17507:3;17544:5;17538:12;17573:36;17599:9;17573:36;:::i;:::-;17625:89;17707:6;17702:3;17625:89;:::i;:::-;17618:96;;17745:1;17734:9;17730:17;17761:1;17756:137;;;;17907:1;17902:341;;;;17723:520;;17756:137;17840:4;17836:9;17825;17821:25;17816:3;17809:38;17876:6;17871:3;17867:16;17860:23;;17756:137;;17902:341;17969:38;18001:5;17969:38;:::i;:::-;18029:1;18043:154;18057:6;18054:1;18051:13;18043:154;;;18131:7;18125:14;18121:1;18116:3;18112:11;18105:35;18181:1;18172:7;18168:15;18157:26;;18079:4;18076:1;18072:12;18067:17;;18043:154;;;18226:6;18221:3;18217:16;18210:23;;17909:334;;17723:520;;17511:738;;17404:845;;;;:::o;18255:366::-;18397:3;18418:67;18482:2;18477:3;18418:67;:::i;:::-;18411:74;;18494:93;18583:3;18494:93;:::i;:::-;18612:2;18607:3;18603:12;18596:19;;18255:366;;;:::o;18627:::-;18769:3;18790:67;18854:2;18849:3;18790:67;:::i;:::-;18783:74;;18866:93;18955:3;18866:93;:::i;:::-;18984:2;18979:3;18975:12;18968:19;;18627:366;;;:::o;18999:::-;19141:3;19162:67;19226:2;19221:3;19162:67;:::i;:::-;19155:74;;19238:93;19327:3;19238:93;:::i;:::-;19356:2;19351:3;19347:12;19340:19;;18999:366;;;:::o;19371:::-;19513:3;19534:67;19598:2;19593:3;19534:67;:::i;:::-;19527:74;;19610:93;19699:3;19610:93;:::i;:::-;19728:2;19723:3;19719:12;19712:19;;19371:366;;;:::o;19743:::-;19885:3;19906:67;19970:2;19965:3;19906:67;:::i;:::-;19899:74;;19982:93;20071:3;19982:93;:::i;:::-;20100:2;20095:3;20091:12;20084:19;;19743:366;;;:::o;20115:::-;20257:3;20278:67;20342:2;20337:3;20278:67;:::i;:::-;20271:74;;20354:93;20443:3;20354:93;:::i;:::-;20472:2;20467:3;20463:12;20456:19;;20115:366;;;:::o;20487:::-;20629:3;20650:67;20714:2;20709:3;20650:67;:::i;:::-;20643:74;;20726:93;20815:3;20726:93;:::i;:::-;20844:2;20839:3;20835:12;20828:19;;20487:366;;;:::o;20859:::-;21001:3;21022:67;21086:2;21081:3;21022:67;:::i;:::-;21015:74;;21098:93;21187:3;21098:93;:::i;:::-;21216:2;21211:3;21207:12;21200:19;;20859:366;;;:::o;21231:::-;21373:3;21394:67;21458:2;21453:3;21394:67;:::i;:::-;21387:74;;21470:93;21559:3;21470:93;:::i;:::-;21588:2;21583:3;21579:12;21572:19;;21231:366;;;:::o;21603:::-;21745:3;21766:67;21830:2;21825:3;21766:67;:::i;:::-;21759:74;;21842:93;21931:3;21842:93;:::i;:::-;21960:2;21955:3;21951:12;21944:19;;21603:366;;;:::o;21975:::-;22117:3;22138:67;22202:2;22197:3;22138:67;:::i;:::-;22131:74;;22214:93;22303:3;22214:93;:::i;:::-;22332:2;22327:3;22323:12;22316:19;;21975:366;;;:::o;22347:::-;22489:3;22510:67;22574:2;22569:3;22510:67;:::i;:::-;22503:74;;22586:93;22675:3;22586:93;:::i;:::-;22704:2;22699:3;22695:12;22688:19;;22347:366;;;:::o;22719:::-;22861:3;22882:67;22946:2;22941:3;22882:67;:::i;:::-;22875:74;;22958:93;23047:3;22958:93;:::i;:::-;23076:2;23071:3;23067:12;23060:19;;22719:366;;;:::o;23091:::-;23233:3;23254:67;23318:2;23313:3;23254:67;:::i;:::-;23247:74;;23330:93;23419:3;23330:93;:::i;:::-;23448:2;23443:3;23439:12;23432:19;;23091:366;;;:::o;23463:::-;23605:3;23626:67;23690:2;23685:3;23626:67;:::i;:::-;23619:74;;23702:93;23791:3;23702:93;:::i;:::-;23820:2;23815:3;23811:12;23804:19;;23463:366;;;:::o;23835:::-;23977:3;23998:67;24062:2;24057:3;23998:67;:::i;:::-;23991:74;;24074:93;24163:3;24074:93;:::i;:::-;24192:2;24187:3;24183:12;24176:19;;23835:366;;;:::o;24207:::-;24349:3;24370:67;24434:2;24429:3;24370:67;:::i;:::-;24363:74;;24446:93;24535:3;24446:93;:::i;:::-;24564:2;24559:3;24555:12;24548:19;;24207:366;;;:::o;24579:400::-;24739:3;24760:84;24842:1;24837:3;24760:84;:::i;:::-;24753:91;;24853:93;24942:3;24853:93;:::i;:::-;24971:1;24966:3;24962:11;24955:18;;24579:400;;;:::o;24985:366::-;25127:3;25148:67;25212:2;25207:3;25148:67;:::i;:::-;25141:74;;25224:93;25313:3;25224:93;:::i;:::-;25342:2;25337:3;25333:12;25326:19;;24985:366;;;:::o;25357:::-;25499:3;25520:67;25584:2;25579:3;25520:67;:::i;:::-;25513:74;;25596:93;25685:3;25596:93;:::i;:::-;25714:2;25709:3;25705:12;25698:19;;25357:366;;;:::o;25729:::-;25871:3;25892:67;25956:2;25951:3;25892:67;:::i;:::-;25885:74;;25968:93;26057:3;25968:93;:::i;:::-;26086:2;26081:3;26077:12;26070:19;;25729:366;;;:::o;26101:::-;26243:3;26264:67;26328:2;26323:3;26264:67;:::i;:::-;26257:74;;26340:93;26429:3;26340:93;:::i;:::-;26458:2;26453:3;26449:12;26442:19;;26101:366;;;:::o;26473:::-;26615:3;26636:67;26700:2;26695:3;26636:67;:::i;:::-;26629:74;;26712:93;26801:3;26712:93;:::i;:::-;26830:2;26825:3;26821:12;26814:19;;26473:366;;;:::o;26845:::-;26987:3;27008:67;27072:2;27067:3;27008:67;:::i;:::-;27001:74;;27084:93;27173:3;27084:93;:::i;:::-;27202:2;27197:3;27193:12;27186:19;;26845:366;;;:::o;27217:::-;27359:3;27380:67;27444:2;27439:3;27380:67;:::i;:::-;27373:74;;27456:93;27545:3;27456:93;:::i;:::-;27574:2;27569:3;27565:12;27558:19;;27217:366;;;:::o;27589:::-;27731:3;27752:67;27816:2;27811:3;27752:67;:::i;:::-;27745:74;;27828:93;27917:3;27828:93;:::i;:::-;27946:2;27941:3;27937:12;27930:19;;27589:366;;;:::o;27961:::-;28103:3;28124:67;28188:2;28183:3;28124:67;:::i;:::-;28117:74;;28200:93;28289:3;28200:93;:::i;:::-;28318:2;28313:3;28309:12;28302:19;;27961:366;;;:::o;28333:::-;28475:3;28496:67;28560:2;28555:3;28496:67;:::i;:::-;28489:74;;28572:93;28661:3;28572:93;:::i;:::-;28690:2;28685:3;28681:12;28674:19;;28333:366;;;:::o;28705:::-;28847:3;28868:67;28932:2;28927:3;28868:67;:::i;:::-;28861:74;;28944:93;29033:3;28944:93;:::i;:::-;29062:2;29057:3;29053:12;29046:19;;28705:366;;;:::o;29077:::-;29219:3;29240:67;29304:2;29299:3;29240:67;:::i;:::-;29233:74;;29316:93;29405:3;29316:93;:::i;:::-;29434:2;29429:3;29425:12;29418:19;;29077:366;;;:::o;29449:::-;29591:3;29612:67;29676:2;29671:3;29612:67;:::i;:::-;29605:74;;29688:93;29777:3;29688:93;:::i;:::-;29806:2;29801:3;29797:12;29790:19;;29449:366;;;:::o;29821:::-;29963:3;29984:67;30048:2;30043:3;29984:67;:::i;:::-;29977:74;;30060:93;30149:3;30060:93;:::i;:::-;30178:2;30173:3;30169:12;30162:19;;29821:366;;;:::o;30193:108::-;30270:24;30288:5;30270:24;:::i;:::-;30265:3;30258:37;30193:108;;:::o;30307:118::-;30394:24;30412:5;30394:24;:::i;:::-;30389:3;30382:37;30307:118;;:::o;30431:275::-;30563:3;30585:95;30676:3;30667:6;30585:95;:::i;:::-;30578:102;;30697:3;30690:10;;30431:275;;;;:::o;30712:269::-;30841:3;30863:92;30951:3;30942:6;30863:92;:::i;:::-;30856:99;;30972:3;30965:10;;30712:269;;;;:::o;30987:695::-;31265:3;31287:92;31375:3;31366:6;31287:92;:::i;:::-;31280:99;;31396:95;31487:3;31478:6;31396:95;:::i;:::-;31389:102;;31508:148;31652:3;31508:148;:::i;:::-;31501:155;;31673:3;31666:10;;30987:695;;;;;:::o;31688:222::-;31781:4;31819:2;31808:9;31804:18;31796:26;;31832:71;31900:1;31889:9;31885:17;31876:6;31832:71;:::i;:::-;31688:222;;;;:::o;31916:1053::-;32239:4;32277:3;32266:9;32262:19;32254:27;;32291:71;32359:1;32348:9;32344:17;32335:6;32291:71;:::i;:::-;32372:72;32440:2;32429:9;32425:18;32416:6;32372:72;:::i;:::-;32491:9;32485:4;32481:20;32476:2;32465:9;32461:18;32454:48;32519:108;32622:4;32613:6;32519:108;:::i;:::-;32511:116;;32674:9;32668:4;32664:20;32659:2;32648:9;32644:18;32637:48;32702:108;32805:4;32796:6;32702:108;:::i;:::-;32694:116;;32858:9;32852:4;32848:20;32842:3;32831:9;32827:19;32820:49;32886:76;32957:4;32948:6;32886:76;:::i;:::-;32878:84;;31916:1053;;;;;;;;:::o;32975:751::-;33198:4;33236:3;33225:9;33221:19;33213:27;;33250:71;33318:1;33307:9;33303:17;33294:6;33250:71;:::i;:::-;33331:72;33399:2;33388:9;33384:18;33375:6;33331:72;:::i;:::-;33413;33481:2;33470:9;33466:18;33457:6;33413:72;:::i;:::-;33495;33563:2;33552:9;33548:18;33539:6;33495:72;:::i;:::-;33615:9;33609:4;33605:20;33599:3;33588:9;33584:19;33577:49;33643:76;33714:4;33705:6;33643:76;:::i;:::-;33635:84;;32975:751;;;;;;;;:::o;33732:413::-;33895:4;33933:2;33922:9;33918:18;33910:26;;33982:9;33976:4;33972:20;33968:1;33957:9;33953:17;33946:47;34010:128;34133:4;34124:6;34010:128;:::i;:::-;34002:136;;33732:413;;;;:::o;34151:373::-;34294:4;34332:2;34321:9;34317:18;34309:26;;34381:9;34375:4;34371:20;34367:1;34356:9;34352:17;34345:47;34409:108;34512:4;34503:6;34409:108;:::i;:::-;34401:116;;34151:373;;;;:::o;34530:634::-;34751:4;34789:2;34778:9;34774:18;34766:26;;34838:9;34832:4;34828:20;34824:1;34813:9;34809:17;34802:47;34866:108;34969:4;34960:6;34866:108;:::i;:::-;34858:116;;35021:9;35015:4;35011:20;35006:2;34995:9;34991:18;34984:48;35049:108;35152:4;35143:6;35049:108;:::i;:::-;35041:116;;34530:634;;;;;:::o;35170:210::-;35257:4;35295:2;35284:9;35280:18;35272:26;;35308:65;35370:1;35359:9;35355:17;35346:6;35308:65;:::i;:::-;35170:210;;;;:::o;35386:313::-;35499:4;35537:2;35526:9;35522:18;35514:26;;35586:9;35580:4;35576:20;35572:1;35561:9;35557:17;35550:47;35614:78;35687:4;35678:6;35614:78;:::i;:::-;35606:86;;35386:313;;;;:::o;35705:419::-;35871:4;35909:2;35898:9;35894:18;35886:26;;35958:9;35952:4;35948:20;35944:1;35933:9;35929:17;35922:47;35986:131;36112:4;35986:131;:::i;:::-;35978:139;;35705:419;;;:::o;36130:::-;36296:4;36334:2;36323:9;36319:18;36311:26;;36383:9;36377:4;36373:20;36369:1;36358:9;36354:17;36347:47;36411:131;36537:4;36411:131;:::i;:::-;36403:139;;36130:419;;;:::o;36555:::-;36721:4;36759:2;36748:9;36744:18;36736:26;;36808:9;36802:4;36798:20;36794:1;36783:9;36779:17;36772:47;36836:131;36962:4;36836:131;:::i;:::-;36828:139;;36555:419;;;:::o;36980:::-;37146:4;37184:2;37173:9;37169:18;37161:26;;37233:9;37227:4;37223:20;37219:1;37208:9;37204:17;37197:47;37261:131;37387:4;37261:131;:::i;:::-;37253:139;;36980:419;;;:::o;37405:::-;37571:4;37609:2;37598:9;37594:18;37586:26;;37658:9;37652:4;37648:20;37644:1;37633:9;37629:17;37622:47;37686:131;37812:4;37686:131;:::i;:::-;37678:139;;37405:419;;;:::o;37830:::-;37996:4;38034:2;38023:9;38019:18;38011:26;;38083:9;38077:4;38073:20;38069:1;38058:9;38054:17;38047:47;38111:131;38237:4;38111:131;:::i;:::-;38103:139;;37830:419;;;:::o;38255:::-;38421:4;38459:2;38448:9;38444:18;38436:26;;38508:9;38502:4;38498:20;38494:1;38483:9;38479:17;38472:47;38536:131;38662:4;38536:131;:::i;:::-;38528:139;;38255:419;;;:::o;38680:::-;38846:4;38884:2;38873:9;38869:18;38861:26;;38933:9;38927:4;38923:20;38919:1;38908:9;38904:17;38897:47;38961:131;39087:4;38961:131;:::i;:::-;38953:139;;38680:419;;;:::o;39105:::-;39271:4;39309:2;39298:9;39294:18;39286:26;;39358:9;39352:4;39348:20;39344:1;39333:9;39329:17;39322:47;39386:131;39512:4;39386:131;:::i;:::-;39378:139;;39105:419;;;:::o;39530:::-;39696:4;39734:2;39723:9;39719:18;39711:26;;39783:9;39777:4;39773:20;39769:1;39758:9;39754:17;39747:47;39811:131;39937:4;39811:131;:::i;:::-;39803:139;;39530:419;;;:::o;39955:::-;40121:4;40159:2;40148:9;40144:18;40136:26;;40208:9;40202:4;40198:20;40194:1;40183:9;40179:17;40172:47;40236:131;40362:4;40236:131;:::i;:::-;40228:139;;39955:419;;;:::o;40380:::-;40546:4;40584:2;40573:9;40569:18;40561:26;;40633:9;40627:4;40623:20;40619:1;40608:9;40604:17;40597:47;40661:131;40787:4;40661:131;:::i;:::-;40653:139;;40380:419;;;:::o;40805:::-;40971:4;41009:2;40998:9;40994:18;40986:26;;41058:9;41052:4;41048:20;41044:1;41033:9;41029:17;41022:47;41086:131;41212:4;41086:131;:::i;:::-;41078:139;;40805:419;;;:::o;41230:::-;41396:4;41434:2;41423:9;41419:18;41411:26;;41483:9;41477:4;41473:20;41469:1;41458:9;41454:17;41447:47;41511:131;41637:4;41511:131;:::i;:::-;41503:139;;41230:419;;;:::o;41655:::-;41821:4;41859:2;41848:9;41844:18;41836:26;;41908:9;41902:4;41898:20;41894:1;41883:9;41879:17;41872:47;41936:131;42062:4;41936:131;:::i;:::-;41928:139;;41655:419;;;:::o;42080:::-;42246:4;42284:2;42273:9;42269:18;42261:26;;42333:9;42327:4;42323:20;42319:1;42308:9;42304:17;42297:47;42361:131;42487:4;42361:131;:::i;:::-;42353:139;;42080:419;;;:::o;42505:::-;42671:4;42709:2;42698:9;42694:18;42686:26;;42758:9;42752:4;42748:20;42744:1;42733:9;42729:17;42722:47;42786:131;42912:4;42786:131;:::i;:::-;42778:139;;42505:419;;;:::o;42930:::-;43096:4;43134:2;43123:9;43119:18;43111:26;;43183:9;43177:4;43173:20;43169:1;43158:9;43154:17;43147:47;43211:131;43337:4;43211:131;:::i;:::-;43203:139;;42930:419;;;:::o;43355:::-;43521:4;43559:2;43548:9;43544:18;43536:26;;43608:9;43602:4;43598:20;43594:1;43583:9;43579:17;43572:47;43636:131;43762:4;43636:131;:::i;:::-;43628:139;;43355:419;;;:::o;43780:::-;43946:4;43984:2;43973:9;43969:18;43961:26;;44033:9;44027:4;44023:20;44019:1;44008:9;44004:17;43997:47;44061:131;44187:4;44061:131;:::i;:::-;44053:139;;43780:419;;;:::o;44205:::-;44371:4;44409:2;44398:9;44394:18;44386:26;;44458:9;44452:4;44448:20;44444:1;44433:9;44429:17;44422:47;44486:131;44612:4;44486:131;:::i;:::-;44478:139;;44205:419;;;:::o;44630:::-;44796:4;44834:2;44823:9;44819:18;44811:26;;44883:9;44877:4;44873:20;44869:1;44858:9;44854:17;44847:47;44911:131;45037:4;44911:131;:::i;:::-;44903:139;;44630:419;;;:::o;45055:::-;45221:4;45259:2;45248:9;45244:18;45236:26;;45308:9;45302:4;45298:20;45294:1;45283:9;45279:17;45272:47;45336:131;45462:4;45336:131;:::i;:::-;45328:139;;45055:419;;;:::o;45480:::-;45646:4;45684:2;45673:9;45669:18;45661:26;;45733:9;45727:4;45723:20;45719:1;45708:9;45704:17;45697:47;45761:131;45887:4;45761:131;:::i;:::-;45753:139;;45480:419;;;:::o;45905:::-;46071:4;46109:2;46098:9;46094:18;46086:26;;46158:9;46152:4;46148:20;46144:1;46133:9;46129:17;46122:47;46186:131;46312:4;46186:131;:::i;:::-;46178:139;;45905:419;;;:::o;46330:::-;46496:4;46534:2;46523:9;46519:18;46511:26;;46583:9;46577:4;46573:20;46569:1;46558:9;46554:17;46547:47;46611:131;46737:4;46611:131;:::i;:::-;46603:139;;46330:419;;;:::o;46755:::-;46921:4;46959:2;46948:9;46944:18;46936:26;;47008:9;47002:4;46998:20;46994:1;46983:9;46979:17;46972:47;47036:131;47162:4;47036:131;:::i;:::-;47028:139;;46755:419;;;:::o;47180:::-;47346:4;47384:2;47373:9;47369:18;47361:26;;47433:9;47427:4;47423:20;47419:1;47408:9;47404:17;47397:47;47461:131;47587:4;47461:131;:::i;:::-;47453:139;;47180:419;;;:::o;47605:::-;47771:4;47809:2;47798:9;47794:18;47786:26;;47858:9;47852:4;47848:20;47844:1;47833:9;47829:17;47822:47;47886:131;48012:4;47886:131;:::i;:::-;47878:139;;47605:419;;;:::o;48030:::-;48196:4;48234:2;48223:9;48219:18;48211:26;;48283:9;48277:4;48273:20;48269:1;48258:9;48254:17;48247:47;48311:131;48437:4;48311:131;:::i;:::-;48303:139;;48030:419;;;:::o;48455:::-;48621:4;48659:2;48648:9;48644:18;48636:26;;48708:9;48702:4;48698:20;48694:1;48683:9;48679:17;48672:47;48736:131;48862:4;48736:131;:::i;:::-;48728:139;;48455:419;;;:::o;48880:222::-;48973:4;49011:2;49000:9;48996:18;48988:26;;49024:71;49092:1;49081:9;49077:17;49068:6;49024:71;:::i;:::-;48880:222;;;;:::o;49108:332::-;49229:4;49267:2;49256:9;49252:18;49244:26;;49280:71;49348:1;49337:9;49333:17;49324:6;49280:71;:::i;:::-;49361:72;49429:2;49418:9;49414:18;49405:6;49361:72;:::i;:::-;49108:332;;;;;:::o;49446:129::-;49480:6;49507:20;;:::i;:::-;49497:30;;49536:33;49564:4;49556:6;49536:33;:::i;:::-;49446:129;;;:::o;49581:75::-;49614:6;49647:2;49641:9;49631:19;;49581:75;:::o;49662:311::-;49739:4;49829:18;49821:6;49818:30;49815:56;;;49851:18;;:::i;:::-;49815:56;49901:4;49893:6;49889:17;49881:25;;49961:4;49955;49951:15;49943:23;;49662:311;;;:::o;49979:::-;50056:4;50146:18;50138:6;50135:30;50132:56;;;50168:18;;:::i;:::-;50132:56;50218:4;50210:6;50206:17;50198:25;;50278:4;50272;50268:15;50260:23;;49979:311;;;:::o;50296:307::-;50357:4;50447:18;50439:6;50436:30;50433:56;;;50469:18;;:::i;:::-;50433:56;50507:29;50529:6;50507:29;:::i;:::-;50499:37;;50591:4;50585;50581:15;50573:23;;50296:307;;;:::o;50609:308::-;50671:4;50761:18;50753:6;50750:30;50747:56;;;50783:18;;:::i;:::-;50747:56;50821:29;50843:6;50821:29;:::i;:::-;50813:37;;50905:4;50899;50895:15;50887:23;;50609:308;;;:::o;50923:142::-;51000:4;51023:3;51015:11;;51053:4;51048:3;51044:14;51036:22;;50923:142;;;:::o;51071:132::-;51138:4;51161:3;51153:11;;51191:4;51186:3;51182:14;51174:22;;51071:132;;;:::o;51209:141::-;51258:4;51281:3;51273:11;;51304:3;51301:1;51294:14;51338:4;51335:1;51325:18;51317:26;;51209:141;;;:::o;51356:124::-;51433:6;51467:5;51461:12;51451:22;;51356:124;;;:::o;51486:114::-;51553:6;51587:5;51581:12;51571:22;;51486:114;;;:::o;51606:98::-;51657:6;51691:5;51685:12;51675:22;;51606:98;;;:::o;51710:99::-;51762:6;51796:5;51790:12;51780:22;;51710:99;;;:::o;51815:123::-;51895:4;51927;51922:3;51918:14;51910:22;;51815:123;;;:::o;51944:113::-;52014:4;52046;52041:3;52037:14;52029:22;;51944:113;;;:::o;52063:194::-;52172:11;52206:6;52201:3;52194:19;52246:4;52241:3;52237:14;52222:29;;52063:194;;;;:::o;52263:184::-;52362:11;52396:6;52391:3;52384:19;52436:4;52431:3;52427:14;52412:29;;52263:184;;;;:::o;52453:168::-;52536:11;52570:6;52565:3;52558:19;52610:4;52605:3;52601:14;52586:29;;52453:168;;;;:::o;52627:159::-;52701:11;52735:6;52730:3;52723:19;52775:4;52770:3;52766:14;52751:29;;52627:159;;;;:::o;52792:169::-;52876:11;52910:6;52905:3;52898:19;52950:4;52945:3;52941:14;52926:29;;52792:169;;;;:::o;52967:148::-;53069:11;53106:3;53091:18;;52967:148;;;;:::o;53121:305::-;53161:3;53180:20;53198:1;53180:20;:::i;:::-;53175:25;;53214:20;53232:1;53214:20;:::i;:::-;53209:25;;53368:1;53300:66;53296:74;53293:1;53290:81;53287:107;;;53374:18;;:::i;:::-;53287:107;53418:1;53415;53411:9;53404:16;;53121:305;;;;:::o;53432:185::-;53472:1;53489:20;53507:1;53489:20;:::i;:::-;53484:25;;53523:20;53541:1;53523:20;:::i;:::-;53518:25;;53562:1;53552:35;;53567:18;;:::i;:::-;53552:35;53609:1;53606;53602:9;53597:14;;53432:185;;;;:::o;53623:348::-;53663:7;53686:20;53704:1;53686:20;:::i;:::-;53681:25;;53720:20;53738:1;53720:20;:::i;:::-;53715:25;;53908:1;53840:66;53836:74;53833:1;53830:81;53825:1;53818:9;53811:17;53807:105;53804:131;;;53915:18;;:::i;:::-;53804:131;53963:1;53960;53956:9;53945:20;;53623:348;;;;:::o;53977:191::-;54017:4;54037:20;54055:1;54037:20;:::i;:::-;54032:25;;54071:20;54089:1;54071:20;:::i;:::-;54066:25;;54110:1;54107;54104:8;54101:34;;;54115:18;;:::i;:::-;54101:34;54160:1;54157;54153:9;54145:17;;53977:191;;;;:::o;54174:96::-;54211:7;54240:24;54258:5;54240:24;:::i;:::-;54229:35;;54174:96;;;:::o;54276:90::-;54310:7;54353:5;54346:13;54339:21;54328:32;;54276:90;;;:::o;54372:149::-;54408:7;54448:66;54441:5;54437:78;54426:89;;54372:149;;;:::o;54527:126::-;54564:7;54604:42;54597:5;54593:54;54582:65;;54527:126;;;:::o;54659:77::-;54696:7;54725:5;54714:16;;54659:77;;;:::o;54742:154::-;54826:6;54821:3;54816;54803:30;54888:1;54879:6;54874:3;54870:16;54863:27;54742:154;;;:::o;54902:307::-;54970:1;54980:113;54994:6;54991:1;54988:13;54980:113;;;55079:1;55074:3;55070:11;55064:18;55060:1;55055:3;55051:11;55044:39;55016:2;55013:1;55009:10;55004:15;;54980:113;;;55111:6;55108:1;55105:13;55102:101;;;55191:1;55182:6;55177:3;55173:16;55166:27;55102:101;54951:258;54902:307;;;:::o;55215:171::-;55254:3;55277:24;55295:5;55277:24;:::i;:::-;55268:33;;55323:4;55316:5;55313:15;55310:41;;;55331:18;;:::i;:::-;55310:41;55378:1;55371:5;55367:13;55360:20;;55215:171;;;:::o;55392:320::-;55436:6;55473:1;55467:4;55463:12;55453:22;;55520:1;55514:4;55510:12;55541:18;55531:81;;55597:4;55589:6;55585:17;55575:27;;55531:81;55659:2;55651:6;55648:14;55628:18;55625:38;55622:84;;;55678:18;;:::i;:::-;55622:84;55443:269;55392:320;;;:::o;55718:281::-;55801:27;55823:4;55801:27;:::i;:::-;55793:6;55789:40;55931:6;55919:10;55916:22;55895:18;55883:10;55880:34;55877:62;55874:88;;;55942:18;;:::i;:::-;55874:88;55982:10;55978:2;55971:22;55761:238;55718:281;;:::o;56005:233::-;56044:3;56067:24;56085:5;56067:24;:::i;:::-;56058:33;;56113:66;56106:5;56103:77;56100:103;;;56183:18;;:::i;:::-;56100:103;56230:1;56223:5;56219:13;56212:20;;56005:233;;;:::o;56244:176::-;56276:1;56293:20;56311:1;56293:20;:::i;:::-;56288:25;;56327:20;56345:1;56327:20;:::i;:::-;56322:25;;56366:1;56356:35;;56371:18;;:::i;:::-;56356:35;56412:1;56409;56405:9;56400:14;;56244:176;;;;:::o;56426:180::-;56474:77;56471:1;56464:88;56571:4;56568:1;56561:15;56595:4;56592:1;56585:15;56612:180;56660:77;56657:1;56650:88;56757:4;56754:1;56747:15;56781:4;56778:1;56771:15;56798:180;56846:77;56843:1;56836:88;56943:4;56940:1;56933:15;56967:4;56964:1;56957:15;56984:180;57032:77;57029:1;57022:88;57129:4;57126:1;57119:15;57153:4;57150:1;57143:15;57170:180;57218:77;57215:1;57208:88;57315:4;57312:1;57305:15;57339:4;57336:1;57329:15;57356:180;57404:77;57401:1;57394:88;57501:4;57498:1;57491:15;57525:4;57522:1;57515:15;57542:183;57577:3;57615:1;57597:16;57594:23;57591:128;;;57653:1;57650;57647;57632:23;57675:34;57706:1;57700:8;57675:34;:::i;:::-;57668:41;;57591:128;57542:183;:::o;57731:117::-;57840:1;57837;57830:12;57854:117;57963:1;57960;57953:12;58100:117;58209:1;58206;58199:12;58223:117;58332:1;58329;58322:12;58346:117;58455:1;58452;58445:12;58469:117;58578:1;58575;58568:12;58592:102;58633:6;58684:2;58680:7;58675:2;58668:5;58664:14;58660:28;58650:38;;58592:102;;;:::o;58700:106::-;58744:8;58793:5;58788:3;58784:15;58763:36;;58700:106;;;:::o;58812:239::-;58952:34;58948:1;58940:6;58936:14;58929:58;59021:22;59016:2;59008:6;59004:15;58997:47;58812:239;:::o;59057:234::-;59197:34;59193:1;59185:6;59181:14;59174:58;59266:17;59261:2;59253:6;59249:15;59242:42;59057:234;:::o;59297:227::-;59437:34;59433:1;59425:6;59421:14;59414:58;59506:10;59501:2;59493:6;59489:15;59482:35;59297:227;:::o;59530:222::-;59670:34;59666:1;59658:6;59654:14;59647:58;59739:5;59734:2;59726:6;59722:15;59715:30;59530:222;:::o;59758:225::-;59898:34;59894:1;59886:6;59882:14;59875:58;59967:8;59962:2;59954:6;59950:15;59943:33;59758:225;:::o;59989:223::-;60129:34;60125:1;60117:6;60113:14;60106:58;60198:6;60193:2;60185:6;60181:15;60174:31;59989:223;:::o;60218:238::-;60358:34;60354:1;60346:6;60342:14;60335:58;60427:21;60422:2;60414:6;60410:15;60403:46;60218:238;:::o;60462:175::-;60602:27;60598:1;60590:6;60586:14;60579:51;60462:175;:::o;60643:229::-;60783:34;60779:1;60771:6;60767:14;60760:58;60852:12;60847:2;60839:6;60835:15;60828:37;60643:229;:::o;60878:222::-;61018:34;61014:1;61006:6;61002:14;60995:58;61087:5;61082:2;61074:6;61070:15;61063:30;60878:222;:::o;61106:246::-;61246:34;61242:1;61234:6;61230:14;61223:58;61315:29;61310:2;61302:6;61298:15;61291:54;61106:246;:::o;61358:224::-;61498:34;61494:1;61486:6;61482:14;61475:58;61567:7;61562:2;61554:6;61550:15;61543:32;61358:224;:::o;61588:226::-;61728:34;61724:1;61716:6;61712:14;61705:58;61797:9;61792:2;61784:6;61780:15;61773:34;61588:226;:::o;61820:230::-;61960:34;61956:1;61948:6;61944:14;61937:58;62029:13;62024:2;62016:6;62012:15;62005:38;61820:230;:::o;62056:238::-;62196:34;62192:1;62184:6;62180:14;62173:58;62265:21;62260:2;62252:6;62248:15;62241:46;62056:238;:::o;62300:222::-;62440:34;62436:1;62428:6;62424:14;62417:58;62509:5;62504:2;62496:6;62492:15;62485:30;62300:222;:::o;62528:229::-;62668:34;62664:1;62656:6;62652:14;62645:58;62737:12;62732:2;62724:6;62720:15;62713:37;62528:229;:::o;62763:155::-;62903:7;62899:1;62891:6;62887:14;62880:31;62763:155;:::o;62924:182::-;63064:34;63060:1;63052:6;63048:14;63041:58;62924:182;:::o;63112:236::-;63252:34;63248:1;63240:6;63236:14;63229:58;63321:19;63316:2;63308:6;63304:15;63297:44;63112:236;:::o;63354:179::-;63494:31;63490:1;63482:6;63478:14;63471:55;63354:179;:::o;63539:181::-;63679:33;63675:1;63667:6;63663:14;63656:57;63539:181;:::o;63726:301::-;63866:34;63862:1;63854:6;63850:14;63843:58;63935:34;63930:2;63922:6;63918:15;63911:59;64004:15;63999:2;63991:6;63987:15;63980:40;63726:301;:::o;64033:232::-;64173:34;64169:1;64161:6;64157:14;64150:58;64242:15;64237:2;64229:6;64225:15;64218:40;64033:232;:::o;64271:228::-;64411:34;64407:1;64399:6;64395:14;64388:58;64480:11;64475:2;64467:6;64463:15;64456:36;64271:228;:::o;64505:::-;64645:34;64641:1;64633:6;64629:14;64622:58;64714:11;64709:2;64701:6;64697:15;64690:36;64505:228;:::o;64739:227::-;64879:34;64875:1;64867:6;64863:14;64856:58;64948:10;64943:2;64935:6;64931:15;64924:35;64739:227;:::o;64972:::-;65112:34;65108:1;65100:6;65096:14;65089:58;65181:10;65176:2;65168:6;65164:15;65157:35;64972:227;:::o;65205:220::-;65345:34;65341:1;65333:6;65329:14;65322:58;65414:3;65409:2;65401:6;65397:15;65390:28;65205:220;:::o;65431:181::-;65571:33;65567:1;65559:6;65555:14;65548:57;65431:181;:::o;65618:::-;65758:33;65754:1;65746:6;65742:14;65735:57;65618:181;:::o;65805:232::-;65945:34;65941:1;65933:6;65929:14;65922:58;66014:15;66009:2;66001:6;65997:15;65990:40;65805:232;:::o;66043:711::-;66082:3;66120:4;66102:16;66099:26;66096:39;;;66128:5;;66096:39;66157:20;;:::i;:::-;66232:1;66214:16;66210:24;66207:1;66201:4;66186:49;66265:4;66259:11;66364:16;66357:4;66349:6;66345:17;66342:39;66309:18;66301:6;66298:30;66282:113;66279:146;;;66410:5;;;;66279:146;66456:6;66450:4;66446:17;66492:3;66486:10;66519:18;66511:6;66508:30;66505:43;;;66541:5;;;;;;66505:43;66589:6;66582:4;66577:3;66573:14;66569:27;66648:1;66630:16;66626:24;66620:4;66616:35;66611:3;66608:44;66605:57;;;66655:5;;;;;;;66605:57;66672;66720:6;66714:4;66710:17;66702:6;66698:30;66692:4;66672:57;:::i;:::-;66745:3;66738:10;;66086:668;;;;;66043:711;;:::o;66760:122::-;66833:24;66851:5;66833:24;:::i;:::-;66826:5;66823:35;66813:63;;66872:1;66869;66862:12;66813:63;66760:122;:::o;66888:116::-;66958:21;66973:5;66958:21;:::i;:::-;66951:5;66948:32;66938:60;;66994:1;66991;66984:12;66938:60;66888:116;:::o;67010:120::-;67082:23;67099:5;67082:23;:::i;:::-;67075:5;67072:34;67062:62;;67120:1;67117;67110:12;67062:62;67010:120;:::o;67136:122::-;67209:24;67227:5;67209:24;:::i;:::-;67202:5;67199:35;67189:63;;67248:1;67245;67238:12;67189:63;67136:122;:::o

Swarm Source

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