ETH Price: $3,467.72 (+1.75%)
Gas: 7 Gwei

Token

DoYouMoose (MOOSE)
 

Overview

Max Total Supply

777 MOOSE

Holders

367

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 MOOSE
0x8589addde1172d7dc1b7ca72fb86d7b68c1584f9
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:
DoYouMoose

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-26
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    For MaMoose
*/


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

interface IERC721 is IERC165 {
    //@dev Emitted when `tokenId` token is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    //@dev Returns the number of tokens in ``owner``'s account.
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from,address to,uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    //@dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface IERC721Metadata is IERC721 {
    //@dev Returns the token collection name.
    function name() external view returns (string memory);

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory);

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Addr: cant send val, rcpt revert");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Addr: low-level call value fail");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Addr: insufficient balance call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Addr: low-level static call fail");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Addr: static call non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Addr: low-level del call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Addr: delegate call 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
    ) private 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is 0x address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract Functional {
    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);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract DoYouMoose is IERC721, Ownable, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Specific Functionality
    bool private _hideTokens;  //for URI redirects
    bool private claimOpen;
    uint256 public price;
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerWallet;
    uint256 public stateMachine;
    
    mapping(address => uint256) public mintTracker;
    mapping(address => bool) private _whitelist1;
    mapping(address => bool) private _whitelist2;
    mapping(uint256 => address) public claimed;


    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "DoYouMoose";
        _symbol = "MOOSE";
        _baseURI = "https://doyoumoose.com/metadata/";
        _hideTokens = true;
        
        totalTokens = 777;
        price = 25 * (10 ** 15); // Replace leading value with price in finney
        
        maxPerWallet = 2;
        stateMachine = 0; // WL1=1, WL2=2, Public=3
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == DoYouMoose.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        bool success;
        (success, ) = owner().call{value: address(this).balance}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function mintWL1(uint256 qty) external payable reentryLock {
        address _to = _msgSender();
        require(msg.value == qty * price, "Mint: Wrong Purchase Price");
        require(qty + mintTracker[_to] <= maxPerWallet, "Can't mint more");
        require(stateMachine == 1, "Whitelist 1 not open");
        require(numberMinted + qty <= 300, "Phase 1 minted out");
        require(_whitelist1[msg.sender] == true, "Not on Whitelist 1");

        uint256 mintSeedValue = numberMinted + 1; //Store the starting value of the mint batch, begins at 1 and goes to 777
        mintTracker[_to] += qty;
        numberMinted += qty;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
    }

    function mintWL2(uint256 qty) external payable reentryLock {
        address _to = _msgSender();
        require(msg.value == qty * price, "Mint: Wrong Purchase Price");
        require(qty + mintTracker[_to] <= maxPerWallet, "Can't mint more");
        require(stateMachine == 2, "Whitelist 2 not open");
        require(numberMinted + qty <= 700, "Phase 2 minted out");
        require(_whitelist2[msg.sender] == true, "Not on Whitelist 2");

        uint256 mintSeedValue = numberMinted + 1; //Store the starting value of the mint batch, begins at 1 and goes to 777
        mintTracker[_to] += qty;
        numberMinted += qty;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
    }

    function mint(uint256 qty) external payable reentryLock {
        address _to = _msgSender();
        require(msg.value == qty * price, "Mint: Wrong Purchase Price");
        require(qty + mintTracker[_to] <= maxPerWallet, "Can't mint more");
        require(stateMachine == 3, "Mint not open");
        require(numberMinted + qty <= totalTokens, "Minted Out");

        uint256 mintSeedValue = numberMinted + 1; //Store the starting value of the mint batch, begins at 1 and goes to 777
        mintTracker[_to] += qty;
        numberMinted += qty;
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }

    function claim(uint256 tokenID) external reentryLock {
        require(claimOpen, "Claiming not available");
        require(claimed[tokenID] == address(0), "already claimed");
        require(ownerOf(tokenID) == _msgSender(), "must own the NFT");
        claimed[tokenID] = _msgSender();
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    function activateClaims() external onlyOwner {
        claimOpen = true;
    }

    function setStateMachine(uint256 newstate) external onlyOwner {
        stateMachine = newstate;
    }

    function addWL1(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _whitelist1[accounts[i]] = true;
        }
    }

    function addWL2(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _whitelist2[accounts[i]] = true;
        }
    }

    function checkWL1(address testAddress) external view returns (bool) {
        if (_whitelist1[testAddress] == true) { return true; }
        return false;
    }

    function checkWL2(address testAddress) external view returns (bool) {
        if (_whitelist2[testAddress] == true) { return true; }
        return false;
    }

    function setMaxWalletThreshold(uint256 maxWallet) external onlyOwner {
        maxPerWallet = maxWallet;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideTokens() external onlyOwner {
        _hideTokens = true;
    }
    
    function revealTokens() external onlyOwner {
        _hideTokens = false;
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: bal qry for zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: own query nonexist tkn");
        return owner;
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval current owner");

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "txfr to non ERC721Reciever");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: op query nonexistent tkn");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ownerOf(tokenId) == from, "ERC721: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 address");
        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "ERC721Metadata: URI 0x0 token");
        string memory tokenuri;
        
        if (_hideTokens) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"os/contract.json"));
    }
    // *******************************************************************************

    receive() external payable {}
    
    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"activateClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addWL1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addWL2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWL1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWL2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mintWL1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mintWL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newstate","type":"uint256"}],"name":"setStateMachine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateMachine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f8060146101000a81548160ff021916908315150217905550348015610028575f80fd5b5061004561003a61015960201b60201c565b61016060201b60201c565b6040518060400160405280600a81526020017f446f596f754d6f6f73650000000000000000000000000000000000000000000081525060019081610089919061045b565b506040518060400160405280600581526020017f4d4f4f5345000000000000000000000000000000000000000000000000000000815250600290816100ce919061045b565b506040518060400160405280602081526020017f68747470733a2f2f646f796f756d6f6f73652e636f6d2f6d657461646174612f81525060039081610113919061045b565b50600160085f6101000a81548160ff021916908315150217905550610309600a819055506658d15e176280006009819055506002600c819055505f600d8190555061052a565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061029c57607f821691505b6020821081036102af576102ae610258565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102d6565b61031b86836102d6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61035f61035a61035584610333565b61033c565b610333565b9050919050565b5f819050919050565b61037883610345565b61038c61038482610366565b8484546102e2565b825550505050565b5f90565b6103a0610394565b6103ab81848461036f565b505050565b5b818110156103ce576103c35f82610398565b6001810190506103b1565b5050565b601f821115610413576103e4816102b5565b6103ed846102c7565b810160208510156103fc578190505b610410610408856102c7565b8301826103b0565b50505b505050565b5f82821c905092915050565b5f6104335f1984600802610418565b1980831691505092915050565b5f61044b8383610424565b9150826002028217905092915050565b61046482610221565b67ffffffffffffffff81111561047d5761047c61022b565b5b6104878254610285565b6104928282856103d2565b5f60209050601f8311600181146104c3575f84156104b1578287015190505b6104bb8582610440565b865550610522565b601f1984166104d1866102b5565b5f5b828110156104f8578489015182556001820191506020850194506020810190506104d3565b868310156105155784890151610511601f891682610424565b8355505b6001600288020188555050505b505050505050565b6151ef806105375f395ff3fe60806040526004361061026a575f3560e01c80637e1c0c0911610143578063b5b3e214116100b5578063e0b1f68c11610079578063e0b1f68c146108c3578063e7ba3bff146108ff578063e8a3d4851461091b578063e985e9c514610945578063f2fde38b14610981578063ffd88e66146109a957610271565b8063b5b3e214146107e5578063b88d4fde146107fb578063bd5946d014610823578063c87b56dd1461084b578063dbe7e3bd1461088757610271565b8063a035b1fe11610107578063a035b1fe14610711578063a0712d681461073b578063a22cb46514610757578063b0b922631461077f578063b1aeaa78146107a7578063b3aa8806146107bd57610271565b80637e1c0c091461064357806380ebcf6f1461066d5780638da5cb5b1461069557806391b7f5ed146106bf57806395d89b41146106e757610271565b80633ccfd60b116101dc57806349a772b5116101a057806349a772b51461052757806355f804b3146105515780636352211e146105795780636fddde00146105b557806370a08231146105f1578063715018a61461062d57610271565b80633ccfd60b1461046f5780633cffcec11461048557806342842e0e146104ad57806342966c68146104d5578063453c2310146104fd57610271565b806318160ddd1161022e57806318160ddd1461037957806323b872dd146103a357806335a7891d146103cb578063379607f51461040757806337b416d81461042f5780633ba5939d1461045957610271565b806301ffc9a71461027357806306fdde03146102af578063081812fc146102d9578063095ea7b314610315578063150b7a021461033d57610271565b3661027157005b005b34801561027e575f80fd5b5061029960048036038101906102949190613569565b6109c5565b6040516102a691906135ae565b60405180910390f35b3480156102ba575f80fd5b506102c3610b4d565b6040516102d09190613637565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa919061368a565b610bdd565b60405161030c91906136f4565b60405180910390f35b348015610320575f80fd5b5061033b60048036038101906103369190613737565b610c5e565b005b348015610348575f80fd5b50610363600480360381019061035e91906137d6565b610d66565b6040516103709190613869565b60405180910390f35b348015610384575f80fd5b5061038d610d7a565b60405161039a9190613891565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c491906138aa565b610d83565b005b3480156103d6575f80fd5b506103f160048036038101906103ec91906138fa565b610ddc565b6040516103fe91906135ae565b60405180910390f35b348015610412575f80fd5b5061042d6004803603810190610428919061368a565b610e44565b005b34801561043a575f80fd5b50610443611089565b6040516104509190613891565b60405180910390f35b348015610464575f80fd5b5061046d61108f565b005b34801561047a575f80fd5b50610483611126565b005b348015610490575f80fd5b506104ab60048036038101906104a69190613a5d565b611256565b005b3480156104b8575f80fd5b506104d360048036038101906104ce91906138aa565b61135d565b005b3480156104e0575f80fd5b506104fb60048036038101906104f6919061368a565b61137c565b005b348015610508575f80fd5b506105116113ce565b60405161051e9190613891565b60405180910390f35b348015610532575f80fd5b5061053b6113d4565b6040516105489190613891565b60405180910390f35b34801561055c575f80fd5b5061057760048036038101906105729190613b54565b6113da565b005b348015610584575f80fd5b5061059f600480360381019061059a919061368a565b611469565b6040516105ac91906136f4565b60405180910390f35b3480156105c0575f80fd5b506105db60048036038101906105d691906138fa565b611515565b6040516105e891906135ae565b60405180910390f35b3480156105fc575f80fd5b50610617600480360381019061061291906138fa565b61157d565b6040516106249190613891565b60405180910390f35b348015610638575f80fd5b50610641611631565b005b34801561064e575f80fd5b506106576116b8565b6040516106649190613891565b60405180910390f35b348015610678575f80fd5b50610693600480360381019061068e9190613a5d565b6116be565b005b3480156106a0575f80fd5b506106a96117c5565b6040516106b691906136f4565b60405180910390f35b3480156106ca575f80fd5b506106e560048036038101906106e0919061368a565b6117ec565b005b3480156106f2575f80fd5b506106fb611872565b6040516107089190613637565b60405180910390f35b34801561071c575f80fd5b50610725611902565b6040516107329190613891565b60405180910390f35b6107556004803603810190610750919061368a565b611908565b005b348015610762575f80fd5b5061077d60048036038101906107789190613bc5565b611bb7565b005b34801561078a575f80fd5b506107a560048036038101906107a0919061368a565b611d1d565b005b3480156107b2575f80fd5b506107bb611da3565b005b3480156107c8575f80fd5b506107e360048036038101906107de919061368a565b611e3c565b005b3480156107f0575f80fd5b506107f9611ec2565b005b348015610806575f80fd5b50610821600480360381019061081c9190613ca1565b611f5a565b005b34801561082e575f80fd5b506108496004803603810190610844919061368a565b611fb5565b005b348015610856575f80fd5b50610871600480360381019061086c919061368a565b61203b565b60405161087e9190613637565b60405180910390f35b348015610892575f80fd5b506108ad60048036038101906108a8919061368a565b6120fa565b6040516108ba91906136f4565b60405180910390f35b3480156108ce575f80fd5b506108e960048036038101906108e491906138fa565b61212a565b6040516108f69190613891565b60405180910390f35b6109196004803603810190610914919061368a565b61213f565b005b348015610926575f80fd5b5061092f61247e565b60405161093c9190613637565b60405180910390f35b348015610950575f80fd5b5061096b60048036038101906109669190613d21565b6124a6565b60405161097891906135ae565b60405180910390f35b34801561098c575f80fd5b506109a760048036038101906109a291906138fa565b612534565b005b6109c360048036038101906109be919061368a565b61262a565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b46575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b5c90613d8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8890613d8c565b8015610bd35780601f10610baa57610100808354040283529160200191610bd3565b820191905f5260205f20905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b5f610be782612969565b610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90613e06565b60405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610c6882611469565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613e6e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d185750610d1781336124a6565b5b610d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4e90613ed6565b60405180910390fd5b610d6183836129d1565b505050565b5f63150b7a0260e01b905095945050505050565b5f600b54905090565b610d8d3382612a87565b610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613f3e565b60405180910390fd5b610dd7838383612b63565b505050565b5f60011515600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610e3b5760019050610e3f565b5f90505b919050565b5f60149054906101000a900460ff1615610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613fa6565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550600860019054906101000a900460ff16610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef39061400e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660115f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190614076565b60405180910390fd5b610fa2612db3565b73ffffffffffffffffffffffffffffffffffffffff16610fc182611469565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906140de565b60405180910390fd5b61101f612db3565b60115f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8060146101000a81548160ff02191690831515021790555050565b600d5481565b611097612db3565b73ffffffffffffffffffffffffffffffffffffffff166110b56117c5565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614146565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b61112e612db3565b73ffffffffffffffffffffffffffffffffffffffff1661114c6117c5565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990614146565b60405180910390fd5b5f6111ab6117c5565b73ffffffffffffffffffffffffffffffffffffffff16476040516111ce90614191565b5f6040518083038185875af1925050503d805f8114611208576040519150601f19603f3d011682016040523d82523d5f602084013e61120d565b606091505b50508091505080611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906141ef565b60405180910390fd5b50565b61125e612db3565b73ffffffffffffffffffffffffffffffffffffffff1661127c6117c5565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990614146565b60405180910390fd5b5f5b815181101561135957600160105f8484815181106112f5576112f461420d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506112d4565b5050565b61137783838360405180602001604052805f815250611f5a565b505050565b61138581611469565b73ffffffffffffffffffffffffffffffffffffffff166113a3612db3565b73ffffffffffffffffffffffffffffffffffffffff16146113c2575f80fd5b6113cb81612dba565b50565b600c5481565b600b5481565b6113e2612db3565b73ffffffffffffffffffffffffffffffffffffffff166114006117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90614146565b60405180910390fd5b806003908161146591906143d7565b5050565b5f8060045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906144f0565b60405180910390fd5b80915050919050565b5f6001151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036115745760019050611578565b5f90505b919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390614558565b60405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611639612db3565b73ffffffffffffffffffffffffffffffffffffffff166116576117c5565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614146565b60405180910390fd5b6116b65f612ec1565b565b600a5481565b6116c6612db3565b73ffffffffffffffffffffffffffffffffffffffff166116e46117c5565b73ffffffffffffffffffffffffffffffffffffffff161461173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190614146565b60405180910390fd5b5f5b81518110156117c1576001600f5f84848151811061175d5761175c61420d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061173c565b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117f4612db3565b73ffffffffffffffffffffffffffffffffffffffff166118126117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f90614146565b60405180910390fd5b8060098190555050565b60606002805461188190613d8c565b80601f01602080910402602001604051908101604052809291908181526020018280546118ad90613d8c565b80156118f85780601f106118cf576101008083540402835291602001916118f8565b820191905f5260205f20905b8154815290600101906020018083116118db57829003601f168201915b5050505050905090565b60095481565b5f60149054906101000a900460ff1615611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613fa6565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f61197a612db3565b90506009548261198a91906145a3565b34146119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061462e565b60405180910390fd5b600c54600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483611a17919061464c565b1115611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f906146c9565b60405180910390fd5b6003600d5414611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614731565b60405180910390fd5b600a5482600b54611aae919061464c565b1115611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690614799565b60405180910390fd5b5f6001600b54611aff919061464c565b905082600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b4d919061464c565b9250508190555082600b5f828254611b65919061464c565b925050819055505f5b83811015611b9857611b8b838284611b86919061464c565b612f82565b8080600101915050611b6e565b5050505f8060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614801565b60405180910390fd5b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1191906135ae565b60405180910390a35050565b611d25612db3565b73ffffffffffffffffffffffffffffffffffffffff16611d436117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090614146565b60405180910390fd5b80600a8190555050565b611dab612db3565b73ffffffffffffffffffffffffffffffffffffffff16611dc96117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614146565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611e44612db3565b73ffffffffffffffffffffffffffffffffffffffff16611e626117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90614146565b60405180910390fd5b80600c8190555050565b611eca612db3565b73ffffffffffffffffffffffffffffffffffffffff16611ee86117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3590614146565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b611f643383612a87565b611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a90613f3e565b60405180910390fd5b611faf84848484612f9f565b50505050565b611fbd612db3565b73ffffffffffffffffffffffffffffffffffffffff16611fdb6117c5565b73ffffffffffffffffffffffffffffffffffffffff1614612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614146565b60405180910390fd5b80600d8190555050565b606061204682612969565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90614869565b60405180910390fd5b606060085f9054906101000a900460ff16156120c35760036040516020016120ad919061495b565b60405160208183030381529060405290506120f1565b60036120ce84612ffb565b6040516020016120df9291906149f6565b60405160208183030381529060405290505b80915050919050565b6011602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e602052805f5260405f205f915090505481565b5f60149054906101000a900460ff161561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590613fa6565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f6121b1612db3565b9050600954826121c191906145a3565b3414612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f99061462e565b60405180910390fd5b600c54600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361224e919061464c565b111561228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906146c9565b60405180910390fd5b6001600d54146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614a6e565b60405180910390fd5b61012c82600b546122e5919061464c565b1115612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90614ad6565b60405180910390fd5b60011515600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146123b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ad90614b3e565b60405180910390fd5b5f6001600b546123c6919061464c565b905082600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612414919061464c565b9250508190555082600b5f82825461242c919061464c565b925050819055505f5b8381101561245f5761245283828461244d919061464c565b612f82565b8080600101915050612435565b5050505f8060146101000a81548160ff02191690831515021790555050565b606060036040516020016124929190614ba6565b604051602081830303815290604052905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61253c612db3565b73ffffffffffffffffffffffffffffffffffffffff1661255a6117c5565b73ffffffffffffffffffffffffffffffffffffffff16146125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790614146565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361261e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261590614c11565b60405180910390fd5b61262781612ec1565b50565b5f60149054906101000a900460ff1615612679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267090613fa6565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f61269c612db3565b9050600954826126ac91906145a3565b34146126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e49061462e565b60405180910390fd5b600c54600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612739919061464c565b111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146c9565b60405180910390fd5b6002600d54146127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b690614c79565b60405180910390fd5b6102bc82600b546127d0919061464c565b1115612811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280890614ce1565b60405180910390fd5b6001151560105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614d49565b60405180910390fd5b5f6001600b546128b1919061464c565b905082600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546128ff919061464c565b9250508190555082600b5f828254612917919061464c565b925050819055505f5b8381101561294a5761293d838284612938919061464c565b612f82565b8080600101915050612920565b5050505f8060146101000a81548160ff02191690831515021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160065f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a4183611469565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f612a9182612969565b612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790614db1565b60405180910390fd5b5f612ada83611469565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b4957508373ffffffffffffffffffffffffffffffffffffffff16612b3184610bdd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b5a5750612b5981856124a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b8382611469565b73ffffffffffffffffffffffffffffffffffffffff1614612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614e19565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90614e81565b60405180910390fd5b612c52838383613154565b612c5c5f826129d1565b600160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ca99190614e9f565b92505081905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612cfd919061464c565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f33905090565b5f612dc482611469565b9050612dd1815f84613154565b612ddb5f836129d1565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612e289190614e9f565b9250508190555060045f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f9b828260405180602001604052805f815250613159565b5050565b612faa848484612b63565b612fb6848484846131b3565b612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec90614f1c565b60405180910390fd5b50505050565b60605f8203613041576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061314f565b5f8290505f5b5f821461307057808061305990614f3a565b915050600a826130699190614fae565b9150613047565b5f8167ffffffffffffffff81111561308b5761308a613925565b5b6040519080825280601f01601f1916602001820160405280156130bd5781602001600182028036833780820191505090505b5090505b5f8514613148576001826130d59190614e9f565b9150600a856130e49190614fde565b60306130f0919061464c565b60f81b8183815181106131065761310561420d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856131419190614fae565b94506130c1565b8093505050505b919050565b505050565b613163838361332e565b61316f5f8484846131b3565b6131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a590614f1c565b60405180910390fd5b505050565b5f6131d38473ffffffffffffffffffffffffffffffffffffffff166134f2565b15613321578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016132179493929190615060565b6020604051808303815f875af192505050801561325257506040513d601f19601f8201168201806040525081019061324f91906150be565b60015b6132d1573d805f8114613280576040519150601f19603f3d011682016040523d82523d5f602084013e613285565b606091505b505f8151036132c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c090614f1c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613326565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361339c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339390615133565b60405180910390fd5b6133a581612969565b156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc9061519b565b60405180910390fd5b6133f05f8383613154565b600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461343d919061464c565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61354881613514565b8114613552575f80fd5b50565b5f813590506135638161353f565b92915050565b5f6020828403121561357e5761357d61350c565b5b5f61358b84828501613555565b91505092915050565b5f8115159050919050565b6135a881613594565b82525050565b5f6020820190506135c15f83018461359f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613609826135c7565b61361381856135d1565b93506136238185602086016135e1565b61362c816135ef565b840191505092915050565b5f6020820190508181035f83015261364f81846135ff565b905092915050565b5f819050919050565b61366981613657565b8114613673575f80fd5b50565b5f8135905061368481613660565b92915050565b5f6020828403121561369f5761369e61350c565b5b5f6136ac84828501613676565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136de826136b5565b9050919050565b6136ee816136d4565b82525050565b5f6020820190506137075f8301846136e5565b92915050565b613716816136d4565b8114613720575f80fd5b50565b5f813590506137318161370d565b92915050565b5f806040838503121561374d5761374c61350c565b5b5f61375a85828601613723565b925050602061376b85828601613676565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261379657613795613775565b5b8235905067ffffffffffffffff8111156137b3576137b2613779565b5b6020830191508360018202830111156137cf576137ce61377d565b5b9250929050565b5f805f805f608086880312156137ef576137ee61350c565b5b5f6137fc88828901613723565b955050602061380d88828901613723565b945050604061381e88828901613676565b935050606086013567ffffffffffffffff81111561383f5761383e613510565b5b61384b88828901613781565b92509250509295509295909350565b61386381613514565b82525050565b5f60208201905061387c5f83018461385a565b92915050565b61388b81613657565b82525050565b5f6020820190506138a45f830184613882565b92915050565b5f805f606084860312156138c1576138c061350c565b5b5f6138ce86828701613723565b93505060206138df86828701613723565b92505060406138f086828701613676565b9150509250925092565b5f6020828403121561390f5761390e61350c565b5b5f61391c84828501613723565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61395b826135ef565b810181811067ffffffffffffffff8211171561397a57613979613925565b5b80604052505050565b5f61398c613503565b90506139988282613952565b919050565b5f67ffffffffffffffff8211156139b7576139b6613925565b5b602082029050602081019050919050565b5f6139da6139d58461399d565b613983565b905080838252602082019050602084028301858111156139fd576139fc61377d565b5b835b81811015613a265780613a128882613723565b8452602084019350506020810190506139ff565b5050509392505050565b5f82601f830112613a4457613a43613775565b5b8135613a548482602086016139c8565b91505092915050565b5f60208284031215613a7257613a7161350c565b5b5f82013567ffffffffffffffff811115613a8f57613a8e613510565b5b613a9b84828501613a30565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115613ac257613ac1613925565b5b613acb826135ef565b9050602081019050919050565b828183375f83830152505050565b5f613af8613af384613aa8565b613983565b905082815260208101848484011115613b1457613b13613aa4565b5b613b1f848285613ad8565b509392505050565b5f82601f830112613b3b57613b3a613775565b5b8135613b4b848260208601613ae6565b91505092915050565b5f60208284031215613b6957613b6861350c565b5b5f82013567ffffffffffffffff811115613b8657613b85613510565b5b613b9284828501613b27565b91505092915050565b613ba481613594565b8114613bae575f80fd5b50565b5f81359050613bbf81613b9b565b92915050565b5f8060408385031215613bdb57613bda61350c565b5b5f613be885828601613723565b9250506020613bf985828601613bb1565b9150509250929050565b5f67ffffffffffffffff821115613c1d57613c1c613925565b5b613c26826135ef565b9050602081019050919050565b5f613c45613c4084613c03565b613983565b905082815260208101848484011115613c6157613c60613aa4565b5b613c6c848285613ad8565b509392505050565b5f82601f830112613c8857613c87613775565b5b8135613c98848260208601613c33565b91505092915050565b5f805f8060808587031215613cb957613cb861350c565b5b5f613cc687828801613723565b9450506020613cd787828801613723565b9350506040613ce887828801613676565b925050606085013567ffffffffffffffff811115613d0957613d08613510565b5b613d1587828801613c74565b91505092959194509250565b5f8060408385031215613d3757613d3661350c565b5b5f613d4485828601613723565b9250506020613d5585828601613723565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613da357607f821691505b602082108103613db657613db5613d5f565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e5f82015250565b5f613df06020836135d1565b9150613dfb82613dbc565b602082019050919050565b5f6020820190508181035f830152613e1d81613de4565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e657200005f82015250565b5f613e58601e836135d1565b9150613e6382613e24565b602082019050919050565b5f6020820190508181035f830152613e8581613e4c565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f766564005f82015250565b5f613ec0601f836135d1565b9150613ecb82613e8c565b602082019050919050565b5f6020820190508181035f830152613eed81613eb4565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f766564000000005f82015250565b5f613f28601c836135d1565b9150613f3382613ef4565b602082019050919050565b5f6020820190508181035f830152613f5581613f1c565b9050919050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e005f82015250565b5f613f90601f836135d1565b9150613f9b82613f5c565b602082019050919050565b5f6020820190508181035f830152613fbd81613f84565b9050919050565b7f436c61696d696e67206e6f7420617661696c61626c65000000000000000000005f82015250565b5f613ff86016836135d1565b915061400382613fc4565b602082019050919050565b5f6020820190508181035f83015261402581613fec565b9050919050565b7f616c726561647920636c61696d656400000000000000000000000000000000005f82015250565b5f614060600f836135d1565b915061406b8261402c565b602082019050919050565b5f6020820190508181035f83015261408d81614054565b9050919050565b7f6d757374206f776e20746865204e4654000000000000000000000000000000005f82015250565b5f6140c86010836135d1565b91506140d382614094565b602082019050919050565b5f6020820190508181035f8301526140f5816140bc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6141306020836135d1565b915061413b826140fc565b602082019050919050565b5f6020820190508181035f83015261415d81614124565b9050919050565b5f81905092915050565b50565b5f61417c5f83614164565b91506141878261416e565b5f82019050919050565b5f61419b82614171565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c00000000000000005f82015250565b5f6141d96018836135d1565b91506141e4826141a5565b602082019050919050565b5f6020820190508181035f830152614206816141cd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026142967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261425b565b6142a0868361425b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6142db6142d66142d184613657565b6142b8565b613657565b9050919050565b5f819050919050565b6142f4836142c1565b614308614300826142e2565b848454614267565b825550505050565b5f90565b61431c614310565b6143278184846142eb565b505050565b5b8181101561434a5761433f5f82614314565b60018101905061432d565b5050565b601f82111561438f576143608161423a565b6143698461424c565b81016020851015614378578190505b61438c6143848561424c565b83018261432c565b50505b505050565b5f82821c905092915050565b5f6143af5f1984600802614394565b1980831691505092915050565b5f6143c783836143a0565b9150826002028217905092915050565b6143e0826135c7565b67ffffffffffffffff8111156143f9576143f8613925565b5b6144038254613d8c565b61440e82828561434e565b5f60209050601f83116001811461443f575f841561442d578287015190505b61443785826143bc565b86555061449e565b601f19841661444d8661423a565b5f5b828110156144745784890151825560018201915060208501945060208101905061444f565b86831015614491578489015161448d601f8916826143a0565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e00005f82015250565b5f6144da601e836135d1565b91506144e5826144a6565b602082019050919050565b5f6020820190508181035f830152614507816144ce565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f20616464726573735f82015250565b5f6145426020836135d1565b915061454d8261450e565b602082019050919050565b5f6020820190508181035f83015261456f81614536565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6145ad82613657565b91506145b883613657565b92508282026145c681613657565b915082820484148315176145dd576145dc614576565b5b5092915050565b7f4d696e743a2057726f6e672050757263686173652050726963650000000000005f82015250565b5f614618601a836135d1565b9150614623826145e4565b602082019050919050565b5f6020820190508181035f8301526146458161460c565b9050919050565b5f61465682613657565b915061466183613657565b925082820190508082111561467957614678614576565b5b92915050565b7f43616e2774206d696e74206d6f726500000000000000000000000000000000005f82015250565b5f6146b3600f836135d1565b91506146be8261467f565b602082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f4d696e74206e6f74206f70656e000000000000000000000000000000000000005f82015250565b5f61471b600d836135d1565b9150614726826146e7565b602082019050919050565b5f6020820190508181035f8301526147488161470f565b9050919050565b7f4d696e746564204f7574000000000000000000000000000000000000000000005f82015250565b5f614783600a836135d1565b915061478e8261474f565b602082019050919050565b5f6020820190508181035f8301526147b081614777565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6147eb6019836135d1565b91506147f6826147b7565b602082019050919050565b5f6020820190508181035f830152614818816147df565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e0000005f82015250565b5f614853601d836135d1565b915061485e8261481f565b602082019050919050565b5f6020820190508181035f83015261488081614847565b9050919050565b5f81905092915050565b5f815461489d81613d8c565b6148a78186614887565b9450600182165f81146148c157600181146148d657614908565b60ff1983168652811515820286019350614908565b6148df8561423a565b5f5b83811015614900578154818901526001820191506020810190506148e1565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e00000000000000000000000000000000000000005f82015250565b5f614945600c83614887565b915061495082614911565b600c82019050919050565b5f6149668284614891565b915061497182614939565b915081905092915050565b5f614986826135c7565b6149908185614887565b93506149a08185602086016135e1565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6149e0600583614887565b91506149eb826149ac565b600582019050919050565b5f614a018285614891565b9150614a0d828461497c565b9150614a18826149d4565b91508190509392505050565b7f57686974656c6973742031206e6f74206f70656e0000000000000000000000005f82015250565b5f614a586014836135d1565b9150614a6382614a24565b602082019050919050565b5f6020820190508181035f830152614a8581614a4c565b9050919050565b7f50686173652031206d696e746564206f757400000000000000000000000000005f82015250565b5f614ac06012836135d1565b9150614acb82614a8c565b602082019050919050565b5f6020820190508181035f830152614aed81614ab4565b9050919050565b7f4e6f74206f6e2057686974656c697374203100000000000000000000000000005f82015250565b5f614b286012836135d1565b9150614b3382614af4565b602082019050919050565b5f6020820190508181035f830152614b5581614b1c565b9050919050565b7f6f732f636f6e74726163742e6a736f6e000000000000000000000000000000005f82015250565b5f614b90601083614887565b9150614b9b82614b5c565b601082019050919050565b5f614bb18284614891565b9150614bbc82614b84565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320307820616464726573735f82015250565b5f614bfb6020836135d1565b9150614c0682614bc7565b602082019050919050565b5f6020820190508181035f830152614c2881614bef565b9050919050565b7f57686974656c6973742032206e6f74206f70656e0000000000000000000000005f82015250565b5f614c636014836135d1565b9150614c6e82614c2f565b602082019050919050565b5f6020820190508181035f830152614c9081614c57565b9050919050565b7f50686173652032206d696e746564206f757400000000000000000000000000005f82015250565b5f614ccb6012836135d1565b9150614cd682614c97565b602082019050919050565b5f6020820190508181035f830152614cf881614cbf565b9050919050565b7f4e6f74206f6e2057686974656c697374203200000000000000000000000000005f82015250565b5f614d336012836135d1565b9150614d3e82614cff565b602082019050919050565b5f6020820190508181035f830152614d6081614d27565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e5f82015250565b5f614d9b6020836135d1565b9150614da682614d67565b602082019050919050565b5f6020820190508181035f830152614dc881614d8f565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e6564000000005f82015250565b5f614e03601c836135d1565b9150614e0e82614dcf565b602082019050919050565b5f6020820190508181035f830152614e3081614df7565b9050919050565b7f4552433732313a207478667220746f20307830206164647265737300000000005f82015250565b5f614e6b601b836135d1565b9150614e7682614e37565b602082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b5f614ea982613657565b9150614eb483613657565b9250828203905081811115614ecc57614ecb614576565b5b92915050565b7f7478667220746f206e6f6e2045524337323152656369657665720000000000005f82015250565b5f614f06601a836135d1565b9150614f1182614ed2565b602082019050919050565b5f6020820190508181035f830152614f3381614efa565b9050919050565b5f614f4482613657565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f7657614f75614576565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614fb882613657565b9150614fc383613657565b925082614fd357614fd2614f81565b5b828204905092915050565b5f614fe882613657565b9150614ff383613657565b92508261500357615002614f81565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6150328261500e565b61503c8185615018565b935061504c8185602086016135e1565b615055816135ef565b840191505092915050565b5f6080820190506150735f8301876136e5565b61508060208301866136e5565b61508d6040830185613882565b818103606083015261509f8184615028565b905095945050505050565b5f815190506150b88161353f565b92915050565b5f602082840312156150d3576150d261350c565b5b5f6150e0848285016150aa565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f61511d6020836135d1565b9150615128826150e9565b602082019050919050565b5f6020820190508181035f83015261514a81615111565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f615185601c836135d1565b915061519082615151565b602082019050919050565b5f6020820190508181035f8301526151b281615179565b905091905056fea26469706673582212206b0f5461a6086fc36554fbd20fd264e51de3df4deb6e1545f65fcc6f6b9610fe64736f6c63430008190033

Deployed Bytecode

0x60806040526004361061026a575f3560e01c80637e1c0c0911610143578063b5b3e214116100b5578063e0b1f68c11610079578063e0b1f68c146108c3578063e7ba3bff146108ff578063e8a3d4851461091b578063e985e9c514610945578063f2fde38b14610981578063ffd88e66146109a957610271565b8063b5b3e214146107e5578063b88d4fde146107fb578063bd5946d014610823578063c87b56dd1461084b578063dbe7e3bd1461088757610271565b8063a035b1fe11610107578063a035b1fe14610711578063a0712d681461073b578063a22cb46514610757578063b0b922631461077f578063b1aeaa78146107a7578063b3aa8806146107bd57610271565b80637e1c0c091461064357806380ebcf6f1461066d5780638da5cb5b1461069557806391b7f5ed146106bf57806395d89b41146106e757610271565b80633ccfd60b116101dc57806349a772b5116101a057806349a772b51461052757806355f804b3146105515780636352211e146105795780636fddde00146105b557806370a08231146105f1578063715018a61461062d57610271565b80633ccfd60b1461046f5780633cffcec11461048557806342842e0e146104ad57806342966c68146104d5578063453c2310146104fd57610271565b806318160ddd1161022e57806318160ddd1461037957806323b872dd146103a357806335a7891d146103cb578063379607f51461040757806337b416d81461042f5780633ba5939d1461045957610271565b806301ffc9a71461027357806306fdde03146102af578063081812fc146102d9578063095ea7b314610315578063150b7a021461033d57610271565b3661027157005b005b34801561027e575f80fd5b5061029960048036038101906102949190613569565b6109c5565b6040516102a691906135ae565b60405180910390f35b3480156102ba575f80fd5b506102c3610b4d565b6040516102d09190613637565b60405180910390f35b3480156102e4575f80fd5b506102ff60048036038101906102fa919061368a565b610bdd565b60405161030c91906136f4565b60405180910390f35b348015610320575f80fd5b5061033b60048036038101906103369190613737565b610c5e565b005b348015610348575f80fd5b50610363600480360381019061035e91906137d6565b610d66565b6040516103709190613869565b60405180910390f35b348015610384575f80fd5b5061038d610d7a565b60405161039a9190613891565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c491906138aa565b610d83565b005b3480156103d6575f80fd5b506103f160048036038101906103ec91906138fa565b610ddc565b6040516103fe91906135ae565b60405180910390f35b348015610412575f80fd5b5061042d6004803603810190610428919061368a565b610e44565b005b34801561043a575f80fd5b50610443611089565b6040516104509190613891565b60405180910390f35b348015610464575f80fd5b5061046d61108f565b005b34801561047a575f80fd5b50610483611126565b005b348015610490575f80fd5b506104ab60048036038101906104a69190613a5d565b611256565b005b3480156104b8575f80fd5b506104d360048036038101906104ce91906138aa565b61135d565b005b3480156104e0575f80fd5b506104fb60048036038101906104f6919061368a565b61137c565b005b348015610508575f80fd5b506105116113ce565b60405161051e9190613891565b60405180910390f35b348015610532575f80fd5b5061053b6113d4565b6040516105489190613891565b60405180910390f35b34801561055c575f80fd5b5061057760048036038101906105729190613b54565b6113da565b005b348015610584575f80fd5b5061059f600480360381019061059a919061368a565b611469565b6040516105ac91906136f4565b60405180910390f35b3480156105c0575f80fd5b506105db60048036038101906105d691906138fa565b611515565b6040516105e891906135ae565b60405180910390f35b3480156105fc575f80fd5b50610617600480360381019061061291906138fa565b61157d565b6040516106249190613891565b60405180910390f35b348015610638575f80fd5b50610641611631565b005b34801561064e575f80fd5b506106576116b8565b6040516106649190613891565b60405180910390f35b348015610678575f80fd5b50610693600480360381019061068e9190613a5d565b6116be565b005b3480156106a0575f80fd5b506106a96117c5565b6040516106b691906136f4565b60405180910390f35b3480156106ca575f80fd5b506106e560048036038101906106e0919061368a565b6117ec565b005b3480156106f2575f80fd5b506106fb611872565b6040516107089190613637565b60405180910390f35b34801561071c575f80fd5b50610725611902565b6040516107329190613891565b60405180910390f35b6107556004803603810190610750919061368a565b611908565b005b348015610762575f80fd5b5061077d60048036038101906107789190613bc5565b611bb7565b005b34801561078a575f80fd5b506107a560048036038101906107a0919061368a565b611d1d565b005b3480156107b2575f80fd5b506107bb611da3565b005b3480156107c8575f80fd5b506107e360048036038101906107de919061368a565b611e3c565b005b3480156107f0575f80fd5b506107f9611ec2565b005b348015610806575f80fd5b50610821600480360381019061081c9190613ca1565b611f5a565b005b34801561082e575f80fd5b506108496004803603810190610844919061368a565b611fb5565b005b348015610856575f80fd5b50610871600480360381019061086c919061368a565b61203b565b60405161087e9190613637565b60405180910390f35b348015610892575f80fd5b506108ad60048036038101906108a8919061368a565b6120fa565b6040516108ba91906136f4565b60405180910390f35b3480156108ce575f80fd5b506108e960048036038101906108e491906138fa565b61212a565b6040516108f69190613891565b60405180910390f35b6109196004803603810190610914919061368a565b61213f565b005b348015610926575f80fd5b5061092f61247e565b60405161093c9190613637565b60405180910390f35b348015610950575f80fd5b5061096b60048036038101906109669190613d21565b6124a6565b60405161097891906135ae565b60405180910390f35b34801561098c575f80fd5b506109a760048036038101906109a291906138fa565b612534565b005b6109c360048036038101906109be919061368a565b61262a565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b46575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b5c90613d8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8890613d8c565b8015610bd35780601f10610baa57610100808354040283529160200191610bd3565b820191905f5260205f20905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b5f610be782612969565b610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90613e06565b60405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610c6882611469565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613e6e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d185750610d1781336124a6565b5b610d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4e90613ed6565b60405180910390fd5b610d6183836129d1565b505050565b5f63150b7a0260e01b905095945050505050565b5f600b54905090565b610d8d3382612a87565b610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613f3e565b60405180910390fd5b610dd7838383612b63565b505050565b5f60011515600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610e3b5760019050610e3f565b5f90505b919050565b5f60149054906101000a900460ff1615610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613fa6565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550600860019054906101000a900460ff16610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef39061400e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660115f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190614076565b60405180910390fd5b610fa2612db3565b73ffffffffffffffffffffffffffffffffffffffff16610fc182611469565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906140de565b60405180910390fd5b61101f612db3565b60115f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8060146101000a81548160ff02191690831515021790555050565b600d5481565b611097612db3565b73ffffffffffffffffffffffffffffffffffffffff166110b56117c5565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614146565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b61112e612db3565b73ffffffffffffffffffffffffffffffffffffffff1661114c6117c5565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990614146565b60405180910390fd5b5f6111ab6117c5565b73ffffffffffffffffffffffffffffffffffffffff16476040516111ce90614191565b5f6040518083038185875af1925050503d805f8114611208576040519150601f19603f3d011682016040523d82523d5f602084013e61120d565b606091505b50508091505080611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906141ef565b60405180910390fd5b50565b61125e612db3565b73ffffffffffffffffffffffffffffffffffffffff1661127c6117c5565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990614146565b60405180910390fd5b5f5b815181101561135957600160105f8484815181106112f5576112f461420d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506112d4565b5050565b61137783838360405180602001604052805f815250611f5a565b505050565b61138581611469565b73ffffffffffffffffffffffffffffffffffffffff166113a3612db3565b73ffffffffffffffffffffffffffffffffffffffff16146113c2575f80fd5b6113cb81612dba565b50565b600c5481565b600b5481565b6113e2612db3565b73ffffffffffffffffffffffffffffffffffffffff166114006117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90614146565b60405180910390fd5b806003908161146591906143d7565b5050565b5f8060045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906144f0565b60405180910390fd5b80915050919050565b5f6001151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036115745760019050611578565b5f90505b919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390614558565b60405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611639612db3565b73ffffffffffffffffffffffffffffffffffffffff166116576117c5565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614146565b60405180910390fd5b6116b65f612ec1565b565b600a5481565b6116c6612db3565b73ffffffffffffffffffffffffffffffffffffffff166116e46117c5565b73ffffffffffffffffffffffffffffffffffffffff161461173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190614146565b60405180910390fd5b5f5b81518110156117c1576001600f5f84848151811061175d5761175c61420d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061173c565b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117f4612db3565b73ffffffffffffffffffffffffffffffffffffffff166118126117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f90614146565b60405180910390fd5b8060098190555050565b60606002805461188190613d8c565b80601f01602080910402602001604051908101604052809291908181526020018280546118ad90613d8c565b80156118f85780601f106118cf576101008083540402835291602001916118f8565b820191905f5260205f20905b8154815290600101906020018083116118db57829003601f168201915b5050505050905090565b60095481565b5f60149054906101000a900460ff1615611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613fa6565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f61197a612db3565b90506009548261198a91906145a3565b34146119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061462e565b60405180910390fd5b600c54600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483611a17919061464c565b1115611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f906146c9565b60405180910390fd5b6003600d5414611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614731565b60405180910390fd5b600a5482600b54611aae919061464c565b1115611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690614799565b60405180910390fd5b5f6001600b54611aff919061464c565b905082600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b4d919061464c565b9250508190555082600b5f828254611b65919061464c565b925050819055505f5b83811015611b9857611b8b838284611b86919061464c565b612f82565b8080600101915050611b6e565b5050505f8060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614801565b60405180910390fd5b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1191906135ae565b60405180910390a35050565b611d25612db3565b73ffffffffffffffffffffffffffffffffffffffff16611d436117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090614146565b60405180910390fd5b80600a8190555050565b611dab612db3565b73ffffffffffffffffffffffffffffffffffffffff16611dc96117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614146565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611e44612db3565b73ffffffffffffffffffffffffffffffffffffffff16611e626117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90614146565b60405180910390fd5b80600c8190555050565b611eca612db3565b73ffffffffffffffffffffffffffffffffffffffff16611ee86117c5565b73ffffffffffffffffffffffffffffffffffffffff1614611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3590614146565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b611f643383612a87565b611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a90613f3e565b60405180910390fd5b611faf84848484612f9f565b50505050565b611fbd612db3565b73ffffffffffffffffffffffffffffffffffffffff16611fdb6117c5565b73ffffffffffffffffffffffffffffffffffffffff1614612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614146565b60405180910390fd5b80600d8190555050565b606061204682612969565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90614869565b60405180910390fd5b606060085f9054906101000a900460ff16156120c35760036040516020016120ad919061495b565b60405160208183030381529060405290506120f1565b60036120ce84612ffb565b6040516020016120df9291906149f6565b60405160208183030381529060405290505b80915050919050565b6011602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e602052805f5260405f205f915090505481565b5f60149054906101000a900460ff161561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590613fa6565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f6121b1612db3565b9050600954826121c191906145a3565b3414612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f99061462e565b60405180910390fd5b600c54600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361224e919061464c565b111561228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906146c9565b60405180910390fd5b6001600d54146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614a6e565b60405180910390fd5b61012c82600b546122e5919061464c565b1115612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90614ad6565b60405180910390fd5b60011515600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146123b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ad90614b3e565b60405180910390fd5b5f6001600b546123c6919061464c565b905082600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612414919061464c565b9250508190555082600b5f82825461242c919061464c565b925050819055505f5b8381101561245f5761245283828461244d919061464c565b612f82565b8080600101915050612435565b5050505f8060146101000a81548160ff02191690831515021790555050565b606060036040516020016124929190614ba6565b604051602081830303815290604052905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61253c612db3565b73ffffffffffffffffffffffffffffffffffffffff1661255a6117c5565b73ffffffffffffffffffffffffffffffffffffffff16146125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790614146565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361261e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261590614c11565b60405180910390fd5b61262781612ec1565b50565b5f60149054906101000a900460ff1615612679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267090613fa6565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f61269c612db3565b9050600954826126ac91906145a3565b34146126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e49061462e565b60405180910390fd5b600c54600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612739919061464c565b111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146c9565b60405180910390fd5b6002600d54146127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b690614c79565b60405180910390fd5b6102bc82600b546127d0919061464c565b1115612811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280890614ce1565b60405180910390fd5b6001151560105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614d49565b60405180910390fd5b5f6001600b546128b1919061464c565b905082600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546128ff919061464c565b9250508190555082600b5f828254612917919061464c565b925050819055505f5b8381101561294a5761293d838284612938919061464c565b612f82565b8080600101915050612920565b5050505f8060146101000a81548160ff02191690831515021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160065f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a4183611469565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f612a9182612969565b612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790614db1565b60405180910390fd5b5f612ada83611469565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b4957508373ffffffffffffffffffffffffffffffffffffffff16612b3184610bdd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b5a5750612b5981856124a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b8382611469565b73ffffffffffffffffffffffffffffffffffffffff1614612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614e19565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90614e81565b60405180910390fd5b612c52838383613154565b612c5c5f826129d1565b600160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ca99190614e9f565b92505081905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612cfd919061464c565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f33905090565b5f612dc482611469565b9050612dd1815f84613154565b612ddb5f836129d1565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612e289190614e9f565b9250508190555060045f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f9b828260405180602001604052805f815250613159565b5050565b612faa848484612b63565b612fb6848484846131b3565b612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec90614f1c565b60405180910390fd5b50505050565b60605f8203613041576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061314f565b5f8290505f5b5f821461307057808061305990614f3a565b915050600a826130699190614fae565b9150613047565b5f8167ffffffffffffffff81111561308b5761308a613925565b5b6040519080825280601f01601f1916602001820160405280156130bd5781602001600182028036833780820191505090505b5090505b5f8514613148576001826130d59190614e9f565b9150600a856130e49190614fde565b60306130f0919061464c565b60f81b8183815181106131065761310561420d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856131419190614fae565b94506130c1565b8093505050505b919050565b505050565b613163838361332e565b61316f5f8484846131b3565b6131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a590614f1c565b60405180910390fd5b505050565b5f6131d38473ffffffffffffffffffffffffffffffffffffffff166134f2565b15613321578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016132179493929190615060565b6020604051808303815f875af192505050801561325257506040513d601f19601f8201168201806040525081019061324f91906150be565b60015b6132d1573d805f8114613280576040519150601f19603f3d011682016040523d82523d5f602084013e613285565b606091505b505f8151036132c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c090614f1c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613326565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361339c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339390615133565b60405180910390fd5b6133a581612969565b156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc9061519b565b60405180910390fd5b6133f05f8383613154565b600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461343d919061464c565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61354881613514565b8114613552575f80fd5b50565b5f813590506135638161353f565b92915050565b5f6020828403121561357e5761357d61350c565b5b5f61358b84828501613555565b91505092915050565b5f8115159050919050565b6135a881613594565b82525050565b5f6020820190506135c15f83018461359f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613609826135c7565b61361381856135d1565b93506136238185602086016135e1565b61362c816135ef565b840191505092915050565b5f6020820190508181035f83015261364f81846135ff565b905092915050565b5f819050919050565b61366981613657565b8114613673575f80fd5b50565b5f8135905061368481613660565b92915050565b5f6020828403121561369f5761369e61350c565b5b5f6136ac84828501613676565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136de826136b5565b9050919050565b6136ee816136d4565b82525050565b5f6020820190506137075f8301846136e5565b92915050565b613716816136d4565b8114613720575f80fd5b50565b5f813590506137318161370d565b92915050565b5f806040838503121561374d5761374c61350c565b5b5f61375a85828601613723565b925050602061376b85828601613676565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261379657613795613775565b5b8235905067ffffffffffffffff8111156137b3576137b2613779565b5b6020830191508360018202830111156137cf576137ce61377d565b5b9250929050565b5f805f805f608086880312156137ef576137ee61350c565b5b5f6137fc88828901613723565b955050602061380d88828901613723565b945050604061381e88828901613676565b935050606086013567ffffffffffffffff81111561383f5761383e613510565b5b61384b88828901613781565b92509250509295509295909350565b61386381613514565b82525050565b5f60208201905061387c5f83018461385a565b92915050565b61388b81613657565b82525050565b5f6020820190506138a45f830184613882565b92915050565b5f805f606084860312156138c1576138c061350c565b5b5f6138ce86828701613723565b93505060206138df86828701613723565b92505060406138f086828701613676565b9150509250925092565b5f6020828403121561390f5761390e61350c565b5b5f61391c84828501613723565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61395b826135ef565b810181811067ffffffffffffffff8211171561397a57613979613925565b5b80604052505050565b5f61398c613503565b90506139988282613952565b919050565b5f67ffffffffffffffff8211156139b7576139b6613925565b5b602082029050602081019050919050565b5f6139da6139d58461399d565b613983565b905080838252602082019050602084028301858111156139fd576139fc61377d565b5b835b81811015613a265780613a128882613723565b8452602084019350506020810190506139ff565b5050509392505050565b5f82601f830112613a4457613a43613775565b5b8135613a548482602086016139c8565b91505092915050565b5f60208284031215613a7257613a7161350c565b5b5f82013567ffffffffffffffff811115613a8f57613a8e613510565b5b613a9b84828501613a30565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115613ac257613ac1613925565b5b613acb826135ef565b9050602081019050919050565b828183375f83830152505050565b5f613af8613af384613aa8565b613983565b905082815260208101848484011115613b1457613b13613aa4565b5b613b1f848285613ad8565b509392505050565b5f82601f830112613b3b57613b3a613775565b5b8135613b4b848260208601613ae6565b91505092915050565b5f60208284031215613b6957613b6861350c565b5b5f82013567ffffffffffffffff811115613b8657613b85613510565b5b613b9284828501613b27565b91505092915050565b613ba481613594565b8114613bae575f80fd5b50565b5f81359050613bbf81613b9b565b92915050565b5f8060408385031215613bdb57613bda61350c565b5b5f613be885828601613723565b9250506020613bf985828601613bb1565b9150509250929050565b5f67ffffffffffffffff821115613c1d57613c1c613925565b5b613c26826135ef565b9050602081019050919050565b5f613c45613c4084613c03565b613983565b905082815260208101848484011115613c6157613c60613aa4565b5b613c6c848285613ad8565b509392505050565b5f82601f830112613c8857613c87613775565b5b8135613c98848260208601613c33565b91505092915050565b5f805f8060808587031215613cb957613cb861350c565b5b5f613cc687828801613723565b9450506020613cd787828801613723565b9350506040613ce887828801613676565b925050606085013567ffffffffffffffff811115613d0957613d08613510565b5b613d1587828801613c74565b91505092959194509250565b5f8060408385031215613d3757613d3661350c565b5b5f613d4485828601613723565b9250506020613d5585828601613723565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613da357607f821691505b602082108103613db657613db5613d5f565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e5f82015250565b5f613df06020836135d1565b9150613dfb82613dbc565b602082019050919050565b5f6020820190508181035f830152613e1d81613de4565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e657200005f82015250565b5f613e58601e836135d1565b9150613e6382613e24565b602082019050919050565b5f6020820190508181035f830152613e8581613e4c565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f766564005f82015250565b5f613ec0601f836135d1565b9150613ecb82613e8c565b602082019050919050565b5f6020820190508181035f830152613eed81613eb4565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f766564000000005f82015250565b5f613f28601c836135d1565b9150613f3382613ef4565b602082019050919050565b5f6020820190508181035f830152613f5581613f1c565b9050919050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e005f82015250565b5f613f90601f836135d1565b9150613f9b82613f5c565b602082019050919050565b5f6020820190508181035f830152613fbd81613f84565b9050919050565b7f436c61696d696e67206e6f7420617661696c61626c65000000000000000000005f82015250565b5f613ff86016836135d1565b915061400382613fc4565b602082019050919050565b5f6020820190508181035f83015261402581613fec565b9050919050565b7f616c726561647920636c61696d656400000000000000000000000000000000005f82015250565b5f614060600f836135d1565b915061406b8261402c565b602082019050919050565b5f6020820190508181035f83015261408d81614054565b9050919050565b7f6d757374206f776e20746865204e4654000000000000000000000000000000005f82015250565b5f6140c86010836135d1565b91506140d382614094565b602082019050919050565b5f6020820190508181035f8301526140f5816140bc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6141306020836135d1565b915061413b826140fc565b602082019050919050565b5f6020820190508181035f83015261415d81614124565b9050919050565b5f81905092915050565b50565b5f61417c5f83614164565b91506141878261416e565b5f82019050919050565b5f61419b82614171565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c00000000000000005f82015250565b5f6141d96018836135d1565b91506141e4826141a5565b602082019050919050565b5f6020820190508181035f830152614206816141cd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026142967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261425b565b6142a0868361425b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6142db6142d66142d184613657565b6142b8565b613657565b9050919050565b5f819050919050565b6142f4836142c1565b614308614300826142e2565b848454614267565b825550505050565b5f90565b61431c614310565b6143278184846142eb565b505050565b5b8181101561434a5761433f5f82614314565b60018101905061432d565b5050565b601f82111561438f576143608161423a565b6143698461424c565b81016020851015614378578190505b61438c6143848561424c565b83018261432c565b50505b505050565b5f82821c905092915050565b5f6143af5f1984600802614394565b1980831691505092915050565b5f6143c783836143a0565b9150826002028217905092915050565b6143e0826135c7565b67ffffffffffffffff8111156143f9576143f8613925565b5b6144038254613d8c565b61440e82828561434e565b5f60209050601f83116001811461443f575f841561442d578287015190505b61443785826143bc565b86555061449e565b601f19841661444d8661423a565b5f5b828110156144745784890151825560018201915060208501945060208101905061444f565b86831015614491578489015161448d601f8916826143a0565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e00005f82015250565b5f6144da601e836135d1565b91506144e5826144a6565b602082019050919050565b5f6020820190508181035f830152614507816144ce565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f20616464726573735f82015250565b5f6145426020836135d1565b915061454d8261450e565b602082019050919050565b5f6020820190508181035f83015261456f81614536565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6145ad82613657565b91506145b883613657565b92508282026145c681613657565b915082820484148315176145dd576145dc614576565b5b5092915050565b7f4d696e743a2057726f6e672050757263686173652050726963650000000000005f82015250565b5f614618601a836135d1565b9150614623826145e4565b602082019050919050565b5f6020820190508181035f8301526146458161460c565b9050919050565b5f61465682613657565b915061466183613657565b925082820190508082111561467957614678614576565b5b92915050565b7f43616e2774206d696e74206d6f726500000000000000000000000000000000005f82015250565b5f6146b3600f836135d1565b91506146be8261467f565b602082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f4d696e74206e6f74206f70656e000000000000000000000000000000000000005f82015250565b5f61471b600d836135d1565b9150614726826146e7565b602082019050919050565b5f6020820190508181035f8301526147488161470f565b9050919050565b7f4d696e746564204f7574000000000000000000000000000000000000000000005f82015250565b5f614783600a836135d1565b915061478e8261474f565b602082019050919050565b5f6020820190508181035f8301526147b081614777565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6147eb6019836135d1565b91506147f6826147b7565b602082019050919050565b5f6020820190508181035f830152614818816147df565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e0000005f82015250565b5f614853601d836135d1565b915061485e8261481f565b602082019050919050565b5f6020820190508181035f83015261488081614847565b9050919050565b5f81905092915050565b5f815461489d81613d8c565b6148a78186614887565b9450600182165f81146148c157600181146148d657614908565b60ff1983168652811515820286019350614908565b6148df8561423a565b5f5b83811015614900578154818901526001820191506020810190506148e1565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e00000000000000000000000000000000000000005f82015250565b5f614945600c83614887565b915061495082614911565b600c82019050919050565b5f6149668284614891565b915061497182614939565b915081905092915050565b5f614986826135c7565b6149908185614887565b93506149a08185602086016135e1565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6149e0600583614887565b91506149eb826149ac565b600582019050919050565b5f614a018285614891565b9150614a0d828461497c565b9150614a18826149d4565b91508190509392505050565b7f57686974656c6973742031206e6f74206f70656e0000000000000000000000005f82015250565b5f614a586014836135d1565b9150614a6382614a24565b602082019050919050565b5f6020820190508181035f830152614a8581614a4c565b9050919050565b7f50686173652031206d696e746564206f757400000000000000000000000000005f82015250565b5f614ac06012836135d1565b9150614acb82614a8c565b602082019050919050565b5f6020820190508181035f830152614aed81614ab4565b9050919050565b7f4e6f74206f6e2057686974656c697374203100000000000000000000000000005f82015250565b5f614b286012836135d1565b9150614b3382614af4565b602082019050919050565b5f6020820190508181035f830152614b5581614b1c565b9050919050565b7f6f732f636f6e74726163742e6a736f6e000000000000000000000000000000005f82015250565b5f614b90601083614887565b9150614b9b82614b5c565b601082019050919050565b5f614bb18284614891565b9150614bbc82614b84565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320307820616464726573735f82015250565b5f614bfb6020836135d1565b9150614c0682614bc7565b602082019050919050565b5f6020820190508181035f830152614c2881614bef565b9050919050565b7f57686974656c6973742032206e6f74206f70656e0000000000000000000000005f82015250565b5f614c636014836135d1565b9150614c6e82614c2f565b602082019050919050565b5f6020820190508181035f830152614c9081614c57565b9050919050565b7f50686173652032206d696e746564206f757400000000000000000000000000005f82015250565b5f614ccb6012836135d1565b9150614cd682614c97565b602082019050919050565b5f6020820190508181035f830152614cf881614cbf565b9050919050565b7f4e6f74206f6e2057686974656c697374203200000000000000000000000000005f82015250565b5f614d336012836135d1565b9150614d3e82614cff565b602082019050919050565b5f6020820190508181035f830152614d6081614d27565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e5f82015250565b5f614d9b6020836135d1565b9150614da682614d67565b602082019050919050565b5f6020820190508181035f830152614dc881614d8f565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e6564000000005f82015250565b5f614e03601c836135d1565b9150614e0e82614dcf565b602082019050919050565b5f6020820190508181035f830152614e3081614df7565b9050919050565b7f4552433732313a207478667220746f20307830206164647265737300000000005f82015250565b5f614e6b601b836135d1565b9150614e7682614e37565b602082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b5f614ea982613657565b9150614eb483613657565b9250828203905081811115614ecc57614ecb614576565b5b92915050565b7f7478667220746f206e6f6e2045524337323152656369657665720000000000005f82015250565b5f614f06601a836135d1565b9150614f1182614ed2565b602082019050919050565b5f6020820190508181035f830152614f3381614efa565b9050919050565b5f614f4482613657565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f7657614f75614576565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614fb882613657565b9150614fc383613657565b925082614fd357614fd2614f81565b5b828204905092915050565b5f614fe882613657565b9150614ff383613657565b92508261500357615002614f81565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6150328261500e565b61503c8185615018565b935061504c8185602086016135e1565b615055816135ef565b840191505092915050565b5f6080820190506150735f8301876136e5565b61508060208301866136e5565b61508d6040830185613882565b818103606083015261509f8184615028565b905095945050505050565b5f815190506150b88161353f565b92915050565b5f602082840312156150d3576150d261350c565b5b5f6150e0848285016150aa565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f61511d6020836135d1565b9150615128826150e9565b602082019050919050565b5f6020820190508181035f83015261514a81615111565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f615185601c836135d1565b915061519082615151565b602082019050919050565b5f6020820190508181035f8301526151b281615179565b905091905056fea26469706673582212206b0f5461a6086fc36554fbd20fd264e51de3df4deb6e1545f65fcc6f6b9610fe64736f6c63430008190033

Deployed Bytecode Sourcemap

16433:19705:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18219:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34952:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24596:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24158:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33896:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23235:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25466:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22452:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21355:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17390:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23463:81;;;;;;;;;;;;;:::i;:::-;;18661:196;;;;;;;;;;;;;:::i;:::-;;22264:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25851:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21222:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17356:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17322;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22918:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23868:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22623:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23608:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14622:94;;;;;;;;;;;;;:::i;:::-;;17289:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22076:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13971:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23025:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35093;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17262:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20451:700;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24875:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23125:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21876:80;;;;;;;;;;;;;:::i;:::-;;22794:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23373:78;;;;;;;;;;;;;:::i;:::-;;26107:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21964:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35268:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17585:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17430:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18869:783;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35826:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25235:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14871:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19660:783;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18219:360;18304:4;18344:25;18329:40;;;:11;:40;;;;:109;;;;18405:33;18390:48;;;:11;:48;;;;18329:109;:170;;;;18474:25;18459:40;;;:11;:40;;;;18329:170;:242;;;;18535:36;;;18520:51;;;:11;:51;;;;18329:242;18321:250;;18219:360;;;:::o;34952:84::-;34991:13;35023:5;35016:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34952:84;:::o;24596:207::-;24672:7;24700:16;24708:7;24700;:16::i;:::-;24692:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24771:15;:24;24787:7;24771:24;;;;;;;;;;;;;;;;;;;;;24764:31;;24596:207;;;:::o;24158:372::-;24239:13;24255:16;24263:7;24255;:16::i;:::-;24239:32;;24296:5;24290:11;;:2;:11;;;24282:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24385:5;24371:19;;:10;:19;;;:58;;;;24394:35;24411:5;24418:10;24394:16;:35::i;:::-;24371:58;24349:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;24501:21;24510:2;24514:7;24501:8;:21::i;:::-;24228:302;24158:372;;:::o;33896:215::-;34013:6;34073:30;;;34066:37;;33896:215;;;;;;;:::o;23235:126::-;23281:7;23308:12;;23301:19;;23235:126;:::o;25466:314::-;25661:39;25680:10;25692:7;25661:18;:39::i;:::-;25653:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25744:28;25754:4;25760:2;25764:7;25744:9;:28::i;:::-;25466:314;;;:::o;22452:163::-;22514:4;22563;22535:32;;:11;:24;22547:11;22535:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;22531:54;;22578:4;22571:11;;;;22531:54;22602:5;22595:12;;22452:163;;;;:::o;21355:299::-;15905:11;;;;;;;;;;;15904:12;15896:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15977:4;15963:11;;:18;;;;;;;;;;;;;;;;;;21427:9:::1;;;;;;;;;;;21419:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21510:1;21482:30;;:7;:16;21490:7;21482:16;;;;;;;;;;;;;;;;;;;;;:30;;;21474:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21571:12;:10;:12::i;:::-;21551:32;;:16;21559:7;21551;:16::i;:::-;:32;;;21543:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21634:12;:10;:12::i;:::-;21615:7;:16;21623:7;21615:16;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;16018:5:::0;16004:11;;:19;;;;;;;;;;;;;;;;;;21355:299;:::o;17390:27::-;;;;:::o;23463:81::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23531:5:::1;23517:11;;:19;;;;;;;;;;;;;;;;;;23463:81::o:0;18661:196::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18711:12:::1;18748:7;:5;:7::i;:::-;:12;;18768:21;18748:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18734:60;;;;;18813:7;18805:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18700:157;18661:196::o:0;22264:180::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22342:9:::1;22337:100;22357:8;:15;22353:1;:19;22337:100;;;22421:4;22394:11;:24;22406:8;22415:1;22406:11;;;;;;;;:::i;:::-;;;;;;;;22394:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22374:3;;;;;;;22337:100;;;;22264:180:::0;:::o;25851:185::-;25989:39;26006:4;26012:2;26016:7;25989:39;;;;;;;;;;;;:16;:39::i;:::-;25851:185;;;:::o;21222:125::-;21297:16;21305:7;21297;:16::i;:::-;21281:32;;:12;:10;:12::i;:::-;:32;;;21273:41;;;;;;21325:14;21331:7;21325:5;:14::i;:::-;21222:125;:::o;17356:27::-;;;;:::o;17322:::-;;;;:::o;22918:95::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22999:6:::1;22988:8;:17;;;;;;:::i;:::-;;22918:95:::0;:::o;23868:228::-;23940:7;23960:13;23976:7;:16;23984:7;23976:16;;;;;;;;;;;;;;;;;;;;;23960:32;;24028:1;24011:19;;:5;:19;;;24003:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24083:5;24076:12;;;23868:228;;;:::o;22623:163::-;22685:4;22734;22706:32;;:11;:24;22718:11;22706:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;22702:54;;22749:4;22742:11;;;;22702:54;22773:5;22766:12;;22623:163;;;;:::o;23608:198::-;23680:7;23725:1;23708:19;;:5;:19;;;23700:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23782:9;:16;23792:5;23782:16;;;;;;;;;;;;;;;;23775:23;;23608:198;;;:::o;14622:94::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14687:21:::1;14705:1;14687:9;:21::i;:::-;14622:94::o:0;17289:26::-;;;;:::o;22076:180::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22154:9:::1;22149:100;22169:8;:15;22165:1;:19;22149:100;;;22233:4;22206:11;:24;22218:8;22227:1;22218:11;;;;;;;;:::i;:::-;;;;;;;;22206:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22186:3;;;;;;;22149:100;;;;22076:180:::0;:::o;13971:87::-;14017:7;14044:6;;;;;;;;;;;14037:13;;13971:87;:::o;23025:88::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23097:8:::1;23089:5;:16;;;;23025:88:::0;:::o;35093:::-;35134:13;35166:7;35159:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35093:88;:::o;17262:20::-;;;;:::o;20451:700::-;15905:11;;;;;;;;;;;15904:12;15896:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15977:4;15963:11;;:18;;;;;;;;;;;;;;;;;;20518:11:::1;20532:12;:10;:12::i;:::-;20518:26;;20582:5;;20576:3;:11;;;;:::i;:::-;20563:9;:24;20555:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20663:12;;20643:11;:16;20655:3;20643:16;;;;;;;;;;;;;;;;20637:3;:22;;;;:::i;:::-;:38;;20629:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20730:1;20714:12;;:17;20706:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20790:11;;20783:3;20768:12;;:18;;;;:::i;:::-;:33;;20760:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20829:21;20868:1;20853:12;;:16;;;;:::i;:::-;20829:40;;20974:3;20954:11;:16;20966:3;20954:16;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21004:3;20988:12;;:19;;;;;;;:::i;:::-;;;;;;;;21055:9;21051:93;21074:3;21070:1;:7;21051:93;;;21099:33;21109:3;21130:1;21114:13;:17;;;;:::i;:::-;21099:9;:33::i;:::-;21079:3;;;;;;;21051:93;;;;20507:644;;16018:5:::0;16004:11;;:19;;;;;;;;;;;;;;;;;;20451:700;:::o;24875:289::-;24990:10;24978:22;;:8;:22;;;24970:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25086:8;25043:18;:30;25062:10;25043:30;;;;;;;;;;;;;;;:40;25074:8;25043:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;25137:8;25110:46;;25125:10;25110:46;;;25147:8;25110:46;;;;;;:::i;:::-;;;;;;;;24875:289;;:::o;23125:102::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23210:9:::1;23196:11;:23;;;;23125:102:::0;:::o;21876:80::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21944:4:::1;21932:9;;:16;;;;;;;;;;;;;;;;;;21876:80::o:0;22794:112::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22889:9:::1;22874:12;:24;;;;22794:112:::0;:::o;23373:78::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23439:4:::1;23425:11;;:18;;;;;;;;;;;;;;;;;;23373:78::o:0;26107:305::-;26282:39;26301:10;26313:7;26282:18;:39::i;:::-;26274:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26365:39;26379:4;26385:2;26389:7;26398:5;26365:13;:39::i;:::-;26107:305;;;;:::o;21964:104::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22052:8:::1;22037:12;:23;;;;21964:104:::0;:::o;35268:546::-;35326:13;35359:16;35367:7;35359;:16::i;:::-;35351:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35420:22;35467:11;;;;;;;;;;;35463:308;;;35569:8;35552:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;35534:61;;35463:308;;;35721:8;35731:17;35740:7;35731:8;:17::i;:::-;35704:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35686:73;;35463:308;35798:8;35791:15;;;35268:546;;;:::o;17585:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;17430:46::-;;;;;;;;;;;;;;;;;:::o;18869:783::-;15905:11;;;;;;;;;;;15904:12;15896:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15977:4;15963:11;;:18;;;;;;;;;;;;;;;;;;18939:11:::1;18953:12;:10;:12::i;:::-;18939:26;;19003:5;;18997:3;:11;;;;:::i;:::-;18984:9;:24;18976:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19084:12;;19064:11;:16;19076:3;19064:16;;;;;;;;;;;;;;;;19058:3;:22;;;;:::i;:::-;:38;;19050:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19151:1;19135:12;;:17;19127:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;19218:3;19211;19196:12;;:18;;;;:::i;:::-;:25;;19188:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19290:4;19263:31;;:11;:23;19275:10;19263:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;19255:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19330:21;19369:1;19354:12;;:16;;;;:::i;:::-;19330:40;;19475:3;19455:11;:16;19467:3;19455:16;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;19505:3;19489:12;;:19;;;;;;;:::i;:::-;;;;;;;;19556:9;19552:93;19575:3;19571:1;:7;19552:93;;;19600:33;19610:3;19631:1;19615:13;:17;;;;:::i;:::-;19600:9;:33::i;:::-;19580:3;;;;;;;19552:93;;;;18928:724;;16018:5:::0;16004:11;;:19;;;;;;;;;;;;;;;;;;18869:783;:::o;35826:142::-;35870:13;35931:8;35914:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;35900:60;;35826:142;:::o;25235:164::-;25332:4;25356:18;:25;25375:5;25356:25;;;;;;;;;;;;;;;:35;25382:8;25356:35;;;;;;;;;;;;;;;;;;;;;;;;;25349:42;;25235:164;;;;:::o;14871:186::-;14202:12;:10;:12::i;:::-;14191:23;;:7;:5;:7::i;:::-;:23;;;14183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14980:1:::1;14960:22;;:8;:22;;::::0;14952:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15030:19;15040:8;15030:9;:19::i;:::-;14871:186:::0;:::o;19660:783::-;15905:11;;;;;;;;;;;15904:12;15896:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15977:4;15963:11;;:18;;;;;;;;;;;;;;;;;;19730:11:::1;19744:12;:10;:12::i;:::-;19730:26;;19794:5;;19788:3;:11;;;;:::i;:::-;19775:9;:24;19767:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19875:12;;19855:11;:16;19867:3;19855:16;;;;;;;;;;;;;;;;19849:3;:22;;;;:::i;:::-;:38;;19841:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19942:1;19926:12;;:17;19918:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;20009:3;20002;19987:12;;:18;;;;:::i;:::-;:25;;19979:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20081:4;20054:31;;:11;:23;20066:10;20054:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;20046:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20121:21;20160:1;20145:12;;:16;;;;:::i;:::-;20121:40;;20266:3;20246:11;:16;20258:3;20246:16;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;20296:3;20280:12;;:19;;;;;;;:::i;:::-;;;;;;;;20347:9;20343:93;20366:3;20362:1;:7;20343:93;;;20391:33;20401:3;20422:1;20406:13;:17;;;;:::i;:::-;20391:9;:33::i;:::-;20371:3;;;;;;;20343:93;;;;19719:724;;16018:5:::0;16004:11;;:19;;;;;;;;;;;;;;;;;;19660:783;:::o;27898:127::-;27963:4;28015:1;27987:30;;:7;:16;27995:7;27987:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27980:37;;27898:127;;;:::o;31799:167::-;31901:2;31874:15;:24;31890:7;31874:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31950:7;31946:2;31919:39;;31928:16;31936:7;31928;:16::i;:::-;31919:39;;;;;;;;;;;;31799:167;;:::o;28192:329::-;28285:4;28310:16;28318:7;28310;:16::i;:::-;28302:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28374:13;28390:16;28398:7;28390;:16::i;:::-;28374:32;;28436:5;28425:16;;:7;:16;;;:51;;;;28469:7;28445:31;;:20;28457:7;28445:11;:20::i;:::-;:31;;;28425:51;:87;;;;28480:32;28497:5;28504:7;28480:16;:32::i;:::-;28425:87;28417:96;;;28192:329;;;;:::o;31134:547::-;31286:4;31266:24;;:16;31274:7;31266;:16::i;:::-;:24;;;31258:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31356:1;31342:16;;:2;:16;;;31334:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31401:39;31422:4;31428:2;31432:7;31401:20;:39::i;:::-;31505:29;31522:1;31526:7;31505:8;:29::i;:::-;31566:1;31547:9;:15;31557:4;31547:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31595:1;31578:9;:13;31588:2;31578:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31626:2;31607:7;:16;31615:7;31607:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31665:7;31661:2;31646:27;;31655:4;31646:27;;;;;;;;;;;;31134:547;;;:::o;13354:98::-;13407:7;13434:10;13427:17;;13354:98;:::o;30444:353::-;30504:13;30520:16;30528:7;30520;:16::i;:::-;30504:32;;30549:48;30570:5;30585:1;30589:7;30549:20;:48::i;:::-;30638:29;30655:1;30659:7;30638:8;:29::i;:::-;30700:1;30680:9;:16;30690:5;30680:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30719:7;:16;30727:7;30719:16;;;;;;;;;;;;30712:23;;;;;;;;;;;30781:7;30777:1;30753:36;;30762:5;30753:36;;;;;;;;;;;;30493:304;30444:353;:::o;15065:173::-;15121:16;15140:6;;;;;;;;;;;15121:25;;15166:8;15157:6;;:17;;;;;;;;;;;;;;;;;;15221:8;15190:40;;15211:8;15190:40;;;;;;;;;;;;15110:128;15065:173;:::o;28863:110::-;28939:26;28949:2;28953:7;28939:26;;;;;;;;;;;;:9;:26::i;:::-;28863:110;;:::o;27294:291::-;27451:28;27461:4;27467:2;27471:7;27451:9;:28::i;:::-;27498:48;27521:4;27527:2;27531:7;27540:5;27498:22;:48::i;:::-;27490:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27294:291;;;;:::o;15281:532::-;15337:13;15376:1;15367:5;:10;15363:53;;15394:10;;;;;;;;;;;;;;;;;;;;;15363:53;15426:12;15441:5;15426:20;;15457:14;15482:78;15497:1;15489:4;:9;15482:78;;15515:8;;;;;:::i;:::-;;;;15546:2;15538:10;;;;;:::i;:::-;;;15482:78;;;15570:19;15602:6;15592:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15570:39;;15620:154;15636:1;15627:5;:10;15620:154;;15664:1;15654:11;;;;;:::i;:::-;;;15731:2;15723:5;:10;;;;:::i;:::-;15710:2;:24;;;;:::i;:::-;15697:39;;15680:6;15687;15680:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15760:2;15751:11;;;;;:::i;:::-;;;15620:154;;;15798:6;15784:21;;;;;15281:532;;;;:::o;34683:126::-;;;;:::o;29200:297::-;29330:18;29336:2;29340:7;29330:5;:18::i;:::-;29381:54;29412:1;29416:2;29420:7;29429:5;29381:22;:54::i;:::-;29359:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;29200:297;;;:::o;32531:777::-;32686:4;32707:15;:2;:13;;;:15::i;:::-;32703:598;;;32759:2;32743:36;;;32780:10;32792:4;32798:7;32807:5;32743:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32739:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33004:1;32987:6;:13;:18;32983:248;;33030:36;;;;;;;;;;:::i;:::-;;;;;;;;32983:248;33181:6;33175:13;33166:6;33162:2;33158:15;33151:38;32739:507;32874:45;;;32864:55;;;:6;:55;;;;32857:62;;;;;32703:598;33285:4;33278:11;;32531:777;;;;;;;:::o;29833:382::-;29927:1;29913:16;;:2;:16;;;29905:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29986:16;29994:7;29986;:16::i;:::-;29985:17;29977:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30048:45;30077:1;30081:2;30085:7;30048:20;:45::i;:::-;30123:1;30106:9;:13;30116:2;30106:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30154:2;30135:7;:16;30143:7;30135:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30199:7;30195:2;30174:33;;30191:1;30174:33;;;;;;;;;;;;29833:382;;:::o;6275:387::-;6335:4;6543:12;6610:7;6598:20;6590:28;;6653:1;6646:4;:8;6639:15;;;6275:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:77::-;2790:7;2819:5;2808:16;;2753:77;;;:::o;2836:122::-;2909:24;2927:5;2909:24;:::i;:::-;2902:5;2899:35;2889:63;;2948:1;2945;2938:12;2889:63;2836:122;:::o;2964:139::-;3010:5;3048:6;3035:20;3026:29;;3064:33;3091:5;3064:33;:::i;:::-;2964:139;;;;:::o;3109:329::-;3168:6;3217:2;3205:9;3196:7;3192:23;3188:32;3185:119;;;3223:79;;:::i;:::-;3185:119;3343:1;3368:53;3413:7;3404:6;3393:9;3389:22;3368:53;:::i;:::-;3358:63;;3314:117;3109:329;;;;:::o;3444:126::-;3481:7;3521:42;3514:5;3510:54;3499:65;;3444:126;;;:::o;3576:96::-;3613:7;3642:24;3660:5;3642:24;:::i;:::-;3631:35;;3576:96;;;:::o;3678:118::-;3765:24;3783:5;3765:24;:::i;:::-;3760:3;3753:37;3678:118;;:::o;3802:222::-;3895:4;3933:2;3922:9;3918:18;3910:26;;3946:71;4014:1;4003:9;3999:17;3990:6;3946:71;:::i;:::-;3802:222;;;;:::o;4030:122::-;4103:24;4121:5;4103:24;:::i;:::-;4096:5;4093:35;4083:63;;4142:1;4139;4132:12;4083:63;4030:122;:::o;4158:139::-;4204:5;4242:6;4229:20;4220:29;;4258:33;4285:5;4258:33;:::i;:::-;4158:139;;;;:::o;4303:474::-;4371:6;4379;4428:2;4416:9;4407:7;4403:23;4399:32;4396:119;;;4434:79;;:::i;:::-;4396:119;4554:1;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4525:117;4681:2;4707:53;4752:7;4743:6;4732:9;4728:22;4707:53;:::i;:::-;4697:63;;4652:118;4303:474;;;;;:::o;4783:117::-;4892:1;4889;4882:12;4906:117;5015:1;5012;5005:12;5029:117;5138:1;5135;5128:12;5165:552;5222:8;5232:6;5282:3;5275:4;5267:6;5263:17;5259:27;5249:122;;5290:79;;:::i;:::-;5249:122;5403:6;5390:20;5380:30;;5433:18;5425:6;5422:30;5419:117;;;5455:79;;:::i;:::-;5419:117;5569:4;5561:6;5557:17;5545:29;;5623:3;5615:4;5607:6;5603:17;5593:8;5589:32;5586:41;5583:128;;;5630:79;;:::i;:::-;5583:128;5165:552;;;;;:::o;5723:963::-;5820:6;5828;5836;5844;5852;5901:3;5889:9;5880:7;5876:23;5872:33;5869:120;;;5908:79;;:::i;:::-;5869:120;6028:1;6053:53;6098:7;6089:6;6078:9;6074:22;6053:53;:::i;:::-;6043:63;;5999:117;6155:2;6181:53;6226:7;6217:6;6206:9;6202:22;6181:53;:::i;:::-;6171:63;;6126:118;6283:2;6309:53;6354:7;6345:6;6334:9;6330:22;6309:53;:::i;:::-;6299:63;;6254:118;6439:2;6428:9;6424:18;6411:32;6470:18;6462:6;6459:30;6456:117;;;6492:79;;:::i;:::-;6456:117;6605:64;6661:7;6652:6;6641:9;6637:22;6605:64;:::i;:::-;6587:82;;;;6382:297;5723:963;;;;;;;;:::o;6692:115::-;6777:23;6794:5;6777:23;:::i;:::-;6772:3;6765:36;6692:115;;:::o;6813:218::-;6904:4;6942:2;6931:9;6927:18;6919:26;;6955:69;7021:1;7010:9;7006:17;6997:6;6955:69;:::i;:::-;6813:218;;;;:::o;7037:118::-;7124:24;7142:5;7124:24;:::i;:::-;7119:3;7112:37;7037:118;;:::o;7161:222::-;7254:4;7292:2;7281:9;7277:18;7269:26;;7305:71;7373:1;7362:9;7358:17;7349:6;7305:71;:::i;:::-;7161:222;;;;:::o;7389:619::-;7466:6;7474;7482;7531:2;7519:9;7510:7;7506:23;7502:32;7499:119;;;7537:79;;:::i;:::-;7499:119;7657:1;7682:53;7727:7;7718:6;7707:9;7703:22;7682:53;:::i;:::-;7672:63;;7628:117;7784:2;7810:53;7855:7;7846:6;7835:9;7831:22;7810:53;:::i;:::-;7800:63;;7755:118;7912:2;7938:53;7983:7;7974:6;7963:9;7959:22;7938:53;:::i;:::-;7928:63;;7883:118;7389:619;;;;;:::o;8014:329::-;8073:6;8122:2;8110:9;8101:7;8097:23;8093:32;8090:119;;;8128:79;;:::i;:::-;8090:119;8248:1;8273:53;8318:7;8309:6;8298:9;8294:22;8273:53;:::i;:::-;8263:63;;8219:117;8014:329;;;;:::o;8349:180::-;8397:77;8394:1;8387:88;8494:4;8491:1;8484:15;8518:4;8515:1;8508:15;8535:281;8618:27;8640:4;8618:27;:::i;:::-;8610:6;8606:40;8748:6;8736:10;8733:22;8712:18;8700:10;8697:34;8694:62;8691:88;;;8759:18;;:::i;:::-;8691:88;8799:10;8795:2;8788:22;8578:238;8535:281;;:::o;8822:129::-;8856:6;8883:20;;:::i;:::-;8873:30;;8912:33;8940:4;8932:6;8912:33;:::i;:::-;8822:129;;;:::o;8957:311::-;9034:4;9124:18;9116:6;9113:30;9110:56;;;9146:18;;:::i;:::-;9110:56;9196:4;9188:6;9184:17;9176:25;;9256:4;9250;9246:15;9238:23;;8957:311;;;:::o;9291:710::-;9387:5;9412:81;9428:64;9485:6;9428:64;:::i;:::-;9412:81;:::i;:::-;9403:90;;9513:5;9542:6;9535:5;9528:21;9576:4;9569:5;9565:16;9558:23;;9629:4;9621:6;9617:17;9609:6;9605:30;9658:3;9650:6;9647:15;9644:122;;;9677:79;;:::i;:::-;9644:122;9792:6;9775:220;9809:6;9804:3;9801:15;9775:220;;;9884:3;9913:37;9946:3;9934:10;9913:37;:::i;:::-;9908:3;9901:50;9980:4;9975:3;9971:14;9964:21;;9851:144;9835:4;9830:3;9826:14;9819:21;;9775:220;;;9779:21;9393:608;;9291:710;;;;;:::o;10024:370::-;10095:5;10144:3;10137:4;10129:6;10125:17;10121:27;10111:122;;10152:79;;:::i;:::-;10111:122;10269:6;10256:20;10294:94;10384:3;10376:6;10369:4;10361:6;10357:17;10294:94;:::i;:::-;10285:103;;10101:293;10024:370;;;;:::o;10400:539::-;10484:6;10533:2;10521:9;10512:7;10508:23;10504:32;10501:119;;;10539:79;;:::i;:::-;10501:119;10687:1;10676:9;10672:17;10659:31;10717:18;10709:6;10706:30;10703:117;;;10739:79;;:::i;:::-;10703:117;10844:78;10914:7;10905:6;10894:9;10890:22;10844:78;:::i;:::-;10834:88;;10630:302;10400:539;;;;:::o;10945:117::-;11054:1;11051;11044:12;11068:308;11130:4;11220:18;11212:6;11209:30;11206:56;;;11242:18;;:::i;:::-;11206:56;11280:29;11302:6;11280:29;:::i;:::-;11272:37;;11364:4;11358;11354:15;11346:23;;11068:308;;;:::o;11382:148::-;11480:6;11475:3;11470;11457:30;11521:1;11512:6;11507:3;11503:16;11496:27;11382:148;;;:::o;11536:425::-;11614:5;11639:66;11655:49;11697:6;11655:49;:::i;:::-;11639:66;:::i;:::-;11630:75;;11728:6;11721:5;11714:21;11766:4;11759:5;11755:16;11804:3;11795:6;11790:3;11786:16;11783:25;11780:112;;;11811:79;;:::i;:::-;11780:112;11901:54;11948:6;11943:3;11938;11901:54;:::i;:::-;11620:341;11536:425;;;;;:::o;11981:340::-;12037:5;12086:3;12079:4;12071:6;12067:17;12063:27;12053:122;;12094:79;;:::i;:::-;12053:122;12211:6;12198:20;12236:79;12311:3;12303:6;12296:4;12288:6;12284:17;12236:79;:::i;:::-;12227:88;;12043:278;11981:340;;;;:::o;12327:509::-;12396:6;12445:2;12433:9;12424:7;12420:23;12416:32;12413:119;;;12451:79;;:::i;:::-;12413:119;12599:1;12588:9;12584:17;12571:31;12629:18;12621:6;12618:30;12615:117;;;12651:79;;:::i;:::-;12615:117;12756:63;12811:7;12802:6;12791:9;12787:22;12756:63;:::i;:::-;12746:73;;12542:287;12327:509;;;;:::o;12842:116::-;12912:21;12927:5;12912:21;:::i;:::-;12905:5;12902:32;12892:60;;12948:1;12945;12938:12;12892:60;12842:116;:::o;12964:133::-;13007:5;13045:6;13032:20;13023:29;;13061:30;13085:5;13061:30;:::i;:::-;12964:133;;;;:::o;13103:468::-;13168:6;13176;13225:2;13213:9;13204:7;13200:23;13196:32;13193:119;;;13231:79;;:::i;:::-;13193:119;13351:1;13376:53;13421:7;13412:6;13401:9;13397:22;13376:53;:::i;:::-;13366:63;;13322:117;13478:2;13504:50;13546:7;13537:6;13526:9;13522:22;13504:50;:::i;:::-;13494:60;;13449:115;13103:468;;;;;:::o;13577:307::-;13638:4;13728:18;13720:6;13717:30;13714:56;;;13750:18;;:::i;:::-;13714:56;13788:29;13810:6;13788:29;:::i;:::-;13780:37;;13872:4;13866;13862:15;13854:23;;13577:307;;;:::o;13890:423::-;13967:5;13992:65;14008:48;14049:6;14008:48;:::i;:::-;13992:65;:::i;:::-;13983:74;;14080:6;14073:5;14066:21;14118:4;14111:5;14107:16;14156:3;14147:6;14142:3;14138:16;14135:25;14132:112;;;14163:79;;:::i;:::-;14132:112;14253:54;14300:6;14295:3;14290;14253:54;:::i;:::-;13973:340;13890:423;;;;;:::o;14332:338::-;14387:5;14436:3;14429:4;14421:6;14417:17;14413:27;14403:122;;14444:79;;:::i;:::-;14403:122;14561:6;14548:20;14586:78;14660:3;14652:6;14645:4;14637:6;14633:17;14586:78;:::i;:::-;14577:87;;14393:277;14332:338;;;;:::o;14676:943::-;14771:6;14779;14787;14795;14844:3;14832:9;14823:7;14819:23;14815:33;14812:120;;;14851:79;;:::i;:::-;14812:120;14971:1;14996:53;15041:7;15032:6;15021:9;15017:22;14996:53;:::i;:::-;14986:63;;14942:117;15098:2;15124:53;15169:7;15160:6;15149:9;15145:22;15124:53;:::i;:::-;15114:63;;15069:118;15226:2;15252:53;15297:7;15288:6;15277:9;15273:22;15252:53;:::i;:::-;15242:63;;15197:118;15382:2;15371:9;15367:18;15354:32;15413:18;15405:6;15402:30;15399:117;;;15435:79;;:::i;:::-;15399:117;15540:62;15594:7;15585:6;15574:9;15570:22;15540:62;:::i;:::-;15530:72;;15325:287;14676:943;;;;;;;:::o;15625:474::-;15693:6;15701;15750:2;15738:9;15729:7;15725:23;15721:32;15718:119;;;15756:79;;:::i;:::-;15718:119;15876:1;15901:53;15946:7;15937:6;15926:9;15922:22;15901:53;:::i;:::-;15891:63;;15847:117;16003:2;16029:53;16074:7;16065:6;16054:9;16050:22;16029:53;:::i;:::-;16019:63;;15974:118;15625:474;;;;;:::o;16105:180::-;16153:77;16150:1;16143:88;16250:4;16247:1;16240:15;16274:4;16271:1;16264:15;16291:320;16335:6;16372:1;16366:4;16362:12;16352:22;;16419:1;16413:4;16409:12;16440:18;16430:81;;16496:4;16488:6;16484:17;16474:27;;16430:81;16558:2;16550:6;16547:14;16527:18;16524:38;16521:84;;16577:18;;:::i;:::-;16521:84;16342:269;16291:320;;;:::o;16617:182::-;16757:34;16753:1;16745:6;16741:14;16734:58;16617:182;:::o;16805:366::-;16947:3;16968:67;17032:2;17027:3;16968:67;:::i;:::-;16961:74;;17044:93;17133:3;17044:93;:::i;:::-;17162:2;17157:3;17153:12;17146:19;;16805:366;;;:::o;17177:419::-;17343:4;17381:2;17370:9;17366:18;17358:26;;17430:9;17424:4;17420:20;17416:1;17405:9;17401:17;17394:47;17458:131;17584:4;17458:131;:::i;:::-;17450:139;;17177:419;;;:::o;17602:180::-;17742:32;17738:1;17730:6;17726:14;17719:56;17602:180;:::o;17788:366::-;17930:3;17951:67;18015:2;18010:3;17951:67;:::i;:::-;17944:74;;18027:93;18116:3;18027:93;:::i;:::-;18145:2;18140:3;18136:12;18129:19;;17788:366;;;:::o;18160:419::-;18326:4;18364:2;18353:9;18349:18;18341:26;;18413:9;18407:4;18403:20;18399:1;18388:9;18384:17;18377:47;18441:131;18567:4;18441:131;:::i;:::-;18433:139;;18160:419;;;:::o;18585:181::-;18725:33;18721:1;18713:6;18709:14;18702:57;18585:181;:::o;18772:366::-;18914:3;18935:67;18999:2;18994:3;18935:67;:::i;:::-;18928:74;;19011:93;19100:3;19011:93;:::i;:::-;19129:2;19124:3;19120:12;19113:19;;18772:366;;;:::o;19144:419::-;19310:4;19348:2;19337:9;19333:18;19325:26;;19397:9;19391:4;19387:20;19383:1;19372:9;19368:17;19361:47;19425:131;19551:4;19425:131;:::i;:::-;19417:139;;19144:419;;;:::o;19569:178::-;19709:30;19705:1;19697:6;19693:14;19686:54;19569:178;:::o;19753:366::-;19895:3;19916:67;19980:2;19975:3;19916:67;:::i;:::-;19909:74;;19992:93;20081:3;19992:93;:::i;:::-;20110:2;20105:3;20101:12;20094:19;;19753:366;;;:::o;20125:419::-;20291:4;20329:2;20318:9;20314:18;20306:26;;20378:9;20372:4;20368:20;20364:1;20353:9;20349:17;20342:47;20406:131;20532:4;20406:131;:::i;:::-;20398:139;;20125:419;;;:::o;20550:181::-;20690:33;20686:1;20678:6;20674:14;20667:57;20550:181;:::o;20737:366::-;20879:3;20900:67;20964:2;20959:3;20900:67;:::i;:::-;20893:74;;20976:93;21065:3;20976:93;:::i;:::-;21094:2;21089:3;21085:12;21078:19;;20737:366;;;:::o;21109:419::-;21275:4;21313:2;21302:9;21298:18;21290:26;;21362:9;21356:4;21352:20;21348:1;21337:9;21333:17;21326:47;21390:131;21516:4;21390:131;:::i;:::-;21382:139;;21109:419;;;:::o;21534:172::-;21674:24;21670:1;21662:6;21658:14;21651:48;21534:172;:::o;21712:366::-;21854:3;21875:67;21939:2;21934:3;21875:67;:::i;:::-;21868:74;;21951:93;22040:3;21951:93;:::i;:::-;22069:2;22064:3;22060:12;22053:19;;21712:366;;;:::o;22084:419::-;22250:4;22288:2;22277:9;22273:18;22265:26;;22337:9;22331:4;22327:20;22323:1;22312:9;22308:17;22301:47;22365:131;22491:4;22365:131;:::i;:::-;22357:139;;22084:419;;;:::o;22509:165::-;22649:17;22645:1;22637:6;22633:14;22626:41;22509:165;:::o;22680:366::-;22822:3;22843:67;22907:2;22902:3;22843:67;:::i;:::-;22836:74;;22919:93;23008:3;22919:93;:::i;:::-;23037:2;23032:3;23028:12;23021:19;;22680:366;;;:::o;23052:419::-;23218:4;23256:2;23245:9;23241:18;23233:26;;23305:9;23299:4;23295:20;23291:1;23280:9;23276:17;23269:47;23333:131;23459:4;23333:131;:::i;:::-;23325:139;;23052:419;;;:::o;23477:166::-;23617:18;23613:1;23605:6;23601:14;23594:42;23477:166;:::o;23649:366::-;23791:3;23812:67;23876:2;23871:3;23812:67;:::i;:::-;23805:74;;23888:93;23977:3;23888:93;:::i;:::-;24006:2;24001:3;23997:12;23990:19;;23649:366;;;:::o;24021:419::-;24187:4;24225:2;24214:9;24210:18;24202:26;;24274:9;24268:4;24264:20;24260:1;24249:9;24245:17;24238:47;24302:131;24428:4;24302:131;:::i;:::-;24294:139;;24021:419;;;:::o;24446:182::-;24586:34;24582:1;24574:6;24570:14;24563:58;24446:182;:::o;24634:366::-;24776:3;24797:67;24861:2;24856:3;24797:67;:::i;:::-;24790:74;;24873:93;24962:3;24873:93;:::i;:::-;24991:2;24986:3;24982:12;24975:19;;24634:366;;;:::o;25006:419::-;25172:4;25210:2;25199:9;25195:18;25187:26;;25259:9;25253:4;25249:20;25245:1;25234:9;25230:17;25223:47;25287:131;25413:4;25287:131;:::i;:::-;25279:139;;25006:419;;;:::o;25431:147::-;25532:11;25569:3;25554:18;;25431:147;;;;:::o;25584:114::-;;:::o;25704:398::-;25863:3;25884:83;25965:1;25960:3;25884:83;:::i;:::-;25877:90;;25976:93;26065:3;25976:93;:::i;:::-;26094:1;26089:3;26085:11;26078:18;;25704:398;;;:::o;26108:379::-;26292:3;26314:147;26457:3;26314:147;:::i;:::-;26307:154;;26478:3;26471:10;;26108:379;;;:::o;26493:174::-;26633:26;26629:1;26621:6;26617:14;26610:50;26493:174;:::o;26673:366::-;26815:3;26836:67;26900:2;26895:3;26836:67;:::i;:::-;26829:74;;26912:93;27001:3;26912:93;:::i;:::-;27030:2;27025:3;27021:12;27014:19;;26673:366;;;:::o;27045:419::-;27211:4;27249:2;27238:9;27234:18;27226:26;;27298:9;27292:4;27288:20;27284:1;27273:9;27269:17;27262:47;27326:131;27452:4;27326:131;:::i;:::-;27318:139;;27045:419;;;:::o;27470:180::-;27518:77;27515:1;27508:88;27615:4;27612:1;27605:15;27639:4;27636:1;27629:15;27656:141;27705:4;27728:3;27720:11;;27751:3;27748:1;27741:14;27785:4;27782:1;27772:18;27764:26;;27656:141;;;:::o;27803:93::-;27840:6;27887:2;27882;27875:5;27871:14;27867:23;27857:33;;27803:93;;;:::o;27902:107::-;27946:8;27996:5;27990:4;27986:16;27965:37;;27902:107;;;;:::o;28015:393::-;28084:6;28134:1;28122:10;28118:18;28157:97;28187:66;28176:9;28157:97;:::i;:::-;28275:39;28305:8;28294:9;28275:39;:::i;:::-;28263:51;;28347:4;28343:9;28336:5;28332:21;28323:30;;28396:4;28386:8;28382:19;28375:5;28372:30;28362:40;;28091:317;;28015:393;;;;;:::o;28414:60::-;28442:3;28463:5;28456:12;;28414:60;;;:::o;28480:142::-;28530:9;28563:53;28581:34;28590:24;28608:5;28590:24;:::i;:::-;28581:34;:::i;:::-;28563:53;:::i;:::-;28550:66;;28480:142;;;:::o;28628:75::-;28671:3;28692:5;28685:12;;28628:75;;;:::o;28709:269::-;28819:39;28850:7;28819:39;:::i;:::-;28880:91;28929:41;28953:16;28929:41;:::i;:::-;28921:6;28914:4;28908:11;28880:91;:::i;:::-;28874:4;28867:105;28785:193;28709:269;;;:::o;28984:73::-;29029:3;28984:73;:::o;29063:189::-;29140:32;;:::i;:::-;29181:65;29239:6;29231;29225:4;29181:65;:::i;:::-;29116:136;29063:189;;:::o;29258:186::-;29318:120;29335:3;29328:5;29325:14;29318:120;;;29389:39;29426:1;29419:5;29389:39;:::i;:::-;29362:1;29355:5;29351:13;29342:22;;29318:120;;;29258:186;;:::o;29450:543::-;29551:2;29546:3;29543:11;29540:446;;;29585:38;29617:5;29585:38;:::i;:::-;29669:29;29687:10;29669:29;:::i;:::-;29659:8;29655:44;29852:2;29840:10;29837:18;29834:49;;;29873:8;29858:23;;29834:49;29896:80;29952:22;29970:3;29952:22;:::i;:::-;29942:8;29938:37;29925:11;29896:80;:::i;:::-;29555:431;;29540:446;29450:543;;;:::o;29999:117::-;30053:8;30103:5;30097:4;30093:16;30072:37;;29999:117;;;;:::o;30122:169::-;30166:6;30199:51;30247:1;30243:6;30235:5;30232:1;30228:13;30199:51;:::i;:::-;30195:56;30280:4;30274;30270:15;30260:25;;30173:118;30122:169;;;;:::o;30296:295::-;30372:4;30518:29;30543:3;30537:4;30518:29;:::i;:::-;30510:37;;30580:3;30577:1;30573:11;30567:4;30564:21;30556:29;;30296:295;;;;:::o;30596:1395::-;30713:37;30746:3;30713:37;:::i;:::-;30815:18;30807:6;30804:30;30801:56;;;30837:18;;:::i;:::-;30801:56;30881:38;30913:4;30907:11;30881:38;:::i;:::-;30966:67;31026:6;31018;31012:4;30966:67;:::i;:::-;31060:1;31084:4;31071:17;;31116:2;31108:6;31105:14;31133:1;31128:618;;;;31790:1;31807:6;31804:77;;;31856:9;31851:3;31847:19;31841:26;31832:35;;31804:77;31907:67;31967:6;31960:5;31907:67;:::i;:::-;31901:4;31894:81;31763:222;31098:887;;31128:618;31180:4;31176:9;31168:6;31164:22;31214:37;31246:4;31214:37;:::i;:::-;31273:1;31287:208;31301:7;31298:1;31295:14;31287:208;;;31380:9;31375:3;31371:19;31365:26;31357:6;31350:42;31431:1;31423:6;31419:14;31409:24;;31478:2;31467:9;31463:18;31450:31;;31324:4;31321:1;31317:12;31312:17;;31287:208;;;31523:6;31514:7;31511:19;31508:179;;;31581:9;31576:3;31572:19;31566:26;31624:48;31666:4;31658:6;31654:17;31643:9;31624:48;:::i;:::-;31616:6;31609:64;31531:156;31508:179;31733:1;31729;31721:6;31717:14;31713:22;31707:4;31700:36;31135:611;;;31098:887;;30688:1303;;;30596:1395;;:::o;31997:180::-;32137:32;32133:1;32125:6;32121:14;32114:56;31997:180;:::o;32183:366::-;32325:3;32346:67;32410:2;32405:3;32346:67;:::i;:::-;32339:74;;32422:93;32511:3;32422:93;:::i;:::-;32540:2;32535:3;32531:12;32524:19;;32183:366;;;:::o;32555:419::-;32721:4;32759:2;32748:9;32744:18;32736:26;;32808:9;32802:4;32798:20;32794:1;32783:9;32779:17;32772:47;32836:131;32962:4;32836:131;:::i;:::-;32828:139;;32555:419;;;:::o;32980:182::-;33120:34;33116:1;33108:6;33104:14;33097:58;32980:182;:::o;33168:366::-;33310:3;33331:67;33395:2;33390:3;33331:67;:::i;:::-;33324:74;;33407:93;33496:3;33407:93;:::i;:::-;33525:2;33520:3;33516:12;33509:19;;33168:366;;;:::o;33540:419::-;33706:4;33744:2;33733:9;33729:18;33721:26;;33793:9;33787:4;33783:20;33779:1;33768:9;33764:17;33757:47;33821:131;33947:4;33821:131;:::i;:::-;33813:139;;33540:419;;;:::o;33965:180::-;34013:77;34010:1;34003:88;34110:4;34107:1;34100:15;34134:4;34131:1;34124:15;34151:410;34191:7;34214:20;34232:1;34214:20;:::i;:::-;34209:25;;34248:20;34266:1;34248:20;:::i;:::-;34243:25;;34303:1;34300;34296:9;34325:30;34343:11;34325:30;:::i;:::-;34314:41;;34504:1;34495:7;34491:15;34488:1;34485:22;34465:1;34458:9;34438:83;34415:139;;34534:18;;:::i;:::-;34415:139;34199:362;34151:410;;;;:::o;34567:176::-;34707:28;34703:1;34695:6;34691:14;34684:52;34567:176;:::o;34749:366::-;34891:3;34912:67;34976:2;34971:3;34912:67;:::i;:::-;34905:74;;34988:93;35077:3;34988:93;:::i;:::-;35106:2;35101:3;35097:12;35090:19;;34749:366;;;:::o;35121:419::-;35287:4;35325:2;35314:9;35310:18;35302:26;;35374:9;35368:4;35364:20;35360:1;35349:9;35345:17;35338:47;35402:131;35528:4;35402:131;:::i;:::-;35394:139;;35121:419;;;:::o;35546:191::-;35586:3;35605:20;35623:1;35605:20;:::i;:::-;35600:25;;35639:20;35657:1;35639:20;:::i;:::-;35634:25;;35682:1;35679;35675:9;35668:16;;35703:3;35700:1;35697:10;35694:36;;;35710:18;;:::i;:::-;35694:36;35546:191;;;;:::o;35743:165::-;35883:17;35879:1;35871:6;35867:14;35860:41;35743:165;:::o;35914:366::-;36056:3;36077:67;36141:2;36136:3;36077:67;:::i;:::-;36070:74;;36153:93;36242:3;36153:93;:::i;:::-;36271:2;36266:3;36262:12;36255:19;;35914:366;;;:::o;36286:419::-;36452:4;36490:2;36479:9;36475:18;36467:26;;36539:9;36533:4;36529:20;36525:1;36514:9;36510:17;36503:47;36567:131;36693:4;36567:131;:::i;:::-;36559:139;;36286:419;;;:::o;36711:163::-;36851:15;36847:1;36839:6;36835:14;36828:39;36711:163;:::o;36880:366::-;37022:3;37043:67;37107:2;37102:3;37043:67;:::i;:::-;37036:74;;37119:93;37208:3;37119:93;:::i;:::-;37237:2;37232:3;37228:12;37221:19;;36880:366;;;:::o;37252:419::-;37418:4;37456:2;37445:9;37441:18;37433:26;;37505:9;37499:4;37495:20;37491:1;37480:9;37476:17;37469:47;37533:131;37659:4;37533:131;:::i;:::-;37525:139;;37252:419;;;:::o;37677:160::-;37817:12;37813:1;37805:6;37801:14;37794:36;37677:160;:::o;37843:366::-;37985:3;38006:67;38070:2;38065:3;38006:67;:::i;:::-;37999:74;;38082:93;38171:3;38082:93;:::i;:::-;38200:2;38195:3;38191:12;38184:19;;37843:366;;;:::o;38215:419::-;38381:4;38419:2;38408:9;38404:18;38396:26;;38468:9;38462:4;38458:20;38454:1;38443:9;38439:17;38432:47;38496:131;38622:4;38496:131;:::i;:::-;38488:139;;38215:419;;;:::o;38640:175::-;38780:27;38776:1;38768:6;38764:14;38757:51;38640:175;:::o;38821:366::-;38963:3;38984:67;39048:2;39043:3;38984:67;:::i;:::-;38977:74;;39060:93;39149:3;39060:93;:::i;:::-;39178:2;39173:3;39169:12;39162:19;;38821:366;;;:::o;39193:419::-;39359:4;39397:2;39386:9;39382:18;39374:26;;39446:9;39440:4;39436:20;39432:1;39421:9;39417:17;39410:47;39474:131;39600:4;39474:131;:::i;:::-;39466:139;;39193:419;;;:::o;39618:179::-;39758:31;39754:1;39746:6;39742:14;39735:55;39618:179;:::o;39803:366::-;39945:3;39966:67;40030:2;40025:3;39966:67;:::i;:::-;39959:74;;40042:93;40131:3;40042:93;:::i;:::-;40160:2;40155:3;40151:12;40144:19;;39803:366;;;:::o;40175:419::-;40341:4;40379:2;40368:9;40364:18;40356:26;;40428:9;40422:4;40418:20;40414:1;40403:9;40399:17;40392:47;40456:131;40582:4;40456:131;:::i;:::-;40448:139;;40175:419;;;:::o;40600:148::-;40702:11;40739:3;40724:18;;40600:148;;;;:::o;40778:874::-;40881:3;40918:5;40912:12;40947:36;40973:9;40947:36;:::i;:::-;40999:89;41081:6;41076:3;40999:89;:::i;:::-;40992:96;;41119:1;41108:9;41104:17;41135:1;41130:166;;;;41310:1;41305:341;;;;41097:549;;41130:166;41214:4;41210:9;41199;41195:25;41190:3;41183:38;41276:6;41269:14;41262:22;41254:6;41250:35;41245:3;41241:45;41234:52;;41130:166;;41305:341;41372:38;41404:5;41372:38;:::i;:::-;41432:1;41446:154;41460:6;41457:1;41454:13;41446:154;;;41534:7;41528:14;41524:1;41519:3;41515:11;41508:35;41584:1;41575:7;41571:15;41560:26;;41482:4;41479:1;41475:12;41470:17;;41446:154;;;41629:6;41624:3;41620:16;41613:23;;41312:334;;41097:549;;40885:767;;40778:874;;;;:::o;41658:162::-;41798:14;41794:1;41786:6;41782:14;41775:38;41658:162;:::o;41826:402::-;41986:3;42007:85;42089:2;42084:3;42007:85;:::i;:::-;42000:92;;42101:93;42190:3;42101:93;:::i;:::-;42219:2;42214:3;42210:12;42203:19;;41826:402;;;:::o;42234:535::-;42464:3;42486:92;42574:3;42565:6;42486:92;:::i;:::-;42479:99;;42595:148;42739:3;42595:148;:::i;:::-;42588:155;;42760:3;42753:10;;42234:535;;;;:::o;42775:390::-;42881:3;42909:39;42942:5;42909:39;:::i;:::-;42964:89;43046:6;43041:3;42964:89;:::i;:::-;42957:96;;43062:65;43120:6;43115:3;43108:4;43101:5;43097:16;43062:65;:::i;:::-;43152:6;43147:3;43143:16;43136:23;;42885:280;42775:390;;;;:::o;43171:155::-;43311:7;43307:1;43299:6;43295:14;43288:31;43171:155;:::o;43332:400::-;43492:3;43513:84;43595:1;43590:3;43513:84;:::i;:::-;43506:91;;43606:93;43695:3;43606:93;:::i;:::-;43724:1;43719:3;43715:11;43708:18;;43332:400;;;:::o;43738:695::-;44016:3;44038:92;44126:3;44117:6;44038:92;:::i;:::-;44031:99;;44147:95;44238:3;44229:6;44147:95;:::i;:::-;44140:102;;44259:148;44403:3;44259:148;:::i;:::-;44252:155;;44424:3;44417:10;;43738:695;;;;;:::o;44439:170::-;44579:22;44575:1;44567:6;44563:14;44556:46;44439:170;:::o;44615:366::-;44757:3;44778:67;44842:2;44837:3;44778:67;:::i;:::-;44771:74;;44854:93;44943:3;44854:93;:::i;:::-;44972:2;44967:3;44963:12;44956:19;;44615:366;;;:::o;44987:419::-;45153:4;45191:2;45180:9;45176:18;45168:26;;45240:9;45234:4;45230:20;45226:1;45215:9;45211:17;45204:47;45268:131;45394:4;45268:131;:::i;:::-;45260:139;;44987:419;;;:::o;45412:168::-;45552:20;45548:1;45540:6;45536:14;45529:44;45412:168;:::o;45586:366::-;45728:3;45749:67;45813:2;45808:3;45749:67;:::i;:::-;45742:74;;45825:93;45914:3;45825:93;:::i;:::-;45943:2;45938:3;45934:12;45927:19;;45586:366;;;:::o;45958:419::-;46124:4;46162:2;46151:9;46147:18;46139:26;;46211:9;46205:4;46201:20;46197:1;46186:9;46182:17;46175:47;46239:131;46365:4;46239:131;:::i;:::-;46231:139;;45958:419;;;:::o;46383:168::-;46523:20;46519:1;46511:6;46507:14;46500:44;46383:168;:::o;46557:366::-;46699:3;46720:67;46784:2;46779:3;46720:67;:::i;:::-;46713:74;;46796:93;46885:3;46796:93;:::i;:::-;46914:2;46909:3;46905:12;46898:19;;46557:366;;;:::o;46929:419::-;47095:4;47133:2;47122:9;47118:18;47110:26;;47182:9;47176:4;47172:20;47168:1;47157:9;47153:17;47146:47;47210:131;47336:4;47210:131;:::i;:::-;47202:139;;46929:419;;;:::o;47354:166::-;47494:18;47490:1;47482:6;47478:14;47471:42;47354:166;:::o;47526:402::-;47686:3;47707:85;47789:2;47784:3;47707:85;:::i;:::-;47700:92;;47801:93;47890:3;47801:93;:::i;:::-;47919:2;47914:3;47910:12;47903:19;;47526:402;;;:::o;47934:535::-;48164:3;48186:92;48274:3;48265:6;48186:92;:::i;:::-;48179:99;;48295:148;48439:3;48295:148;:::i;:::-;48288:155;;48460:3;48453:10;;47934:535;;;;:::o;48475:182::-;48615:34;48611:1;48603:6;48599:14;48592:58;48475:182;:::o;48663:366::-;48805:3;48826:67;48890:2;48885:3;48826:67;:::i;:::-;48819:74;;48902:93;48991:3;48902:93;:::i;:::-;49020:2;49015:3;49011:12;49004:19;;48663:366;;;:::o;49035:419::-;49201:4;49239:2;49228:9;49224:18;49216:26;;49288:9;49282:4;49278:20;49274:1;49263:9;49259:17;49252:47;49316:131;49442:4;49316:131;:::i;:::-;49308:139;;49035:419;;;:::o;49460:170::-;49600:22;49596:1;49588:6;49584:14;49577:46;49460:170;:::o;49636:366::-;49778:3;49799:67;49863:2;49858:3;49799:67;:::i;:::-;49792:74;;49875:93;49964:3;49875:93;:::i;:::-;49993:2;49988:3;49984:12;49977:19;;49636:366;;;:::o;50008:419::-;50174:4;50212:2;50201:9;50197:18;50189:26;;50261:9;50255:4;50251:20;50247:1;50236:9;50232:17;50225:47;50289:131;50415:4;50289:131;:::i;:::-;50281:139;;50008:419;;;:::o;50433:168::-;50573:20;50569:1;50561:6;50557:14;50550:44;50433:168;:::o;50607:366::-;50749:3;50770:67;50834:2;50829:3;50770:67;:::i;:::-;50763:74;;50846:93;50935:3;50846:93;:::i;:::-;50964:2;50959:3;50955:12;50948:19;;50607:366;;;:::o;50979:419::-;51145:4;51183:2;51172:9;51168:18;51160:26;;51232:9;51226:4;51222:20;51218:1;51207:9;51203:17;51196:47;51260:131;51386:4;51260:131;:::i;:::-;51252:139;;50979:419;;;:::o;51404:168::-;51544:20;51540:1;51532:6;51528:14;51521:44;51404:168;:::o;51578:366::-;51720:3;51741:67;51805:2;51800:3;51741:67;:::i;:::-;51734:74;;51817:93;51906:3;51817:93;:::i;:::-;51935:2;51930:3;51926:12;51919:19;;51578:366;;;:::o;51950:419::-;52116:4;52154:2;52143:9;52139:18;52131:26;;52203:9;52197:4;52193:20;52189:1;52178:9;52174:17;52167:47;52231:131;52357:4;52231:131;:::i;:::-;52223:139;;51950:419;;;:::o;52375:182::-;52515:34;52511:1;52503:6;52499:14;52492:58;52375:182;:::o;52563:366::-;52705:3;52726:67;52790:2;52785:3;52726:67;:::i;:::-;52719:74;;52802:93;52891:3;52802:93;:::i;:::-;52920:2;52915:3;52911:12;52904:19;;52563:366;;;:::o;52935:419::-;53101:4;53139:2;53128:9;53124:18;53116:26;;53188:9;53182:4;53178:20;53174:1;53163:9;53159:17;53152:47;53216:131;53342:4;53216:131;:::i;:::-;53208:139;;52935:419;;;:::o;53360:178::-;53500:30;53496:1;53488:6;53484:14;53477:54;53360:178;:::o;53544:366::-;53686:3;53707:67;53771:2;53766:3;53707:67;:::i;:::-;53700:74;;53783:93;53872:3;53783:93;:::i;:::-;53901:2;53896:3;53892:12;53885:19;;53544:366;;;:::o;53916:419::-;54082:4;54120:2;54109:9;54105:18;54097:26;;54169:9;54163:4;54159:20;54155:1;54144:9;54140:17;54133:47;54197:131;54323:4;54197:131;:::i;:::-;54189:139;;53916:419;;;:::o;54341:177::-;54481:29;54477:1;54469:6;54465:14;54458:53;54341:177;:::o;54524:366::-;54666:3;54687:67;54751:2;54746:3;54687:67;:::i;:::-;54680:74;;54763:93;54852:3;54763:93;:::i;:::-;54881:2;54876:3;54872:12;54865:19;;54524:366;;;:::o;54896:419::-;55062:4;55100:2;55089:9;55085:18;55077:26;;55149:9;55143:4;55139:20;55135:1;55124:9;55120:17;55113:47;55177:131;55303:4;55177:131;:::i;:::-;55169:139;;54896:419;;;:::o;55321:194::-;55361:4;55381:20;55399:1;55381:20;:::i;:::-;55376:25;;55415:20;55433:1;55415:20;:::i;:::-;55410:25;;55459:1;55456;55452:9;55444:17;;55483:1;55477:4;55474:11;55471:37;;;55488:18;;:::i;:::-;55471:37;55321:194;;;;:::o;55521:176::-;55661:28;55657:1;55649:6;55645:14;55638:52;55521:176;:::o;55703:366::-;55845:3;55866:67;55930:2;55925:3;55866:67;:::i;:::-;55859:74;;55942:93;56031:3;55942:93;:::i;:::-;56060:2;56055:3;56051:12;56044:19;;55703:366;;;:::o;56075:419::-;56241:4;56279:2;56268:9;56264:18;56256:26;;56328:9;56322:4;56318:20;56314:1;56303:9;56299:17;56292:47;56356:131;56482:4;56356:131;:::i;:::-;56348:139;;56075:419;;;:::o;56500:233::-;56539:3;56562:24;56580:5;56562:24;:::i;:::-;56553:33;;56608:66;56601:5;56598:77;56595:103;;56678:18;;:::i;:::-;56595:103;56725:1;56718:5;56714:13;56707:20;;56500:233;;;:::o;56739:180::-;56787:77;56784:1;56777:88;56884:4;56881:1;56874:15;56908:4;56905:1;56898:15;56925:185;56965:1;56982:20;57000:1;56982:20;:::i;:::-;56977:25;;57016:20;57034:1;57016:20;:::i;:::-;57011:25;;57055:1;57045:35;;57060:18;;:::i;:::-;57045:35;57102:1;57099;57095:9;57090:14;;56925:185;;;;:::o;57116:176::-;57148:1;57165:20;57183:1;57165:20;:::i;:::-;57160:25;;57199:20;57217:1;57199:20;:::i;:::-;57194:25;;57238:1;57228:35;;57243:18;;:::i;:::-;57228:35;57284:1;57281;57277:9;57272:14;;57116:176;;;;:::o;57298:98::-;57349:6;57383:5;57377:12;57367:22;;57298:98;;;:::o;57402:168::-;57485:11;57519:6;57514:3;57507:19;57559:4;57554:3;57550:14;57535:29;;57402:168;;;;:::o;57576:373::-;57662:3;57690:38;57722:5;57690:38;:::i;:::-;57744:70;57807:6;57802:3;57744:70;:::i;:::-;57737:77;;57823:65;57881:6;57876:3;57869:4;57862:5;57858:16;57823:65;:::i;:::-;57913:29;57935:6;57913:29;:::i;:::-;57908:3;57904:39;57897:46;;57666:283;57576:373;;;;:::o;57955:640::-;58150:4;58188:3;58177:9;58173:19;58165:27;;58202:71;58270:1;58259:9;58255:17;58246:6;58202:71;:::i;:::-;58283:72;58351:2;58340:9;58336:18;58327:6;58283:72;:::i;:::-;58365;58433:2;58422:9;58418:18;58409:6;58365:72;:::i;:::-;58484:9;58478:4;58474:20;58469:2;58458:9;58454:18;58447:48;58512:76;58583:4;58574:6;58512:76;:::i;:::-;58504:84;;57955:640;;;;;;;:::o;58601:141::-;58657:5;58688:6;58682:13;58673:22;;58704:32;58730:5;58704:32;:::i;:::-;58601:141;;;;:::o;58748:349::-;58817:6;58866:2;58854:9;58845:7;58841:23;58837:32;58834:119;;;58872:79;;:::i;:::-;58834:119;58992:1;59017:63;59072:7;59063:6;59052:9;59048:22;59017:63;:::i;:::-;59007:73;;58963:127;58748:349;;;;:::o;59103:182::-;59243:34;59239:1;59231:6;59227:14;59220:58;59103:182;:::o;59291:366::-;59433:3;59454:67;59518:2;59513:3;59454:67;:::i;:::-;59447:74;;59530:93;59619:3;59530:93;:::i;:::-;59648:2;59643:3;59639:12;59632:19;;59291:366;;;:::o;59663:419::-;59829:4;59867:2;59856:9;59852:18;59844:26;;59916:9;59910:4;59906:20;59902:1;59891:9;59887:17;59880:47;59944:131;60070:4;59944:131;:::i;:::-;59936:139;;59663:419;;;:::o;60088:178::-;60228:30;60224:1;60216:6;60212:14;60205:54;60088:178;:::o;60272:366::-;60414:3;60435:67;60499:2;60494:3;60435:67;:::i;:::-;60428:74;;60511:93;60600:3;60511:93;:::i;:::-;60629:2;60624:3;60620:12;60613:19;;60272:366;;;:::o;60644:419::-;60810:4;60848:2;60837:9;60833:18;60825:26;;60897:9;60891:4;60887:20;60883:1;60872:9;60868:17;60861:47;60925:131;61051:4;60925:131;:::i;:::-;60917:139;;60644:419;;;:::o

Swarm Source

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