ETH Price: $3,248.50 (+3.41%)
Gas: 4 Gwei

Token

Monsters and Villains (M&V)
 

Overview

Max Total Supply

347 M&V

Holders

114

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 M&V
0x86925595310951104fCE46Ce489BEA3c51F8BE71
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

1,024 Monsters existing throughout history with origins dating as far back as 2600 BCE through 20th century literary classics and pop culture folklore. Artwork is human illustrated. Burn function outputs manually curated using Punnett square based algorithm.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MonstersAndVillains

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-10
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/


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 MonstersAndVillains 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;
    
    mapping(uint256 => uint256[4]) private _burned_for_villain;
    mapping(uint256 => uint256[8]) private _burned_for_super;

    mapping(address => bool) private _whitelist;
    mapping(address => uint256) public wlmints;

    // Specific Functionality
    bool public mintActive;
    bool public villActive;
    bool public suprActive;
    bool public WLActive;

    uint256 public price;
    uint256 public totalMint;
    uint256 public numberMinted;
    uint256 public numVillains;
    uint256 public numSupers;
    
    uint256 public numberBurned;

    

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Monsters and Villains";
        _symbol = "M&V";
        _baseURI = "https://egonauts.io/monsters/metadata/";
        
        totalMint = 1024;
        price = 100 * (10 ** 15); // 0.1
    }

    //@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 == MonstersAndVillains.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 fundsAvailable = address(this).balance;
        bool success;
        (success, ) = _msgSender().call{value: fundsAvailable}("");
        require(success, "Transaction Unsuccessful");
    }   
    
    function airDropSingle(address _to, uint256 _qty) external onlyOwner {
        require((numberMinted + _qty) > numberMinted, "Math overflow error");
        require((numberMinted + _qty) <= totalMint, "Cannot fill order");
        
        for(uint256 i = 0; i < _qty; i++) {
            _safeMint(_to, numberMinted + 1);
            numberMinted ++;
        }
    }
    
    function airDrop(address[] memory _to, uint256[] memory _qty) external onlyOwner {
        // use with care, qty is not being calculated for a check.
        require( _to.length == _qty.length, "array lengths must match");

        for(uint256 i = 0; i < _qty.length; i++) {
            for(uint256 j = 0; j < _qty[i]; j++) {
                _safeMint( _to[i], numberMinted + 1 );
                numberMinted ++;
            }
        }
    }
    
    function mint(uint256 qty) external payable reentryLock {
        require(mintActive, "Not open to the public");
        require(qty <= 10, "10 at a time or less, please");
        require(qty + numberMinted <= totalMint, "Sold Out");
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require(msg.value == qty * price, "Wrong amount sent");

        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), numberMinted + 1);
            numberMinted ++;
        }
    }

    function whitelistMint(uint256 qty) external payable reentryLock {
        require(WLActive, "Whitelist not open");
        require(_whitelist[_msgSender()] == true, "Not Whitelisted");
        require( qty + wlmints[_msgSender()] <= 6, "Over max whitelist mints");
        require(qty + numberMinted <= totalMint, "Sold Out");
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require(msg.value == qty * price, "Wrong amount sent");

        wlmints[_msgSender()] += qty;

        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), numberMinted + 1);
            numberMinted ++;
        }
    }

    function mintVillain(uint256 t1, uint256 t2, uint256 t3, uint256 t4) external reentryLock {
        require(villActive, "Not open to the public");
        // Validate ownership in wallet
        require(ownerOf(t1) == _msgSender(), "you don't own that");
        require(ownerOf(t2) == _msgSender(), "you don't own that");
        require(ownerOf(t3) == _msgSender(), "you don't own that");
        require(ownerOf(t4) == _msgSender(), "you don't own that");
        // Validate token Ids are the right type
        require(t1 < 1025, "Wrong Type");
        require(t2 < 1025, "Wrong Type");
        require(t3 < 1025, "Wrong Type");
        require(t4 < 1025, "Wrong Type");
        // Make the sacrifice
        _burn(t1);
        _burn(t2);
        _burn(t3);
        _burn(t4);
        // grant evolved villain
        numVillains ++;
        uint256 tokenid = numVillains + 1024;
        _safeMint(_msgSender(), tokenid);

        // update the traits that went into building this tokenid
        _burned_for_villain[tokenid] = [t1, t2, t3, t4];
    }
    
    function mintSuperVillain(uint256 v1, uint256 v2) external reentryLock {
        require(suprActive, "Not open to the public");
        // Validate Ownership
        require(ownerOf(v1) == _msgSender(), "you don't own that");
        require(ownerOf(v2) == _msgSender(), "you don't own that");
        // Validate correct type
        require( (v1 > 1024)&&(v1 < 2000), "Wrong Type");
        require( (v2 > 1024)&&(v2 < 2000), "Wrong Type");
        // Make the sacrifice
        _burn(v1);
        _burn(v2);
        // grant evolved superVillain
        numSupers ++;
        uint256 tokenid = numSupers + 2000;
        _safeMint(_msgSender(), tokenid);

        // update the traits that went into building this tokenid
        for (uint256 i; i < 8; i++){
            if (i<4){
                _burned_for_super[tokenid][i] = _burned_for_villain[v1][i];
            } else {
                _burned_for_super[tokenid][i] = _burned_for_villain[v2][i-4];
            }
        }
        
    }

    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    function getStateMachine() external view returns(uint256){
        uint256 state = 0;
        if (mintActive){
            state+=1;
        }
        if (villActive){
            state+=2;
        }
        if (suprActive){
            state+=4;
        }

        return state;
    }

    function whitelistMany(address[] memory wladdresses) external onlyOwner {
        for(uint256 i=0; i < wladdresses.length; i++){
            _whitelist[wladdresses[i]] = true;
        }
    }

    function getVillainSacrifice(uint256 tokenid) external view returns(uint256[4] memory){
        return _burned_for_villain[tokenid];
    }

    function getSuperSacrifice(uint256 tokenid) external view returns(uint256[8] memory){
        return _burned_for_super[tokenid];
    }
    
    function setBaseURI(string memory newURI) external onlyOwner {
        _baseURI = newURI;
    }

    function setSupplyLimit(uint256 newLimit) external onlyOwner {
        totalMint = newLimit;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }

    function activateWhitelist() public onlyOwner {
        WLActive = true;
    }
    
    function deactivateWhitelist() public onlyOwner {
        WLActive = false;
    }
    
    function activateVillains() public onlyOwner {
        villActive = true;
    }
    
    function deactivateVillains() public onlyOwner {
        villActive = false;
    }
    
    function activateSuper() public onlyOwner {
        suprActive = true;
    }
    
    function deactivateSuper() public onlyOwner {
        suprActive = false;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted + numVillains + numSupers - numberBurned; //stupid bs for etherscan's call
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

    /**
     * @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];
        numberBurned ++;

        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;
        
        tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"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":"WLActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateSuper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateVillains","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_qty","type":"uint256[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"airDropSingle","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":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateSuper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateVillains","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStateMachine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"getSuperSacrifice","outputs":[{"internalType":"uint256[8]","name":"","type":"uint256[8]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"getVillainSacrifice","outputs":[{"internalType":"uint256[4]","name":"","type":"uint256[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"v1","type":"uint256"},{"internalType":"uint256","name":"v2","type":"uint256"}],"name":"mintSuperVillain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"t1","type":"uint256"},{"internalType":"uint256","name":"t2","type":"uint256"},{"internalType":"uint256","name":"t3","type":"uint256"},{"internalType":"uint256","name":"t4","type":"uint256"}],"name":"mintVillain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numSupers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numVillains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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":"newLimit","type":"uint256"}],"name":"setSupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"suprActive","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":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"villActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wladdresses","type":"address[]"}],"name":"whitelistMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wlmints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c620000406200012360201b60201c565b6200012b60201b60201c565b6040518060400160405280601581526020017f4d6f6e737465727320616e642056696c6c61696e7300000000000000000000008152506001908162000092919062000469565b506040518060400160405280600381526020017f4d2656000000000000000000000000000000000000000000000000000000000081525060029081620000d9919062000469565b50604051806060016040528060268152602001620064e8602691396003908162000104919062000469565b50610400600e8190555067016345785d8a0000600d8190555062000550565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200027157607f821691505b60208210810362000287576200028662000229565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002b2565b620002fd8683620002b2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200034a620003446200033e8462000315565b6200031f565b62000315565b9050919050565b6000819050919050565b620003668362000329565b6200037e620003758262000351565b848454620002bf565b825550505050565b600090565b6200039562000386565b620003a28184846200035b565b505050565b5b81811015620003ca57620003be6000826200038b565b600181019050620003a8565b5050565b601f8211156200041957620003e3816200028d565b620003ee84620002a2565b81016020851015620003fe578190505b620004166200040d85620002a2565b830182620003a7565b50505b505050565b600082821c905092915050565b60006200043e600019846008026200041e565b1980831691505092915050565b60006200045983836200042b565b9150826002028217905092915050565b6200047482620001ef565b67ffffffffffffffff81111562000490576200048f620001fa565b5b6200049c825462000258565b620004a9828285620003ce565b600060209050601f831160018114620004e15760008415620004cc578287015190505b620004d885826200044b565b86555062000548565b601f198416620004f1866200028d565b60005b828110156200051b57848901518255600182019150602085019450602081019050620004f4565b868310156200053b578489015162000537601f8916826200042b565b8355505b6001600288020188555050505b505050505050565b615f8880620005606000396000f3fe60806040526004361061031d5760003560e01c80636a1a5be6116101ab578063a22cb465116100f7578063daaf379611610095578063f2fde38b1161006f578063f2fde38b14610b03578063f4107b3514610b2c578063f8b2cb4f14610b69578063ffad525714610ba657610324565b8063daaf379614610a72578063e8a3d48514610a9b578063e985e9c514610ac657610324565b8063bcc7d94a116100d1578063bcc7d94a146109dc578063c855102514610a07578063c87b56dd14610a1e578063c91c046214610a5b57610324565b8063a22cb46514610961578063a77f7c8c1461098a578063b88d4fde146109b357610324565b8063868ff4a2116101645780638da5cb5b1161013e5780638da5cb5b146108c457806395d89b41146108ef578063a035b1fe1461091a578063a0712d681461094557610324565b8063868ff4a2146108685780638742a2be1461088457806389e877a3146108ad57610324565b80636a1a5be61461076c5780636dc0f2ba1461078357806370a082311461079a578063715018a6146107d7578063758c0886146107ee5780638658c9351461082b57610324565b806338ed3ccd1161026a5780634ba5f3411161022357806359a7715a116101fd57806359a7715a146106c45780636024fd80146106ef5780636352211e1461070657806365216a411461074357610324565b80634ba5f3411461064557806355f804b31461067057806358d953841461069957610324565b806338ed3ccd1461055b5780633ccfd60b1461058657806342842e0e1461059d57806342966c68146105c657806346ea9ba0146105ef57806349a772b51461061a57610324565b8063150b7a02116102d757806325fd90f3116102b157806325fd90f3146104d95780632e56f71e146105045780633597d7f31461051b578063361fab251461053257610324565b8063150b7a021461044857806318160ddd1461048557806323b872dd146104b057610324565b80629207b11461032657806301ffc9a71461035157806305b0c8871461038e57806306fdde03146103b7578063081812fc146103e2578063095ea7b31461041f57610324565b3661032457005b005b34801561033257600080fd5b5061033b610bd1565b6040516103489190613f2b565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613fb2565b610be4565b6040516103859190613f2b565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190614015565b610d6d565b005b3480156103c357600080fd5b506103cc6111f0565b6040516103d9919061410c565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061412e565b611282565b604051610416919061419c565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906141e3565b611307565b005b34801561045457600080fd5b5061046f600480360381019061046a9190614288565b611410565b60405161047c919061431f565b60405180910390f35b34801561049157600080fd5b5061049a611425565b6040516104a79190614349565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190614364565b611456565b005b3480156104e557600080fd5b506104ee6114af565b6040516104fb9190613f2b565b60405180910390f35b34801561051057600080fd5b506105196114c2565b005b34801561052757600080fd5b5061053061155b565b005b34801561053e57600080fd5b506105596004803603810190610554919061412e565b6115f4565b005b34801561056757600080fd5b5061057061167a565b60405161057d9190614349565b60405180910390f35b34801561059257600080fd5b5061059b611680565b005b3480156105a957600080fd5b506105c460048036038101906105bf9190614364565b6117ba565b005b3480156105d257600080fd5b506105ed60048036038101906105e8919061412e565b6117da565b005b3480156105fb57600080fd5b5061060461182d565b6040516106119190614349565b60405180910390f35b34801561062657600080fd5b5061062f6118aa565b60405161063c9190614349565b60405180910390f35b34801561065157600080fd5b5061065a6118b0565b6040516106679190613f2b565b60405180910390f35b34801561067c57600080fd5b50610697600480360381019061069291906144e7565b6118c3565b005b3480156106a557600080fd5b506106ae611952565b6040516106bb9190613f2b565b60405180910390f35b3480156106d057600080fd5b506106d9611965565b6040516106e69190614349565b60405180910390f35b3480156106fb57600080fd5b5061070461196b565b005b34801561071257600080fd5b5061072d6004803603810190610728919061412e565b611a04565b60405161073a919061419c565b60405180910390f35b34801561074f57600080fd5b5061076a600480360381019061076591906146b6565b611ab5565b005b34801561077857600080fd5b50610781611c1c565b005b34801561078f57600080fd5b50610798611cb5565b005b3480156107a657600080fd5b506107c160048036038101906107bc919061472e565b611d4e565b6040516107ce9190614349565b60405180910390f35b3480156107e357600080fd5b506107ec611e05565b005b3480156107fa57600080fd5b506108156004803603810190610810919061412e565b611e8d565b6040516108229190614806565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061472e565b611eeb565b60405161085f9190614349565b60405180910390f35b610882600480360381019061087d919061412e565b611f03565b005b34801561089057600080fd5b506108ab60048036038101906108a69190614822565b6122ae565b005b3480156108b957600080fd5b506108c261264f565b005b3480156108d057600080fd5b506108d96126e8565b6040516108e6919061419c565b60405180910390f35b3480156108fb57600080fd5b50610904612711565b604051610911919061410c565b60405180910390f35b34801561092657600080fd5b5061092f6127a3565b60405161093c9190614349565b60405180910390f35b61095f600480360381019061095a919061412e565b6127a9565b005b34801561096d57600080fd5b506109886004803603810190610983919061488e565b612a0c565b005b34801561099657600080fd5b506109b160048036038101906109ac91906148ce565b612b77565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906149b8565b612c88565b005b3480156109e857600080fd5b506109f1612ce3565b6040516109fe9190614349565b60405180910390f35b348015610a1357600080fd5b50610a1c612ce9565b005b348015610a2a57600080fd5b50610a456004803603810190610a40919061412e565b612d82565b604051610a52919061410c565b60405180910390f35b348015610a6757600080fd5b50610a70612e04565b005b348015610a7e57600080fd5b50610a996004803603810190610a9491906141e3565b612e9d565b005b348015610aa757600080fd5b50610ab061300f565b604051610abd919061410c565b60405180910390f35b348015610ad257600080fd5b50610aed6004803603810190610ae89190614a3b565b613037565b604051610afa9190613f2b565b60405180910390f35b348015610b0f57600080fd5b50610b2a6004803603810190610b25919061472e565b6130cb565b005b348015610b3857600080fd5b50610b536004803603810190610b4e919061412e565b6131c2565b604051610b609190614aff565b60405180910390f35b348015610b7557600080fd5b50610b906004803603810190610b8b919061472e565b613220565b604051610b9d9190614349565b60405180910390f35b348015610bb257600080fd5b50610bbb61327b565b604051610bc89190614349565b60405180910390f35b600c60029054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610caf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d1757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d66575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600060149054906101000a900460ff1615610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60019054906101000a900460ff16610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90614bd2565b60405180910390fd5b610e2f613281565b73ffffffffffffffffffffffffffffffffffffffff16610e4e85611a04565b73ffffffffffffffffffffffffffffffffffffffff1614610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90614c3e565b60405180910390fd5b610eac613281565b73ffffffffffffffffffffffffffffffffffffffff16610ecb84611a04565b73ffffffffffffffffffffffffffffffffffffffff1614610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614c3e565b60405180910390fd5b610f29613281565b73ffffffffffffffffffffffffffffffffffffffff16610f4883611a04565b73ffffffffffffffffffffffffffffffffffffffff1614610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9590614c3e565b60405180910390fd5b610fa6613281565b73ffffffffffffffffffffffffffffffffffffffff16610fc582611a04565b73ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290614c3e565b60405180910390fd5b610401841061105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690614caa565b60405180910390fd5b61040183106110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614caa565b60405180910390fd5b61040182106110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90614caa565b60405180910390fd5b610401811061112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290614caa565b60405180910390fd5b61113484613289565b61113d83613289565b61114682613289565b61114f81613289565b6010600081548092919061116290614cf9565b919050555060006104006010546111799190614d41565b905061118c611186613281565b826133b2565b604051806080016040528086815260200185815260200184815260200183815250600860008381526020019081526020016000209060046111ce929190613e6e565b505060008060146101000a81548160ff02191690831515021790555050505050565b6060600180546111ff90614da4565b80601f016020809104026020016040519081016040528092919081815260200182805461122b90614da4565b80156112785780601f1061124d57610100808354040283529160200191611278565b820191906000526020600020905b81548152906001019060200180831161125b57829003601f168201915b5050505050905090565b600061128d826133d0565b6112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614e21565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061131282611a04565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614e8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113c257506113c18133613037565b5b611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890614ef9565b60405180910390fd5b61140b838361343c565b505050565b600063150b7a0260e01b905095945050505050565b6000601254601154601054600f5461143d9190614d41565b6114479190614d41565b6114519190614f19565b905090565b61146033826134f5565b61149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690614f99565b60405180910390fd5b6114aa8383836135d3565b505050565b600c60009054906101000a900460ff1681565b6114ca613281565b73ffffffffffffffffffffffffffffffffffffffff166114e86126e8565b73ffffffffffffffffffffffffffffffffffffffff161461153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590615005565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b611563613281565b73ffffffffffffffffffffffffffffffffffffffff166115816126e8565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90615005565b60405180910390fd5b6000600c60036101000a81548160ff021916908315150217905550565b6115fc613281565b73ffffffffffffffffffffffffffffffffffffffff1661161a6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790615005565b60405180910390fd5b80600e8190555050565b60125481565b611688613281565b73ffffffffffffffffffffffffffffffffffffffff166116a66126e8565b73ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390615005565b60405180910390fd5b6000479050600061170b613281565b73ffffffffffffffffffffffffffffffffffffffff168260405161172e90615056565b60006040518083038185875af1925050503d806000811461176b576040519150601f19603f3d011682016040523d82523d6000602084013e611770565b606091505b505080915050806117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad906150b7565b60405180910390fd5b5050565b6117d583838360405180602001604052806000815250612c88565b505050565b6117e381611a04565b73ffffffffffffffffffffffffffffffffffffffff16611801613281565b73ffffffffffffffffffffffffffffffffffffffff161461182157600080fd5b61182a81613289565b50565b60008060009050600c60009054906101000a900460ff1615611859576001816118569190614d41565b90505b600c60019054906101000a900460ff161561187e5760028161187b9190614d41565b90505b600c60029054906101000a900460ff16156118a3576004816118a09190614d41565b90505b8091505090565b600f5481565b600c60019054906101000a900460ff1681565b6118cb613281565b73ffffffffffffffffffffffffffffffffffffffff166118e96126e8565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690615005565b60405180910390fd5b806003908161194e9190615283565b5050565b600c60039054906101000a900460ff1681565b600e5481565b611973613281565b73ffffffffffffffffffffffffffffffffffffffff166119916126e8565b73ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de90615005565b60405180910390fd5b6001600c60026101000a81548160ff021916908315150217905550565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa3906153a1565b60405180910390fd5b80915050919050565b611abd613281565b73ffffffffffffffffffffffffffffffffffffffff16611adb6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890615005565b60405180910390fd5b8051825114611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061540d565b60405180910390fd5b60005b8151811015611c175760005b828281518110611b9757611b9661542d565b5b6020026020010151811015611c0357611bd8848381518110611bbc57611bbb61542d565b5b60200260200101516001600f54611bd39190614d41565b6133b2565b600f6000815480929190611beb90614cf9565b91905055508080611bfb90614cf9565b915050611b84565b508080611c0f90614cf9565b915050611b78565b505050565b611c24613281565b73ffffffffffffffffffffffffffffffffffffffff16611c426126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90615005565b60405180910390fd5b6001600c60016101000a81548160ff021916908315150217905550565b611cbd613281565b73ffffffffffffffffffffffffffffffffffffffff16611cdb6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890615005565b60405180910390fd5b6000600c60026101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db5906154a8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e0d613281565b73ffffffffffffffffffffffffffffffffffffffff16611e2b6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890615005565b60405180910390fd5b611e8b600061382e565b565b611e95613eae565b60096000838152602001908152602001600020600880602002604051908101604052809291908260088015611edf576020028201915b815481526020019060010190808311611ecb575b50505050509050919050565b600b6020528060005260406000206000915090505481565b600060149054906101000a900460ff1615611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60039054906101000a900460ff16611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490615514565b60405180910390fd5b60011515600a6000611fcd613281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90615580565b60405180910390fd5b6006600b6000612065613281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826120ab9190614d41565b11156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906155ec565b60405180910390fd5b600e54600f54826120fd9190614d41565b111561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590615658565b60405180910390fd5b600f5481600f5461214f9190614d41565b1161218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906156c4565b60405180910390fd5b600d548161219d91906156e4565b34146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590615772565b60405180910390fd5b80600b60006121eb613281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122349190614d41565b9250508190555060005b8181101561229057612265612251613281565b6001600f546122609190614d41565b6133b2565b600f600081548092919061227890614cf9565b9190505550808061228890614cf9565b91505061223e565b5060008060146101000a81548160ff02191690831515021790555050565b600060149054906101000a900460ff16156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60029054906101000a900460ff16612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614bd2565b60405180910390fd5b612370613281565b73ffffffffffffffffffffffffffffffffffffffff1661238f83611a04565b73ffffffffffffffffffffffffffffffffffffffff16146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90614c3e565b60405180910390fd5b6123ed613281565b73ffffffffffffffffffffffffffffffffffffffff1661240c82611a04565b73ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990614c3e565b60405180910390fd5b6104008211801561247457506107d082105b6124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614caa565b60405180910390fd5b610400811180156124c557506107d081105b612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90614caa565b60405180910390fd5b61250d82613289565b61251681613289565b6011600081548092919061252990614cf9565b919050555060006107d06011546125409190614d41565b905061255361254d613281565b826133b2565b60005b600881101561262f5760048110156125be5760086000858152602001908152602001600020816004811061258d5761258c61542d565b5b01546009600084815260200190815260200160002082600881106125b4576125b361542d565b5b018190555061261c565b600860008481526020019081526020016000206004826125de9190614f19565b600481106125ef576125ee61542d565b5b01546009600084815260200190815260200160002082600881106126165761261561542d565b5b01819055505b808061262790614cf9565b915050612556565b505060008060146101000a81548160ff0219169083151502179055505050565b612657613281565b73ffffffffffffffffffffffffffffffffffffffff166126756126e8565b73ffffffffffffffffffffffffffffffffffffffff16146126cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c290615005565b60405180910390fd5b6001600c60036101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461272090614da4565b80601f016020809104026020016040519081016040528092919081815260200182805461274c90614da4565b80156127995780601f1061276e57610100808354040283529160200191612799565b820191906000526020600020905b81548152906001019060200180831161277c57829003601f168201915b5050505050905090565b600d5481565b600060149054906101000a900460ff16156127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60009054906101000a900460ff16612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a90614bd2565b60405180910390fd5b600a8111156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e906157de565b60405180910390fd5b600e54600f54826128b89190614d41565b11156128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090615658565b60405180910390fd5b600f5481600f5461290a9190614d41565b1161294a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612941906156c4565b60405180910390fd5b600d548161295891906156e4565b3414612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090615772565b60405180910390fd5b60005b818110156129ee576129c36129af613281565b6001600f546129be9190614d41565b6133b2565b600f60008154809291906129d690614cf9565b919050555080806129e690614cf9565b91505061299c565b5060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a719061584a565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b6b9190613f2b565b60405180910390a35050565b612b7f613281565b73ffffffffffffffffffffffffffffffffffffffff16612b9d6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea90615005565b60405180910390fd5b60005b8151811015612c84576001600a6000848481518110612c1857612c1761542d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612c7c90614cf9565b915050612bf6565b5050565b612c9233836134f5565b612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614f99565b60405180910390fd5b612cdd848484846138f2565b50505050565b60115481565b612cf1613281565b73ffffffffffffffffffffffffffffffffffffffff16612d0f6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90615005565b60405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b6060612d8d826133d0565b612dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc3906158b6565b60405180910390fd5b60606003612dd98461394e565b604051602001612dea9291906159e1565b604051602081830303815290604052905080915050919050565b612e0c613281565b73ffffffffffffffffffffffffffffffffffffffff16612e2a6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790615005565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b612ea5613281565b73ffffffffffffffffffffffffffffffffffffffff16612ec36126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090615005565b60405180910390fd5b600f5481600f54612f2a9190614d41565b11612f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f61906156c4565b60405180910390fd5b600e5481600f54612f7b9190614d41565b1115612fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb390615a5c565b60405180910390fd5b60005b8181101561300a57612fdf836001600f54612fda9190614d41565b6133b2565b600f6000815480929190612ff290614cf9565b9190505550808061300290614cf9565b915050612fbf565b505050565b606060036040516020016130239190615ac8565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6130d3613281565b73ffffffffffffffffffffffffffffffffffffffff166130f16126e8565b73ffffffffffffffffffffffffffffffffffffffff1614613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90615005565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90615b36565b60405180910390fd5b6131bf8161382e565b50565b6131ca613ed1565b60086000838152602001908152602001600020600480602002604051908101604052809291908260048015613214576020028201915b815481526020019060010190808311613200575b50505050509050919050565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132749190615b85565b9050919050565b60105481565b600033905090565b600061329482611a04565b90506132a281600084613aae565b6132ad60008361343c565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132fd9190614f19565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556012600081548092919061334d90614cf9565b919050555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6133cc828260405180602001604052806000815250613ab3565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134af83611a04565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000613500826133d0565b61353f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353690615c02565b60405180910390fd5b600061354a83611a04565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135b957508373ffffffffffffffffffffffffffffffffffffffff166135a184611282565b73ffffffffffffffffffffffffffffffffffffffff16145b806135ca57506135c98185613037565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166135f382611a04565b73ffffffffffffffffffffffffffffffffffffffff1614613649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364090615c6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136af90615cda565b60405180910390fd5b6136c3838383613aae565b6136ce60008261343c565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461371e9190614f19565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137759190614d41565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6138fd8484846135d3565b61390984848484613b0e565b613948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393f90615d46565b60405180910390fd5b50505050565b606060008203613995576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613aa9565b600082905060005b600082146139c75780806139b090614cf9565b915050600a826139c09190615b85565b915061399d565b60008167ffffffffffffffff8111156139e3576139e26143bc565b5b6040519080825280601f01601f191660200182016040528015613a155781602001600182028036833780820191505090505b5090505b60008514613aa257600182613a2e9190614f19565b9150600a85613a3d9190615d66565b6030613a499190614d41565b60f81b818381518110613a5f57613a5e61542d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613a9b9190615b85565b9450613a19565b8093505050505b919050565b505050565b613abd8383613c8e565b613aca6000848484613b0e565b613b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0090615d46565b60405180910390fd5b505050565b6000613b2f8473ffffffffffffffffffffffffffffffffffffffff16613e5b565b15613c81578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613b739493929190615dec565b6020604051808303816000875af1925050508015613baf57506040513d601f19601f82011682018060405250810190613bac9190615e4d565b60015b613c31573d8060008114613bdf576040519150601f19603f3d011682016040523d82523d6000602084013e613be4565b606091505b506000815103613c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2090615d46565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c86565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf490615ec6565b60405180910390fd5b613d06816133d0565b15613d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3d90615f32565b60405180910390fd5b613d5260008383613aae565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613da29190614d41565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8260048101928215613e9d579160200282015b82811115613e9c578251825591602001919060010190613e81565b5b509050613eaa9190613ef3565b5090565b604051806101000160405280600890602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b5b80821115613f0c576000816000905550600101613ef4565b5090565b60008115159050919050565b613f2581613f10565b82525050565b6000602082019050613f406000830184613f1c565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f8f81613f5a565b8114613f9a57600080fd5b50565b600081359050613fac81613f86565b92915050565b600060208284031215613fc857613fc7613f50565b5b6000613fd684828501613f9d565b91505092915050565b6000819050919050565b613ff281613fdf565b8114613ffd57600080fd5b50565b60008135905061400f81613fe9565b92915050565b6000806000806080858703121561402f5761402e613f50565b5b600061403d87828801614000565b945050602061404e87828801614000565b935050604061405f87828801614000565b925050606061407087828801614000565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156140b657808201518184015260208101905061409b565b60008484015250505050565b6000601f19601f8301169050919050565b60006140de8261407c565b6140e88185614087565b93506140f8818560208601614098565b614101816140c2565b840191505092915050565b6000602082019050818103600083015261412681846140d3565b905092915050565b60006020828403121561414457614143613f50565b5b600061415284828501614000565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141868261415b565b9050919050565b6141968161417b565b82525050565b60006020820190506141b1600083018461418d565b92915050565b6141c08161417b565b81146141cb57600080fd5b50565b6000813590506141dd816141b7565b92915050565b600080604083850312156141fa576141f9613f50565b5b6000614208858286016141ce565b925050602061421985828601614000565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261424857614247614223565b5b8235905067ffffffffffffffff81111561426557614264614228565b5b6020830191508360018202830111156142815761428061422d565b5b9250929050565b6000806000806000608086880312156142a4576142a3613f50565b5b60006142b2888289016141ce565b95505060206142c3888289016141ce565b94505060406142d488828901614000565b935050606086013567ffffffffffffffff8111156142f5576142f4613f55565b5b61430188828901614232565b92509250509295509295909350565b61431981613f5a565b82525050565b60006020820190506143346000830184614310565b92915050565b61434381613fdf565b82525050565b600060208201905061435e600083018461433a565b92915050565b60008060006060848603121561437d5761437c613f50565b5b600061438b868287016141ce565b935050602061439c868287016141ce565b92505060406143ad86828701614000565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6143f4826140c2565b810181811067ffffffffffffffff82111715614413576144126143bc565b5b80604052505050565b6000614426613f46565b905061443282826143eb565b919050565b600067ffffffffffffffff821115614452576144516143bc565b5b61445b826140c2565b9050602081019050919050565b82818337600083830152505050565b600061448a61448584614437565b61441c565b9050828152602081018484840111156144a6576144a56143b7565b5b6144b1848285614468565b509392505050565b600082601f8301126144ce576144cd614223565b5b81356144de848260208601614477565b91505092915050565b6000602082840312156144fd576144fc613f50565b5b600082013567ffffffffffffffff81111561451b5761451a613f55565b5b614527848285016144b9565b91505092915050565b600067ffffffffffffffff82111561454b5761454a6143bc565b5b602082029050602081019050919050565b600061456f61456a84614530565b61441c565b905080838252602082019050602084028301858111156145925761459161422d565b5b835b818110156145bb57806145a788826141ce565b845260208401935050602081019050614594565b5050509392505050565b600082601f8301126145da576145d9614223565b5b81356145ea84826020860161455c565b91505092915050565b600067ffffffffffffffff82111561460e5761460d6143bc565b5b602082029050602081019050919050565b600061463261462d846145f3565b61441c565b905080838252602082019050602084028301858111156146555761465461422d565b5b835b8181101561467e578061466a8882614000565b845260208401935050602081019050614657565b5050509392505050565b600082601f83011261469d5761469c614223565b5b81356146ad84826020860161461f565b91505092915050565b600080604083850312156146cd576146cc613f50565b5b600083013567ffffffffffffffff8111156146eb576146ea613f55565b5b6146f7858286016145c5565b925050602083013567ffffffffffffffff81111561471857614717613f55565b5b61472485828601614688565b9150509250929050565b60006020828403121561474457614743613f50565b5b6000614752848285016141ce565b91505092915050565b600060089050919050565b600081905092915050565b6000819050919050565b61478481613fdf565b82525050565b6000614796838361477b565b60208301905092915050565b6000602082019050919050565b6147b88161475b565b6147c28184614766565b92506147cd82614771565b8060005b838110156147fe5781516147e5878261478a565b96506147f0836147a2565b9250506001810190506147d1565b505050505050565b60006101008201905061481c60008301846147af565b92915050565b6000806040838503121561483957614838613f50565b5b600061484785828601614000565b925050602061485885828601614000565b9150509250929050565b61486b81613f10565b811461487657600080fd5b50565b60008135905061488881614862565b92915050565b600080604083850312156148a5576148a4613f50565b5b60006148b3858286016141ce565b92505060206148c485828601614879565b9150509250929050565b6000602082840312156148e4576148e3613f50565b5b600082013567ffffffffffffffff81111561490257614901613f55565b5b61490e848285016145c5565b91505092915050565b600067ffffffffffffffff821115614932576149316143bc565b5b61493b826140c2565b9050602081019050919050565b600061495b61495684614917565b61441c565b905082815260208101848484011115614977576149766143b7565b5b614982848285614468565b509392505050565b600082601f83011261499f5761499e614223565b5b81356149af848260208601614948565b91505092915050565b600080600080608085870312156149d2576149d1613f50565b5b60006149e0878288016141ce565b94505060206149f1878288016141ce565b9350506040614a0287828801614000565b925050606085013567ffffffffffffffff811115614a2357614a22613f55565b5b614a2f8782880161498a565b91505092959194509250565b60008060408385031215614a5257614a51613f50565b5b6000614a60858286016141ce565b9250506020614a71858286016141ce565b9150509250929050565b600060049050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b614ab181614a7b565b614abb8184614a86565b9250614ac682614a91565b8060005b83811015614af7578151614ade878261478a565b9650614ae983614a9b565b925050600181019050614aca565b505050505050565b6000608082019050614b146000830184614aa8565b92915050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b6000614b50601f83614087565b9150614b5b82614b1a565b602082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f4e6f74206f70656e20746f20746865207075626c696300000000000000000000600082015250565b6000614bbc601683614087565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f796f7520646f6e2774206f776e20746861740000000000000000000000000000600082015250565b6000614c28601283614087565b9150614c3382614bf2565b602082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f57726f6e67205479706500000000000000000000000000000000000000000000600082015250565b6000614c94600a83614087565b9150614c9f82614c5e565b602082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0482613fdf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d3657614d35614cca565b5b600182019050919050565b6000614d4c82613fdf565b9150614d5783613fdf565b9250828201905080821115614d6f57614d6e614cca565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614dbc57607f821691505b602082108103614dcf57614dce614d75565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b6000614e0b602083614087565b9150614e1682614dd5565b602082019050919050565b60006020820190508181036000830152614e3a81614dfe565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b6000614e77601e83614087565b9150614e8282614e41565b602082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b6000614ee3601f83614087565b9150614eee82614ead565b602082019050919050565b60006020820190508181036000830152614f1281614ed6565b9050919050565b6000614f2482613fdf565b9150614f2f83613fdf565b9250828203905081811115614f4757614f46614cca565b5b92915050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b6000614f83601c83614087565b9150614f8e82614f4d565b602082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fef602083614087565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b600081905092915050565b50565b6000615040600083615025565b915061504b82615030565b600082019050919050565b600061506182615033565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b60006150a1601883614087565b91506150ac8261506b565b602082019050919050565b600060208201905081810360008301526150d081615094565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826150fc565b61514386836150fc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061518061517b61517684613fdf565b61515b565b613fdf565b9050919050565b6000819050919050565b61519a83615165565b6151ae6151a682615187565b848454615109565b825550505050565b600090565b6151c36151b6565b6151ce818484615191565b505050565b5b818110156151f2576151e76000826151bb565b6001810190506151d4565b5050565b601f82111561523757615208816150d7565b615211846150ec565b81016020851015615220578190505b61523461522c856150ec565b8301826151d3565b50505b505050565b600082821c905092915050565b600061525a6000198460080261523c565b1980831691505092915050565b60006152738383615249565b9150826002028217905092915050565b61528c8261407c565b67ffffffffffffffff8111156152a5576152a46143bc565b5b6152af8254614da4565b6152ba8282856151f6565b600060209050601f8311600181146152ed57600084156152db578287015190505b6152e58582615267565b86555061534d565b601f1984166152fb866150d7565b60005b82811015615323578489015182556001820191506020850194506020810190506152fe565b86831015615340578489015161533c601f891682615249565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b600061538b601e83614087565b915061539682615355565b602082019050919050565b600060208201905081810360008301526153ba8161537e565b9050919050565b7f6172726179206c656e67746873206d757374206d617463680000000000000000600082015250565b60006153f7601883614087565b9150615402826153c1565b602082019050919050565b60006020820190508181036000830152615426816153ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000615492602083614087565b915061549d8261545c565b602082019050919050565b600060208201905081810360008301526154c181615485565b9050919050565b7f57686974656c697374206e6f74206f70656e0000000000000000000000000000600082015250565b60006154fe601283614087565b9150615509826154c8565b602082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f4e6f742057686974656c69737465640000000000000000000000000000000000600082015250565b600061556a600f83614087565b915061557582615534565b602082019050919050565b600060208201905081810360008301526155998161555d565b9050919050565b7f4f766572206d61782077686974656c697374206d696e74730000000000000000600082015250565b60006155d6601883614087565b91506155e1826155a0565b602082019050919050565b60006020820190508181036000830152615605816155c9565b9050919050565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b6000615642600883614087565b915061564d8261560c565b602082019050919050565b6000602082019050818103600083015261567181615635565b9050919050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b60006156ae601383614087565b91506156b982615678565b602082019050919050565b600060208201905081810360008301526156dd816156a1565b9050919050565b60006156ef82613fdf565b91506156fa83613fdf565b925082820261570881613fdf565b9150828204841483151761571f5761571e614cca565b5b5092915050565b7f57726f6e6720616d6f756e742073656e74000000000000000000000000000000600082015250565b600061575c601183614087565b915061576782615726565b602082019050919050565b6000602082019050818103600083015261578b8161574f565b9050919050565b7f313020617420612074696d65206f72206c6573732c20706c6561736500000000600082015250565b60006157c8601c83614087565b91506157d382615792565b602082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615834601983614087565b915061583f826157fe565b602082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b60006158a0601d83614087565b91506158ab8261586a565b602082019050919050565b600060208201905081810360008301526158cf81615893565b9050919050565b600081905092915050565b600081546158ee81614da4565b6158f881866158d6565b9450600182166000811461591357600181146159285761595b565b60ff198316865281151582028601935061595b565b615931856150d7565b60005b8381101561595357815481890152600182019150602081019050615934565b838801955050505b50505092915050565b600061596f8261407c565b61597981856158d6565b9350615989818560208601614098565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006159cb6005836158d6565b91506159d682615995565b600582019050919050565b60006159ed82856158e1565b91506159f98284615964565b9150615a04826159be565b91508190509392505050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b6000615a46601183614087565b9150615a5182615a10565b602082019050919050565b60006020820190508181036000830152615a7581615a39565b9050919050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b6000615ab2600d836158d6565b9150615abd82615a7c565b600d82019050919050565b6000615ad482846158e1565b9150615adf82615aa5565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b6000615b20602083614087565b9150615b2b82615aea565b602082019050919050565b60006020820190508181036000830152615b4f81615b13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615b9082613fdf565b9150615b9b83613fdf565b925082615bab57615baa615b56565b5b828204905092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000615bec602083614087565b9150615bf782615bb6565b602082019050919050565b60006020820190508181036000830152615c1b81615bdf565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b6000615c58601c83614087565b9150615c6382615c22565b602082019050919050565b60006020820190508181036000830152615c8781615c4b565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b6000615cc4601b83614087565b9150615ccf82615c8e565b602082019050919050565b60006020820190508181036000830152615cf381615cb7565b9050919050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b6000615d30601a83614087565b9150615d3b82615cfa565b602082019050919050565b60006020820190508181036000830152615d5f81615d23565b9050919050565b6000615d7182613fdf565b9150615d7c83613fdf565b925082615d8c57615d8b615b56565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000615dbe82615d97565b615dc88185615da2565b9350615dd8818560208601614098565b615de1816140c2565b840191505092915050565b6000608082019050615e01600083018761418d565b615e0e602083018661418d565b615e1b604083018561433a565b8181036060830152615e2d8184615db3565b905095945050505050565b600081519050615e4781613f86565b92915050565b600060208284031215615e6357615e62613f50565b5b6000615e7184828501615e38565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615eb0602083614087565b9150615ebb82615e7a565b602082019050919050565b60006020820190508181036000830152615edf81615ea3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615f1c601c83614087565b9150615f2782615ee6565b602082019050919050565b60006020820190508181036000830152615f4b81615f0f565b905091905056fea2646970667358221220315494d880bc04f9678d07ab0f3dd7095c2f9f71ddfcce5470c6add3c8a83e9864736f6c6343000812003368747470733a2f2f65676f6e617574732e696f2f6d6f6e73746572732f6d657461646174612f

Deployed Bytecode

0x60806040526004361061031d5760003560e01c80636a1a5be6116101ab578063a22cb465116100f7578063daaf379611610095578063f2fde38b1161006f578063f2fde38b14610b03578063f4107b3514610b2c578063f8b2cb4f14610b69578063ffad525714610ba657610324565b8063daaf379614610a72578063e8a3d48514610a9b578063e985e9c514610ac657610324565b8063bcc7d94a116100d1578063bcc7d94a146109dc578063c855102514610a07578063c87b56dd14610a1e578063c91c046214610a5b57610324565b8063a22cb46514610961578063a77f7c8c1461098a578063b88d4fde146109b357610324565b8063868ff4a2116101645780638da5cb5b1161013e5780638da5cb5b146108c457806395d89b41146108ef578063a035b1fe1461091a578063a0712d681461094557610324565b8063868ff4a2146108685780638742a2be1461088457806389e877a3146108ad57610324565b80636a1a5be61461076c5780636dc0f2ba1461078357806370a082311461079a578063715018a6146107d7578063758c0886146107ee5780638658c9351461082b57610324565b806338ed3ccd1161026a5780634ba5f3411161022357806359a7715a116101fd57806359a7715a146106c45780636024fd80146106ef5780636352211e1461070657806365216a411461074357610324565b80634ba5f3411461064557806355f804b31461067057806358d953841461069957610324565b806338ed3ccd1461055b5780633ccfd60b1461058657806342842e0e1461059d57806342966c68146105c657806346ea9ba0146105ef57806349a772b51461061a57610324565b8063150b7a02116102d757806325fd90f3116102b157806325fd90f3146104d95780632e56f71e146105045780633597d7f31461051b578063361fab251461053257610324565b8063150b7a021461044857806318160ddd1461048557806323b872dd146104b057610324565b80629207b11461032657806301ffc9a71461035157806305b0c8871461038e57806306fdde03146103b7578063081812fc146103e2578063095ea7b31461041f57610324565b3661032457005b005b34801561033257600080fd5b5061033b610bd1565b6040516103489190613f2b565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613fb2565b610be4565b6040516103859190613f2b565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190614015565b610d6d565b005b3480156103c357600080fd5b506103cc6111f0565b6040516103d9919061410c565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061412e565b611282565b604051610416919061419c565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906141e3565b611307565b005b34801561045457600080fd5b5061046f600480360381019061046a9190614288565b611410565b60405161047c919061431f565b60405180910390f35b34801561049157600080fd5b5061049a611425565b6040516104a79190614349565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190614364565b611456565b005b3480156104e557600080fd5b506104ee6114af565b6040516104fb9190613f2b565b60405180910390f35b34801561051057600080fd5b506105196114c2565b005b34801561052757600080fd5b5061053061155b565b005b34801561053e57600080fd5b506105596004803603810190610554919061412e565b6115f4565b005b34801561056757600080fd5b5061057061167a565b60405161057d9190614349565b60405180910390f35b34801561059257600080fd5b5061059b611680565b005b3480156105a957600080fd5b506105c460048036038101906105bf9190614364565b6117ba565b005b3480156105d257600080fd5b506105ed60048036038101906105e8919061412e565b6117da565b005b3480156105fb57600080fd5b5061060461182d565b6040516106119190614349565b60405180910390f35b34801561062657600080fd5b5061062f6118aa565b60405161063c9190614349565b60405180910390f35b34801561065157600080fd5b5061065a6118b0565b6040516106679190613f2b565b60405180910390f35b34801561067c57600080fd5b50610697600480360381019061069291906144e7565b6118c3565b005b3480156106a557600080fd5b506106ae611952565b6040516106bb9190613f2b565b60405180910390f35b3480156106d057600080fd5b506106d9611965565b6040516106e69190614349565b60405180910390f35b3480156106fb57600080fd5b5061070461196b565b005b34801561071257600080fd5b5061072d6004803603810190610728919061412e565b611a04565b60405161073a919061419c565b60405180910390f35b34801561074f57600080fd5b5061076a600480360381019061076591906146b6565b611ab5565b005b34801561077857600080fd5b50610781611c1c565b005b34801561078f57600080fd5b50610798611cb5565b005b3480156107a657600080fd5b506107c160048036038101906107bc919061472e565b611d4e565b6040516107ce9190614349565b60405180910390f35b3480156107e357600080fd5b506107ec611e05565b005b3480156107fa57600080fd5b506108156004803603810190610810919061412e565b611e8d565b6040516108229190614806565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061472e565b611eeb565b60405161085f9190614349565b60405180910390f35b610882600480360381019061087d919061412e565b611f03565b005b34801561089057600080fd5b506108ab60048036038101906108a69190614822565b6122ae565b005b3480156108b957600080fd5b506108c261264f565b005b3480156108d057600080fd5b506108d96126e8565b6040516108e6919061419c565b60405180910390f35b3480156108fb57600080fd5b50610904612711565b604051610911919061410c565b60405180910390f35b34801561092657600080fd5b5061092f6127a3565b60405161093c9190614349565b60405180910390f35b61095f600480360381019061095a919061412e565b6127a9565b005b34801561096d57600080fd5b506109886004803603810190610983919061488e565b612a0c565b005b34801561099657600080fd5b506109b160048036038101906109ac91906148ce565b612b77565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906149b8565b612c88565b005b3480156109e857600080fd5b506109f1612ce3565b6040516109fe9190614349565b60405180910390f35b348015610a1357600080fd5b50610a1c612ce9565b005b348015610a2a57600080fd5b50610a456004803603810190610a40919061412e565b612d82565b604051610a52919061410c565b60405180910390f35b348015610a6757600080fd5b50610a70612e04565b005b348015610a7e57600080fd5b50610a996004803603810190610a9491906141e3565b612e9d565b005b348015610aa757600080fd5b50610ab061300f565b604051610abd919061410c565b60405180910390f35b348015610ad257600080fd5b50610aed6004803603810190610ae89190614a3b565b613037565b604051610afa9190613f2b565b60405180910390f35b348015610b0f57600080fd5b50610b2a6004803603810190610b25919061472e565b6130cb565b005b348015610b3857600080fd5b50610b536004803603810190610b4e919061412e565b6131c2565b604051610b609190614aff565b60405180910390f35b348015610b7557600080fd5b50610b906004803603810190610b8b919061472e565b613220565b604051610b9d9190614349565b60405180910390f35b348015610bb257600080fd5b50610bbb61327b565b604051610bc89190614349565b60405180910390f35b600c60029054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610caf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d1757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d66575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600060149054906101000a900460ff1615610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60019054906101000a900460ff16610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90614bd2565b60405180910390fd5b610e2f613281565b73ffffffffffffffffffffffffffffffffffffffff16610e4e85611a04565b73ffffffffffffffffffffffffffffffffffffffff1614610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90614c3e565b60405180910390fd5b610eac613281565b73ffffffffffffffffffffffffffffffffffffffff16610ecb84611a04565b73ffffffffffffffffffffffffffffffffffffffff1614610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890614c3e565b60405180910390fd5b610f29613281565b73ffffffffffffffffffffffffffffffffffffffff16610f4883611a04565b73ffffffffffffffffffffffffffffffffffffffff1614610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9590614c3e565b60405180910390fd5b610fa6613281565b73ffffffffffffffffffffffffffffffffffffffff16610fc582611a04565b73ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290614c3e565b60405180910390fd5b610401841061105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690614caa565b60405180910390fd5b61040183106110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614caa565b60405180910390fd5b61040182106110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90614caa565b60405180910390fd5b610401811061112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290614caa565b60405180910390fd5b61113484613289565b61113d83613289565b61114682613289565b61114f81613289565b6010600081548092919061116290614cf9565b919050555060006104006010546111799190614d41565b905061118c611186613281565b826133b2565b604051806080016040528086815260200185815260200184815260200183815250600860008381526020019081526020016000209060046111ce929190613e6e565b505060008060146101000a81548160ff02191690831515021790555050505050565b6060600180546111ff90614da4565b80601f016020809104026020016040519081016040528092919081815260200182805461122b90614da4565b80156112785780601f1061124d57610100808354040283529160200191611278565b820191906000526020600020905b81548152906001019060200180831161125b57829003601f168201915b5050505050905090565b600061128d826133d0565b6112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614e21565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061131282611a04565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614e8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113c257506113c18133613037565b5b611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890614ef9565b60405180910390fd5b61140b838361343c565b505050565b600063150b7a0260e01b905095945050505050565b6000601254601154601054600f5461143d9190614d41565b6114479190614d41565b6114519190614f19565b905090565b61146033826134f5565b61149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690614f99565b60405180910390fd5b6114aa8383836135d3565b505050565b600c60009054906101000a900460ff1681565b6114ca613281565b73ffffffffffffffffffffffffffffffffffffffff166114e86126e8565b73ffffffffffffffffffffffffffffffffffffffff161461153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590615005565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b611563613281565b73ffffffffffffffffffffffffffffffffffffffff166115816126e8565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90615005565b60405180910390fd5b6000600c60036101000a81548160ff021916908315150217905550565b6115fc613281565b73ffffffffffffffffffffffffffffffffffffffff1661161a6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790615005565b60405180910390fd5b80600e8190555050565b60125481565b611688613281565b73ffffffffffffffffffffffffffffffffffffffff166116a66126e8565b73ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390615005565b60405180910390fd5b6000479050600061170b613281565b73ffffffffffffffffffffffffffffffffffffffff168260405161172e90615056565b60006040518083038185875af1925050503d806000811461176b576040519150601f19603f3d011682016040523d82523d6000602084013e611770565b606091505b505080915050806117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad906150b7565b60405180910390fd5b5050565b6117d583838360405180602001604052806000815250612c88565b505050565b6117e381611a04565b73ffffffffffffffffffffffffffffffffffffffff16611801613281565b73ffffffffffffffffffffffffffffffffffffffff161461182157600080fd5b61182a81613289565b50565b60008060009050600c60009054906101000a900460ff1615611859576001816118569190614d41565b90505b600c60019054906101000a900460ff161561187e5760028161187b9190614d41565b90505b600c60029054906101000a900460ff16156118a3576004816118a09190614d41565b90505b8091505090565b600f5481565b600c60019054906101000a900460ff1681565b6118cb613281565b73ffffffffffffffffffffffffffffffffffffffff166118e96126e8565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690615005565b60405180910390fd5b806003908161194e9190615283565b5050565b600c60039054906101000a900460ff1681565b600e5481565b611973613281565b73ffffffffffffffffffffffffffffffffffffffff166119916126e8565b73ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de90615005565b60405180910390fd5b6001600c60026101000a81548160ff021916908315150217905550565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa3906153a1565b60405180910390fd5b80915050919050565b611abd613281565b73ffffffffffffffffffffffffffffffffffffffff16611adb6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890615005565b60405180910390fd5b8051825114611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061540d565b60405180910390fd5b60005b8151811015611c175760005b828281518110611b9757611b9661542d565b5b6020026020010151811015611c0357611bd8848381518110611bbc57611bbb61542d565b5b60200260200101516001600f54611bd39190614d41565b6133b2565b600f6000815480929190611beb90614cf9565b91905055508080611bfb90614cf9565b915050611b84565b508080611c0f90614cf9565b915050611b78565b505050565b611c24613281565b73ffffffffffffffffffffffffffffffffffffffff16611c426126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90615005565b60405180910390fd5b6001600c60016101000a81548160ff021916908315150217905550565b611cbd613281565b73ffffffffffffffffffffffffffffffffffffffff16611cdb6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890615005565b60405180910390fd5b6000600c60026101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db5906154a8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e0d613281565b73ffffffffffffffffffffffffffffffffffffffff16611e2b6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890615005565b60405180910390fd5b611e8b600061382e565b565b611e95613eae565b60096000838152602001908152602001600020600880602002604051908101604052809291908260088015611edf576020028201915b815481526020019060010190808311611ecb575b50505050509050919050565b600b6020528060005260406000206000915090505481565b600060149054906101000a900460ff1615611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60039054906101000a900460ff16611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490615514565b60405180910390fd5b60011515600a6000611fcd613281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90615580565b60405180910390fd5b6006600b6000612065613281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826120ab9190614d41565b11156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906155ec565b60405180910390fd5b600e54600f54826120fd9190614d41565b111561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590615658565b60405180910390fd5b600f5481600f5461214f9190614d41565b1161218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906156c4565b60405180910390fd5b600d548161219d91906156e4565b34146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590615772565b60405180910390fd5b80600b60006121eb613281565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122349190614d41565b9250508190555060005b8181101561229057612265612251613281565b6001600f546122609190614d41565b6133b2565b600f600081548092919061227890614cf9565b9190505550808061228890614cf9565b91505061223e565b5060008060146101000a81548160ff02191690831515021790555050565b600060149054906101000a900460ff16156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60029054906101000a900460ff16612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614bd2565b60405180910390fd5b612370613281565b73ffffffffffffffffffffffffffffffffffffffff1661238f83611a04565b73ffffffffffffffffffffffffffffffffffffffff16146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90614c3e565b60405180910390fd5b6123ed613281565b73ffffffffffffffffffffffffffffffffffffffff1661240c82611a04565b73ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990614c3e565b60405180910390fd5b6104008211801561247457506107d082105b6124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614caa565b60405180910390fd5b610400811180156124c557506107d081105b612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90614caa565b60405180910390fd5b61250d82613289565b61251681613289565b6011600081548092919061252990614cf9565b919050555060006107d06011546125409190614d41565b905061255361254d613281565b826133b2565b60005b600881101561262f5760048110156125be5760086000858152602001908152602001600020816004811061258d5761258c61542d565b5b01546009600084815260200190815260200160002082600881106125b4576125b361542d565b5b018190555061261c565b600860008481526020019081526020016000206004826125de9190614f19565b600481106125ef576125ee61542d565b5b01546009600084815260200190815260200160002082600881106126165761261561542d565b5b01819055505b808061262790614cf9565b915050612556565b505060008060146101000a81548160ff0219169083151502179055505050565b612657613281565b73ffffffffffffffffffffffffffffffffffffffff166126756126e8565b73ffffffffffffffffffffffffffffffffffffffff16146126cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c290615005565b60405180910390fd5b6001600c60036101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461272090614da4565b80601f016020809104026020016040519081016040528092919081815260200182805461274c90614da4565b80156127995780601f1061276e57610100808354040283529160200191612799565b820191906000526020600020905b81548152906001019060200180831161277c57829003601f168201915b5050505050905090565b600d5481565b600060149054906101000a900460ff16156127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090614b66565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c60009054906101000a900460ff16612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a90614bd2565b60405180910390fd5b600a8111156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e906157de565b60405180910390fd5b600e54600f54826128b89190614d41565b11156128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090615658565b60405180910390fd5b600f5481600f5461290a9190614d41565b1161294a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612941906156c4565b60405180910390fd5b600d548161295891906156e4565b3414612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090615772565b60405180910390fd5b60005b818110156129ee576129c36129af613281565b6001600f546129be9190614d41565b6133b2565b600f60008154809291906129d690614cf9565b919050555080806129e690614cf9565b91505061299c565b5060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a719061584a565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b6b9190613f2b565b60405180910390a35050565b612b7f613281565b73ffffffffffffffffffffffffffffffffffffffff16612b9d6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea90615005565b60405180910390fd5b60005b8151811015612c84576001600a6000848481518110612c1857612c1761542d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612c7c90614cf9565b915050612bf6565b5050565b612c9233836134f5565b612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614f99565b60405180910390fd5b612cdd848484846138f2565b50505050565b60115481565b612cf1613281565b73ffffffffffffffffffffffffffffffffffffffff16612d0f6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90615005565b60405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b6060612d8d826133d0565b612dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc3906158b6565b60405180910390fd5b60606003612dd98461394e565b604051602001612dea9291906159e1565b604051602081830303815290604052905080915050919050565b612e0c613281565b73ffffffffffffffffffffffffffffffffffffffff16612e2a6126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790615005565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b612ea5613281565b73ffffffffffffffffffffffffffffffffffffffff16612ec36126e8565b73ffffffffffffffffffffffffffffffffffffffff1614612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090615005565b60405180910390fd5b600f5481600f54612f2a9190614d41565b11612f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f61906156c4565b60405180910390fd5b600e5481600f54612f7b9190614d41565b1115612fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb390615a5c565b60405180910390fd5b60005b8181101561300a57612fdf836001600f54612fda9190614d41565b6133b2565b600f6000815480929190612ff290614cf9565b9190505550808061300290614cf9565b915050612fbf565b505050565b606060036040516020016130239190615ac8565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6130d3613281565b73ffffffffffffffffffffffffffffffffffffffff166130f16126e8565b73ffffffffffffffffffffffffffffffffffffffff1614613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90615005565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90615b36565b60405180910390fd5b6131bf8161382e565b50565b6131ca613ed1565b60086000838152602001908152602001600020600480602002604051908101604052809291908260048015613214576020028201915b815481526020019060010190808311613200575b50505050509050919050565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132749190615b85565b9050919050565b60105481565b600033905090565b600061329482611a04565b90506132a281600084613aae565b6132ad60008361343c565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132fd9190614f19565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556012600081548092919061334d90614cf9565b919050555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6133cc828260405180602001604052806000815250613ab3565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134af83611a04565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000613500826133d0565b61353f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353690615c02565b60405180910390fd5b600061354a83611a04565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135b957508373ffffffffffffffffffffffffffffffffffffffff166135a184611282565b73ffffffffffffffffffffffffffffffffffffffff16145b806135ca57506135c98185613037565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166135f382611a04565b73ffffffffffffffffffffffffffffffffffffffff1614613649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364090615c6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136af90615cda565b60405180910390fd5b6136c3838383613aae565b6136ce60008261343c565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461371e9190614f19565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137759190614d41565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6138fd8484846135d3565b61390984848484613b0e565b613948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393f90615d46565b60405180910390fd5b50505050565b606060008203613995576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613aa9565b600082905060005b600082146139c75780806139b090614cf9565b915050600a826139c09190615b85565b915061399d565b60008167ffffffffffffffff8111156139e3576139e26143bc565b5b6040519080825280601f01601f191660200182016040528015613a155781602001600182028036833780820191505090505b5090505b60008514613aa257600182613a2e9190614f19565b9150600a85613a3d9190615d66565b6030613a499190614d41565b60f81b818381518110613a5f57613a5e61542d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613a9b9190615b85565b9450613a19565b8093505050505b919050565b505050565b613abd8383613c8e565b613aca6000848484613b0e565b613b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0090615d46565b60405180910390fd5b505050565b6000613b2f8473ffffffffffffffffffffffffffffffffffffffff16613e5b565b15613c81578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613b739493929190615dec565b6020604051808303816000875af1925050508015613baf57506040513d601f19601f82011682018060405250810190613bac9190615e4d565b60015b613c31573d8060008114613bdf576040519150601f19603f3d011682016040523d82523d6000602084013e613be4565b606091505b506000815103613c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2090615d46565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c86565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf490615ec6565b60405180910390fd5b613d06816133d0565b15613d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3d90615f32565b60405180910390fd5b613d5260008383613aae565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613da29190614d41565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8260048101928215613e9d579160200282015b82811115613e9c578251825591602001919060010190613e81565b5b509050613eaa9190613ef3565b5090565b604051806101000160405280600890602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b5b80821115613f0c576000816000905550600101613ef4565b5090565b60008115159050919050565b613f2581613f10565b82525050565b6000602082019050613f406000830184613f1c565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f8f81613f5a565b8114613f9a57600080fd5b50565b600081359050613fac81613f86565b92915050565b600060208284031215613fc857613fc7613f50565b5b6000613fd684828501613f9d565b91505092915050565b6000819050919050565b613ff281613fdf565b8114613ffd57600080fd5b50565b60008135905061400f81613fe9565b92915050565b6000806000806080858703121561402f5761402e613f50565b5b600061403d87828801614000565b945050602061404e87828801614000565b935050604061405f87828801614000565b925050606061407087828801614000565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156140b657808201518184015260208101905061409b565b60008484015250505050565b6000601f19601f8301169050919050565b60006140de8261407c565b6140e88185614087565b93506140f8818560208601614098565b614101816140c2565b840191505092915050565b6000602082019050818103600083015261412681846140d3565b905092915050565b60006020828403121561414457614143613f50565b5b600061415284828501614000565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141868261415b565b9050919050565b6141968161417b565b82525050565b60006020820190506141b1600083018461418d565b92915050565b6141c08161417b565b81146141cb57600080fd5b50565b6000813590506141dd816141b7565b92915050565b600080604083850312156141fa576141f9613f50565b5b6000614208858286016141ce565b925050602061421985828601614000565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261424857614247614223565b5b8235905067ffffffffffffffff81111561426557614264614228565b5b6020830191508360018202830111156142815761428061422d565b5b9250929050565b6000806000806000608086880312156142a4576142a3613f50565b5b60006142b2888289016141ce565b95505060206142c3888289016141ce565b94505060406142d488828901614000565b935050606086013567ffffffffffffffff8111156142f5576142f4613f55565b5b61430188828901614232565b92509250509295509295909350565b61431981613f5a565b82525050565b60006020820190506143346000830184614310565b92915050565b61434381613fdf565b82525050565b600060208201905061435e600083018461433a565b92915050565b60008060006060848603121561437d5761437c613f50565b5b600061438b868287016141ce565b935050602061439c868287016141ce565b92505060406143ad86828701614000565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6143f4826140c2565b810181811067ffffffffffffffff82111715614413576144126143bc565b5b80604052505050565b6000614426613f46565b905061443282826143eb565b919050565b600067ffffffffffffffff821115614452576144516143bc565b5b61445b826140c2565b9050602081019050919050565b82818337600083830152505050565b600061448a61448584614437565b61441c565b9050828152602081018484840111156144a6576144a56143b7565b5b6144b1848285614468565b509392505050565b600082601f8301126144ce576144cd614223565b5b81356144de848260208601614477565b91505092915050565b6000602082840312156144fd576144fc613f50565b5b600082013567ffffffffffffffff81111561451b5761451a613f55565b5b614527848285016144b9565b91505092915050565b600067ffffffffffffffff82111561454b5761454a6143bc565b5b602082029050602081019050919050565b600061456f61456a84614530565b61441c565b905080838252602082019050602084028301858111156145925761459161422d565b5b835b818110156145bb57806145a788826141ce565b845260208401935050602081019050614594565b5050509392505050565b600082601f8301126145da576145d9614223565b5b81356145ea84826020860161455c565b91505092915050565b600067ffffffffffffffff82111561460e5761460d6143bc565b5b602082029050602081019050919050565b600061463261462d846145f3565b61441c565b905080838252602082019050602084028301858111156146555761465461422d565b5b835b8181101561467e578061466a8882614000565b845260208401935050602081019050614657565b5050509392505050565b600082601f83011261469d5761469c614223565b5b81356146ad84826020860161461f565b91505092915050565b600080604083850312156146cd576146cc613f50565b5b600083013567ffffffffffffffff8111156146eb576146ea613f55565b5b6146f7858286016145c5565b925050602083013567ffffffffffffffff81111561471857614717613f55565b5b61472485828601614688565b9150509250929050565b60006020828403121561474457614743613f50565b5b6000614752848285016141ce565b91505092915050565b600060089050919050565b600081905092915050565b6000819050919050565b61478481613fdf565b82525050565b6000614796838361477b565b60208301905092915050565b6000602082019050919050565b6147b88161475b565b6147c28184614766565b92506147cd82614771565b8060005b838110156147fe5781516147e5878261478a565b96506147f0836147a2565b9250506001810190506147d1565b505050505050565b60006101008201905061481c60008301846147af565b92915050565b6000806040838503121561483957614838613f50565b5b600061484785828601614000565b925050602061485885828601614000565b9150509250929050565b61486b81613f10565b811461487657600080fd5b50565b60008135905061488881614862565b92915050565b600080604083850312156148a5576148a4613f50565b5b60006148b3858286016141ce565b92505060206148c485828601614879565b9150509250929050565b6000602082840312156148e4576148e3613f50565b5b600082013567ffffffffffffffff81111561490257614901613f55565b5b61490e848285016145c5565b91505092915050565b600067ffffffffffffffff821115614932576149316143bc565b5b61493b826140c2565b9050602081019050919050565b600061495b61495684614917565b61441c565b905082815260208101848484011115614977576149766143b7565b5b614982848285614468565b509392505050565b600082601f83011261499f5761499e614223565b5b81356149af848260208601614948565b91505092915050565b600080600080608085870312156149d2576149d1613f50565b5b60006149e0878288016141ce565b94505060206149f1878288016141ce565b9350506040614a0287828801614000565b925050606085013567ffffffffffffffff811115614a2357614a22613f55565b5b614a2f8782880161498a565b91505092959194509250565b60008060408385031215614a5257614a51613f50565b5b6000614a60858286016141ce565b9250506020614a71858286016141ce565b9150509250929050565b600060049050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b614ab181614a7b565b614abb8184614a86565b9250614ac682614a91565b8060005b83811015614af7578151614ade878261478a565b9650614ae983614a9b565b925050600181019050614aca565b505050505050565b6000608082019050614b146000830184614aa8565b92915050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b6000614b50601f83614087565b9150614b5b82614b1a565b602082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f4e6f74206f70656e20746f20746865207075626c696300000000000000000000600082015250565b6000614bbc601683614087565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f796f7520646f6e2774206f776e20746861740000000000000000000000000000600082015250565b6000614c28601283614087565b9150614c3382614bf2565b602082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f57726f6e67205479706500000000000000000000000000000000000000000000600082015250565b6000614c94600a83614087565b9150614c9f82614c5e565b602082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0482613fdf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d3657614d35614cca565b5b600182019050919050565b6000614d4c82613fdf565b9150614d5783613fdf565b9250828201905080821115614d6f57614d6e614cca565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614dbc57607f821691505b602082108103614dcf57614dce614d75565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b6000614e0b602083614087565b9150614e1682614dd5565b602082019050919050565b60006020820190508181036000830152614e3a81614dfe565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b6000614e77601e83614087565b9150614e8282614e41565b602082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b6000614ee3601f83614087565b9150614eee82614ead565b602082019050919050565b60006020820190508181036000830152614f1281614ed6565b9050919050565b6000614f2482613fdf565b9150614f2f83613fdf565b9250828203905081811115614f4757614f46614cca565b5b92915050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b6000614f83601c83614087565b9150614f8e82614f4d565b602082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fef602083614087565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b600081905092915050565b50565b6000615040600083615025565b915061504b82615030565b600082019050919050565b600061506182615033565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b60006150a1601883614087565b91506150ac8261506b565b602082019050919050565b600060208201905081810360008301526150d081615094565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826150fc565b61514386836150fc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061518061517b61517684613fdf565b61515b565b613fdf565b9050919050565b6000819050919050565b61519a83615165565b6151ae6151a682615187565b848454615109565b825550505050565b600090565b6151c36151b6565b6151ce818484615191565b505050565b5b818110156151f2576151e76000826151bb565b6001810190506151d4565b5050565b601f82111561523757615208816150d7565b615211846150ec565b81016020851015615220578190505b61523461522c856150ec565b8301826151d3565b50505b505050565b600082821c905092915050565b600061525a6000198460080261523c565b1980831691505092915050565b60006152738383615249565b9150826002028217905092915050565b61528c8261407c565b67ffffffffffffffff8111156152a5576152a46143bc565b5b6152af8254614da4565b6152ba8282856151f6565b600060209050601f8311600181146152ed57600084156152db578287015190505b6152e58582615267565b86555061534d565b601f1984166152fb866150d7565b60005b82811015615323578489015182556001820191506020850194506020810190506152fe565b86831015615340578489015161533c601f891682615249565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b600061538b601e83614087565b915061539682615355565b602082019050919050565b600060208201905081810360008301526153ba8161537e565b9050919050565b7f6172726179206c656e67746873206d757374206d617463680000000000000000600082015250565b60006153f7601883614087565b9150615402826153c1565b602082019050919050565b60006020820190508181036000830152615426816153ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000615492602083614087565b915061549d8261545c565b602082019050919050565b600060208201905081810360008301526154c181615485565b9050919050565b7f57686974656c697374206e6f74206f70656e0000000000000000000000000000600082015250565b60006154fe601283614087565b9150615509826154c8565b602082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f4e6f742057686974656c69737465640000000000000000000000000000000000600082015250565b600061556a600f83614087565b915061557582615534565b602082019050919050565b600060208201905081810360008301526155998161555d565b9050919050565b7f4f766572206d61782077686974656c697374206d696e74730000000000000000600082015250565b60006155d6601883614087565b91506155e1826155a0565b602082019050919050565b60006020820190508181036000830152615605816155c9565b9050919050565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b6000615642600883614087565b915061564d8261560c565b602082019050919050565b6000602082019050818103600083015261567181615635565b9050919050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b60006156ae601383614087565b91506156b982615678565b602082019050919050565b600060208201905081810360008301526156dd816156a1565b9050919050565b60006156ef82613fdf565b91506156fa83613fdf565b925082820261570881613fdf565b9150828204841483151761571f5761571e614cca565b5b5092915050565b7f57726f6e6720616d6f756e742073656e74000000000000000000000000000000600082015250565b600061575c601183614087565b915061576782615726565b602082019050919050565b6000602082019050818103600083015261578b8161574f565b9050919050565b7f313020617420612074696d65206f72206c6573732c20706c6561736500000000600082015250565b60006157c8601c83614087565b91506157d382615792565b602082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615834601983614087565b915061583f826157fe565b602082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b60006158a0601d83614087565b91506158ab8261586a565b602082019050919050565b600060208201905081810360008301526158cf81615893565b9050919050565b600081905092915050565b600081546158ee81614da4565b6158f881866158d6565b9450600182166000811461591357600181146159285761595b565b60ff198316865281151582028601935061595b565b615931856150d7565b60005b8381101561595357815481890152600182019150602081019050615934565b838801955050505b50505092915050565b600061596f8261407c565b61597981856158d6565b9350615989818560208601614098565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006159cb6005836158d6565b91506159d682615995565b600582019050919050565b60006159ed82856158e1565b91506159f98284615964565b9150615a04826159be565b91508190509392505050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b6000615a46601183614087565b9150615a5182615a10565b602082019050919050565b60006020820190508181036000830152615a7581615a39565b9050919050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b6000615ab2600d836158d6565b9150615abd82615a7c565b600d82019050919050565b6000615ad482846158e1565b9150615adf82615aa5565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b6000615b20602083614087565b9150615b2b82615aea565b602082019050919050565b60006020820190508181036000830152615b4f81615b13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615b9082613fdf565b9150615b9b83613fdf565b925082615bab57615baa615b56565b5b828204905092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000615bec602083614087565b9150615bf782615bb6565b602082019050919050565b60006020820190508181036000830152615c1b81615bdf565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b6000615c58601c83614087565b9150615c6382615c22565b602082019050919050565b60006020820190508181036000830152615c8781615c4b565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b6000615cc4601b83614087565b9150615ccf82615c8e565b602082019050919050565b60006020820190508181036000830152615cf381615cb7565b9050919050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b6000615d30601a83614087565b9150615d3b82615cfa565b602082019050919050565b60006020820190508181036000830152615d5f81615d23565b9050919050565b6000615d7182613fdf565b9150615d7c83613fdf565b925082615d8c57615d8b615b56565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000615dbe82615d97565b615dc88185615da2565b9350615dd8818560208601614098565b615de1816140c2565b840191505092915050565b6000608082019050615e01600083018761418d565b615e0e602083018661418d565b615e1b604083018561433a565b8181036060830152615e2d8184615db3565b905095945050505050565b600081519050615e4781613f86565b92915050565b600060208284031215615e6357615e62613f50565b5b6000615e7184828501615e38565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615eb0602083614087565b9150615ebb82615e7a565b602082019050919050565b60006020820190508181036000830152615edf81615ea3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615f1c601c83614087565b9150615f2782615ee6565b602082019050919050565b60006020820190508181036000830152615f4b81615f0f565b905091905056fea2646970667358221220315494d880bc04f9678d07ab0f3dd7095c2f9f71ddfcce5470c6add3c8a83e9864736f6c63430008120033

Deployed Bytecode Sourcemap

16576:21623:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17622:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18324:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21103:1080;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37250:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26868:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26430:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36194:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25378:167;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27738:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17564:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24735:80;;;;;;;;;;;;;:::i;:::-;;24915:83;;;;;;;;;;;;;:::i;:::-;;24534:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17842:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18775:251;;;;;;;;;;;;;:::i;:::-;;28123:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23283:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23624:298;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17738:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17593:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24429:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17651:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17707:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25199:78;;;;;;;;;;;;;:::i;:::-;;26140:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19427:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25010:81;;;;;;;;;;;;;:::i;:::-;;25289;;;;;;;;;;;;;:::i;:::-;;25880:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:94;;;;;;;;;;;;;:::i;:::-;;24281:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17482:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20430:665;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22195:1021;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24823:80;;;;;;;;;;;;;:::i;:::-;;14114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37391:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17680:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19892:530;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27147:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23930:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28379:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17805:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25103:84;;;;;;;;;;;;;:::i;:::-;;37566:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24646:77;;;;;;;;;;;;;:::i;:::-;;19041:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37890:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27507:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24133:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25557:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17772:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17622:22;;;;;;;;;;;;;:::o;18324:369::-;18409:4;18449:25;18434:40;;;:11;:40;;;;:109;;;;18510:33;18495:48;;;:11;:48;;;;18434:109;:170;;;;18579:25;18564:40;;;:11;:40;;;;18434:170;:251;;;;18640:45;;;18625:60;;;:11;:60;;;;18434:251;18426:259;;18324:369;;;:::o;21103:1080::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;21212:10:::1;;;;;;;;;;;21204:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;21324:12;:10;:12::i;:::-;21309:27;;:11;21317:2;21309:7;:11::i;:::-;:27;;;21301:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21393:12;:10;:12::i;:::-;21378:27;;:11;21386:2;21378:7;:11::i;:::-;:27;;;21370:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21462:12;:10;:12::i;:::-;21447:27;;:11;21455:2;21447:7;:11::i;:::-;:27;;;21439:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21531:12;:10;:12::i;:::-;21516:27;;:11;21524:2;21516:7;:11::i;:::-;:27;;;21508:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21640:4;21635:2;:9;21627:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;21683:4;21678:2;:9;21670:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;21726:4;21721:2;:9;21713:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;21769:4;21764:2;:9;21756:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;21830:9;21836:2;21830:5;:9::i;:::-;21850;21856:2;21850:5;:9::i;:::-;21870;21876:2;21870:5;:9::i;:::-;21890;21896:2;21890:5;:9::i;:::-;21944:11;;:14;;;;;;;;;:::i;:::-;;;;;;21969:15;22001:4;21987:11;;:18;;;;:::i;:::-;21969:36;;22016:32;22026:12;:10;:12::i;:::-;22040:7;22016:9;:32::i;:::-;22128:47;;;;;;;;22160:2;22128:47;;;;22164:2;22128:47;;;;22168:2;22128:47;;;;22172:2;22128:47;;::::0;:19:::1;:28;22148:7;22128:28;;;;;;;;;;;:47;;;;;;;:::i;:::-;;21193:990;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;21103:1080;;;;:::o;37250:84::-;37289:13;37321:5;37314:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37250:84;:::o;26868:207::-;26944:7;26972:16;26980:7;26972;:16::i;:::-;26964:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27043:15;:24;27059:7;27043:24;;;;;;;;;;;;;;;;;;;;;27036:31;;26868:207;;;:::o;26430:372::-;26511:13;26527:16;26535:7;26527;:16::i;:::-;26511:32;;26568:5;26562:11;;:2;:11;;;26554:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26657:5;26643:19;;:10;:19;;;:58;;;;26666:35;26683:5;26690:10;26666:16;:35::i;:::-;26643:58;26621:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;26773:21;26782:2;26786:7;26773:8;:21::i;:::-;26500:302;26430:372;;:::o;36194:215::-;36311:6;36371:30;;;36364:37;;36194:215;;;;;;;:::o;25378:167::-;25424:7;25492:12;;25480:9;;25466:11;;25451:12;;:26;;;;:::i;:::-;:38;;;;:::i;:::-;:53;;;;:::i;:::-;25444:60;;25378:167;:::o;27738:314::-;27933:39;27952:10;27964:7;27933:18;:39::i;:::-;27925:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28016:28;28026:4;28032:2;28036:7;28016:9;:28::i;:::-;27738:314;;;:::o;17564:22::-;;;;;;;;;;;;;:::o;24735:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24802:5:::1;24789:10;;:18;;;;;;;;;;;;;;;;;;24735:80::o:0;24915:83::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24985:5:::1;24974:8;;:16;;;;;;;;;;;;;;;;;;24915:83::o:0;24534:100::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24618:8:::1;24606:9;:20;;;;24534:100:::0;:::o;17842:27::-;;;;:::o;18775:251::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18825:22:::1;18850:21;18825:46;;18882:12;18919;:10;:12::i;:::-;:17;;18944:14;18919:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18905:58;;;;;18982:7;18974:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18814:212;;18775:251::o:0;28123:185::-;28261:39;28278:4;28284:2;28288:7;28261:39;;;;;;;;;;;;:16;:39::i;:::-;28123:185;;;:::o;23283:125::-;23358:16;23366:7;23358;:16::i;:::-;23342:32;;:12;:10;:12::i;:::-;:32;;;23334:41;;;;;;23386:14;23392:7;23386:5;:14::i;:::-;23283:125;:::o;23624:298::-;23673:7;23692:13;23708:1;23692:17;;23724:10;;;;;;;;;;;23720:50;;;23757:1;23750:8;;;;;:::i;:::-;;;23720:50;23784:10;;;;;;;;;;;23780:50;;;23817:1;23810:8;;;;;:::i;:::-;;;23780:50;23844:10;;;;;;;;;;;23840:50;;;23877:1;23870:8;;;;;:::i;:::-;;;23840:50;23909:5;23902:12;;;23624:298;:::o;17738:27::-;;;;:::o;17593:22::-;;;;;;;;;;;;;:::o;24429:97::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24512:6:::1;24501:8;:17;;;;;;:::i;:::-;;24429:97:::0;:::o;17651:20::-;;;;;;;;;;;;;:::o;17707:24::-;;;;:::o;25199:78::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25265:4:::1;25252:10;;:17;;;;;;;;;;;;;;;;;;25199:78::o:0;26140:228::-;26212:7;26232:13;26248:7;:16;26256:7;26248:16;;;;;;;;;;;;;;;;;;;;;26232:32;;26300:1;26283:19;;:5;:19;;;26275:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26355:5;26348:12;;;26140:228;;;:::o;19427:453::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19610:4:::1;:11;19596:3;:10;:25;19587:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19667:9;19663:210;19686:4;:11;19682:1;:15;19663:210;;;19723:9;19719:143;19742:4;19747:1;19742:7;;;;;;;;:::i;:::-;;;;;;;;19738:1;:11;19719:143;;;19775:37;19786:3;19790:1;19786:6;;;;;;;;:::i;:::-;;;;;;;;19809:1;19794:12;;:16;;;;:::i;:::-;19775:9;:37::i;:::-;19831:12;;:15;;;;;;;;;:::i;:::-;;;;;;19751:3;;;;;:::i;:::-;;;;19719:143;;;;19699:3;;;;;:::i;:::-;;;;19663:210;;;;19427:453:::0;;:::o;25010:81::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25079:4:::1;25066:10;;:17;;;;;;;;;;;;;;;;;;25010:81::o:0;25289:::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25357:5:::1;25344:10;;:18;;;;;;;;;;;;;;;;;;25289:81::o:0;25880:198::-;25952:7;25997:1;25980:19;;:5;:19;;;25972:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26054:9;:16;26064:5;26054:16;;;;;;;;;;;;;;;;26047:23;;25880:198;;;:::o;14765:94::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14830:21:::1;14848:1;14830:9;:21::i;:::-;14765:94::o:0;24281:136::-;24347:17;;:::i;:::-;24383;:26;24401:7;24383:26;;;;;;;;;;;24376:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24281:136;;;:::o;17482:42::-;;;;;;;;;;;;;;;;;:::o;20430:665::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;20514:8:::1;;;;;;;;;;;20506:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;20592:4;20564:32;;:10;:24;20575:12;:10;:12::i;:::-;20564:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;20556:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20667:1;20642:7;:21;20650:12;:10;:12::i;:::-;20642:21;;;;;;;;;;;;;;;;20636:3;:27;;;;:::i;:::-;:32;;20627:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20738:9;;20722:12;;20716:3;:18;;;;:::i;:::-;:31;;20708:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20802:12;;20795:3;20780:12;;:18;;;;:::i;:::-;20779:35;20771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20876:5;;20870:3;:11;;;;:::i;:::-;20857:9;:24;20849:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20941:3;20916:7;:21;20924:12;:10;:12::i;:::-;20916:21;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;20961:9;20957:131;20980:3;20976:1;:7;20957:131;;;21005:41;21015:12;:10;:12::i;:::-;21044:1;21029:12;;:16;;;;:::i;:::-;21005:9;:41::i;:::-;21061:12;;:15;;;;;;;;;:::i;:::-;;;;;;20985:3;;;;;:::i;:::-;;;;20957:131;;;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;20430:665;:::o;22195:1021::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;22285:10:::1;;;;;;;;;;;22277:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22387:12;:10;:12::i;:::-;22372:27;;:11;22380:2;22372:7;:11::i;:::-;:27;;;22364:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22456:12;:10;:12::i;:::-;22441:27;;:11;22449:2;22441:7;:11::i;:::-;:27;;;22433:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22551:4;22546:2;:9;22545:24;;;;;22564:4;22559:2;:9;22545:24;22536:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22610:4;22605:2;:9;22604:24;;;;;22623:4;22618:2;:9;22604:24;22595:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22685:9;22691:2;22685:5;:9::i;:::-;22705;22711:2;22705:5;:9::i;:::-;22764;;:12;;;;;;;;;:::i;:::-;;;;;;22787:15;22817:4;22805:9;;:16;;;;:::i;:::-;22787:34;;22832:32;22842:12;:10;:12::i;:::-;22856:7;22832:9;:32::i;:::-;22949:9;22944:255;22964:1;22960;:5;22944:255;;;22992:1;22990;:3;22986:202;;;23045:19;:23;23065:2;23045:23;;;;;;;;;;;23069:1;23045:26;;;;;;;:::i;:::-;;;;23013:17;:26;23031:7;23013:26;;;;;;;;;;;23040:1;23013:29;;;;;;;:::i;:::-;;;:58;;;;22986:202;;;23144:19;:23;23164:2;23144:23;;;;;;;;;;;23170:1;23168;:3;;;;:::i;:::-;23144:28;;;;;;;:::i;:::-;;;;23112:17;:26;23130:7;23112:26;;;;;;;;;;;23139:1;23112:29;;;;;;;:::i;:::-;;;:60;;;;22986:202;22967:3;;;;;:::i;:::-;;;;22944:255;;;;22266:950;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;22195:1021;;:::o;24823:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24891:4:::1;24880:8;;:15;;;;;;;;;;;;;;;;;;24823:80::o:0;14114:87::-;14160:7;14187:6;;;;;;;;;;;14180:13;;14114:87;:::o;37391:88::-;37432:13;37464:7;37457:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37391:88;:::o;17680:20::-;;;;:::o;19892:530::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;19967:10:::1;;;;;;;;;;;19959:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;20030:2;20023:3;:9;;20015:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;20106:9;;20090:12;;20084:3;:18;;;;:::i;:::-;:31;;20076:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20170:12;;20163:3;20148:12;;:18;;;;:::i;:::-;20147:35;20139:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20244:5;;20238:3;:11;;;;:::i;:::-;20225:9;:24;20217:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20288:9;20284:131;20307:3;20303:1;:7;20284:131;;;20332:41;20342:12;:10;:12::i;:::-;20371:1;20356:12;;:16;;;;:::i;:::-;20332:9;:41::i;:::-;20388:12;;:15;;;;;;;;;:::i;:::-;;;;;;20312:3;;;;;:::i;:::-;;;;20284:131;;;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;19892:530;:::o;27147:289::-;27262:10;27250:22;;:8;:22;;;27242:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27358:8;27315:18;:30;27334:10;27315:30;;;;;;;;;;;;;;;:40;27346:8;27315:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;27409:8;27382:46;;27397:10;27382:46;;;27419:8;27382:46;;;;;;:::i;:::-;;;;;;;;27147:289;;:::o;23930:195::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24017:9:::1;24013:105;24034:11;:18;24030:1;:22;24013:105;;;24102:4;24073:10;:26;24084:11;24096:1;24084:14;;;;;;;;:::i;:::-;;;;;;;;24073:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24054:3;;;;;:::i;:::-;;;;24013:105;;;;23930:195:::0;:::o;28379:305::-;28554:39;28573:10;28585:7;28554:18;:39::i;:::-;28546:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28637:39;28651:4;28657:2;28661:7;28670:5;28637:13;:39::i;:::-;28379:305;;;;:::o;17805:24::-;;;;:::o;25103:84::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25174:5:::1;25161:10;;:18;;;;;;;;;;;;;;;;;;25103:84::o:0;37566:312::-;37624:13;37657:16;37665:7;37657;:16::i;:::-;37649:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37718:22;37796:8;37806:17;37815:7;37806:8;:17::i;:::-;37779:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37761:73;;37862:8;37855:15;;;37566:312;;;:::o;24646:77::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24711:4:::1;24698:10;;:17;;;;;;;;;;;;;;;;;;24646:77::o:0;19041:374::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19153:12:::1;;19145:4;19130:12;;:19;;;;:::i;:::-;19129:36;19121:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19233:9;;19224:4;19209:12;;:19;;;;:::i;:::-;19208:34;;19200:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19289:9;19285:123;19308:4;19304:1;:8;19285:123;;;19334:32;19344:3;19364:1;19349:12;;:16;;;;:::i;:::-;19334:9;:32::i;:::-;19381:12;;:15;;;;;;;;;:::i;:::-;;;;;;19314:3;;;;;:::i;:::-;;;;19285:123;;;;19041:374:::0;;:::o;37890:139::-;37934:13;37995:8;37978:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37964:57;;37890:139;:::o;27507:164::-;27604:4;27628:18;:25;27647:5;27628:25;;;;;;;;;;;;;;;:35;27654:8;27628:35;;;;;;;;;;;;;;;;;;;;;;;;;27621:42;;27507:164;;;;:::o;15014:186::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15123:1:::1;15103:22;;:8;:22;;::::0;15095:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15173:19;15183:8;15173:9;:19::i;:::-;15014:186:::0;:::o;24133:140::-;24201:17;;:::i;:::-;24237:19;:28;24257:7;24237:28;;;;;;;;;;;24230:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24133:140;;;:::o;25557:259::-;25622:7;25764:6;25737:9;:23;25747:12;25737:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;25730:41;;25557:259;;;:::o;17772:26::-;;;;:::o;13497:98::-;13550:7;13577:10;13570:17;;13497:98;:::o;32716:379::-;32776:13;32792:16;32800:7;32792;:16::i;:::-;32776:32;;32821:48;32842:5;32857:1;32861:7;32821:20;:48::i;:::-;32910:29;32927:1;32931:7;32910:8;:29::i;:::-;32972:1;32952:9;:16;32962:5;32952:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32991:7;:16;32999:7;32991:16;;;;;;;;;;;;32984:23;;;;;;;;;;;33018:12;;:15;;;;;;;;;:::i;:::-;;;;;;33079:7;33075:1;33051:36;;33060:5;33051:36;;;;;;;;;;;;32765:330;32716:379;:::o;31135:110::-;31211:26;31221:2;31225:7;31211:26;;;;;;;;;;;;:9;:26::i;:::-;31135:110;;:::o;30170:127::-;30235:4;30287:1;30259:30;;:7;:16;30267:7;30259:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30252:37;;30170:127;;;:::o;34097:167::-;34199:2;34172:15;:24;34188:7;34172:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34248:7;34244:2;34217:39;;34226:16;34234:7;34226;:16::i;:::-;34217:39;;;;;;;;;;;;34097:167;;:::o;30464:329::-;30557:4;30582:16;30590:7;30582;:16::i;:::-;30574:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30646:13;30662:16;30670:7;30662;:16::i;:::-;30646:32;;30708:5;30697:16;;:7;:16;;;:51;;;;30741:7;30717:31;;:20;30729:7;30717:11;:20::i;:::-;:31;;;30697:51;:87;;;;30752:32;30769:5;30776:7;30752:16;:32::i;:::-;30697:87;30689:96;;;30464:329;;;;:::o;33432:547::-;33584:4;33564:24;;:16;33572:7;33564;:16::i;:::-;:24;;;33556:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33654:1;33640:16;;:2;:16;;;33632:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33699:39;33720:4;33726:2;33730:7;33699:20;:39::i;:::-;33803:29;33820:1;33824:7;33803:8;:29::i;:::-;33864:1;33845:9;:15;33855:4;33845:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33893:1;33876:9;:13;33886:2;33876:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33924:2;33905:7;:16;33913:7;33905:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33963:7;33959:2;33944:27;;33953:4;33944:27;;;;;;;;;;;;33432:547;;;:::o;15208:173::-;15264:16;15283:6;;;;;;;;;;;15264:25;;15309:8;15300:6;;:17;;;;;;;;;;;;;;;;;;15364:8;15333:40;;15354:8;15333:40;;;;;;;;;;;;15253:128;15208:173;:::o;29566:291::-;29723:28;29733:4;29739:2;29743:7;29723:9;:28::i;:::-;29770:48;29793:4;29799:2;29803:7;29812:5;29770:22;:48::i;:::-;29762:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;29566:291;;;;:::o;15424:532::-;15480:13;15519:1;15510:5;:10;15506:53;;15537:10;;;;;;;;;;;;;;;;;;;;;15506:53;15569:12;15584:5;15569:20;;15600:14;15625:78;15640:1;15632:4;:9;15625:78;;15658:8;;;;;:::i;:::-;;;;15689:2;15681:10;;;;;:::i;:::-;;;15625:78;;;15713:19;15745:6;15735:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15713:39;;15763:154;15779:1;15770:5;:10;15763:154;;15807:1;15797:11;;;;;:::i;:::-;;;15874:2;15866:5;:10;;;;:::i;:::-;15853:2;:24;;;;:::i;:::-;15840:39;;15823:6;15830;15823:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15903:2;15894:11;;;;;:::i;:::-;;;15763:154;;;15941:6;15927:21;;;;;15424:532;;;;:::o;36981:126::-;;;;:::o;31472:297::-;31602:18;31608:2;31612:7;31602:5;:18::i;:::-;31653:54;31684:1;31688:2;31692:7;31701:5;31653:22;:54::i;:::-;31631:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;31472:297;;;:::o;34829:777::-;34984:4;35005:15;:2;:13;;;:15::i;:::-;35001:598;;;35057:2;35041:36;;;35078:10;35090:4;35096:7;35105:5;35041:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35037:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35302:1;35285:6;:13;:18;35281:248;;35328:36;;;;;;;;;;:::i;:::-;;;;;;;;35281:248;35479:6;35473:13;35464:6;35460:2;35456:15;35449:38;35037:507;35172:45;;;35162:55;;;:6;:55;;;;35155:62;;;;;35001:598;35583:4;35576:11;;34829:777;;;;;;;:::o;32105:382::-;32199:1;32185:16;;:2;:16;;;32177:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32258:16;32266:7;32258;:16::i;:::-;32257:17;32249:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32320:45;32349:1;32353:2;32357:7;32320:20;:45::i;:::-;32395:1;32378:9;:13;32388:2;32378:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32426:2;32407:7;:16;32415:7;32407:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32471:7;32467:2;32446:33;;32463:1;32446:33;;;;;;;;;;;;32105:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:765::-;1960:6;1968;1976;1984;2033:3;2021:9;2012:7;2008:23;2004:33;2001:120;;;2040:79;;:::i;:::-;2001:120;2160:1;2185:53;2230:7;2221:6;2210:9;2206:22;2185:53;:::i;:::-;2175:63;;2131:117;2287:2;2313:53;2358:7;2349:6;2338:9;2334:22;2313:53;:::i;:::-;2303:63;;2258:118;2415:2;2441:53;2486:7;2477:6;2466:9;2462:22;2441:53;:::i;:::-;2431:63;;2386:118;2543:2;2569:53;2614:7;2605:6;2594:9;2590:22;2569:53;:::i;:::-;2559:63;;2514:118;1874:765;;;;;;;:::o;2645:99::-;2697:6;2731:5;2725:12;2715:22;;2645:99;;;:::o;2750:169::-;2834:11;2868:6;2863:3;2856:19;2908:4;2903:3;2899:14;2884:29;;2750:169;;;;:::o;2925:246::-;3006:1;3016:113;3030:6;3027:1;3024:13;3016:113;;;3115:1;3110:3;3106:11;3100:18;3096:1;3091:3;3087:11;3080:39;3052:2;3049:1;3045:10;3040:15;;3016:113;;;3163:1;3154:6;3149:3;3145:16;3138:27;2987:184;2925:246;;;:::o;3177:102::-;3218:6;3269:2;3265:7;3260:2;3253:5;3249:14;3245:28;3235:38;;3177:102;;;:::o;3285:377::-;3373:3;3401:39;3434:5;3401:39;:::i;:::-;3456:71;3520:6;3515:3;3456:71;:::i;:::-;3449:78;;3536:65;3594:6;3589:3;3582:4;3575:5;3571:16;3536:65;:::i;:::-;3626:29;3648:6;3626:29;:::i;:::-;3621:3;3617:39;3610:46;;3377:285;3285:377;;;;:::o;3668:313::-;3781:4;3819:2;3808:9;3804:18;3796:26;;3868:9;3862:4;3858:20;3854:1;3843:9;3839:17;3832:47;3896:78;3969:4;3960:6;3896:78;:::i;:::-;3888:86;;3668:313;;;;:::o;3987:329::-;4046:6;4095:2;4083:9;4074:7;4070:23;4066:32;4063:119;;;4101:79;;:::i;:::-;4063:119;4221:1;4246:53;4291:7;4282:6;4271:9;4267:22;4246:53;:::i;:::-;4236:63;;4192:117;3987:329;;;;:::o;4322:126::-;4359:7;4399:42;4392:5;4388:54;4377:65;;4322:126;;;:::o;4454:96::-;4491:7;4520:24;4538:5;4520:24;:::i;:::-;4509:35;;4454:96;;;:::o;4556:118::-;4643:24;4661:5;4643:24;:::i;:::-;4638:3;4631:37;4556:118;;:::o;4680:222::-;4773:4;4811:2;4800:9;4796:18;4788:26;;4824:71;4892:1;4881:9;4877:17;4868:6;4824:71;:::i;:::-;4680:222;;;;:::o;4908:122::-;4981:24;4999:5;4981:24;:::i;:::-;4974:5;4971:35;4961:63;;5020:1;5017;5010:12;4961:63;4908:122;:::o;5036:139::-;5082:5;5120:6;5107:20;5098:29;;5136:33;5163:5;5136:33;:::i;:::-;5036:139;;;;:::o;5181:474::-;5249:6;5257;5306:2;5294:9;5285:7;5281:23;5277:32;5274:119;;;5312:79;;:::i;:::-;5274:119;5432:1;5457:53;5502:7;5493:6;5482:9;5478:22;5457:53;:::i;:::-;5447:63;;5403:117;5559:2;5585:53;5630:7;5621:6;5610:9;5606:22;5585:53;:::i;:::-;5575:63;;5530:118;5181:474;;;;;:::o;5661:117::-;5770:1;5767;5760:12;5784:117;5893:1;5890;5883:12;5907:117;6016:1;6013;6006:12;6043:552;6100:8;6110:6;6160:3;6153:4;6145:6;6141:17;6137:27;6127:122;;6168:79;;:::i;:::-;6127:122;6281:6;6268:20;6258:30;;6311:18;6303:6;6300:30;6297:117;;;6333:79;;:::i;:::-;6297:117;6447:4;6439:6;6435:17;6423:29;;6501:3;6493:4;6485:6;6481:17;6471:8;6467:32;6464:41;6461:128;;;6508:79;;:::i;:::-;6461:128;6043:552;;;;;:::o;6601:963::-;6698:6;6706;6714;6722;6730;6779:3;6767:9;6758:7;6754:23;6750:33;6747:120;;;6786:79;;:::i;:::-;6747:120;6906:1;6931:53;6976:7;6967:6;6956:9;6952:22;6931:53;:::i;:::-;6921:63;;6877:117;7033:2;7059:53;7104:7;7095:6;7084:9;7080:22;7059:53;:::i;:::-;7049:63;;7004:118;7161:2;7187:53;7232:7;7223:6;7212:9;7208:22;7187:53;:::i;:::-;7177:63;;7132:118;7317:2;7306:9;7302:18;7289:32;7348:18;7340:6;7337:30;7334:117;;;7370:79;;:::i;:::-;7334:117;7483:64;7539:7;7530:6;7519:9;7515:22;7483:64;:::i;:::-;7465:82;;;;7260:297;6601:963;;;;;;;;:::o;7570:115::-;7655:23;7672:5;7655:23;:::i;:::-;7650:3;7643:36;7570:115;;:::o;7691:218::-;7782:4;7820:2;7809:9;7805:18;7797:26;;7833:69;7899:1;7888:9;7884:17;7875:6;7833:69;:::i;:::-;7691:218;;;;:::o;7915:118::-;8002:24;8020:5;8002:24;:::i;:::-;7997:3;7990:37;7915:118;;:::o;8039:222::-;8132:4;8170:2;8159:9;8155:18;8147:26;;8183:71;8251:1;8240:9;8236:17;8227:6;8183:71;:::i;:::-;8039:222;;;;:::o;8267:619::-;8344:6;8352;8360;8409:2;8397:9;8388:7;8384:23;8380:32;8377:119;;;8415:79;;:::i;:::-;8377:119;8535:1;8560:53;8605:7;8596:6;8585:9;8581:22;8560:53;:::i;:::-;8550:63;;8506:117;8662:2;8688:53;8733:7;8724:6;8713:9;8709:22;8688:53;:::i;:::-;8678:63;;8633:118;8790:2;8816:53;8861:7;8852:6;8841:9;8837:22;8816:53;:::i;:::-;8806:63;;8761:118;8267:619;;;;;:::o;8892:117::-;9001:1;8998;8991:12;9015:180;9063:77;9060:1;9053:88;9160:4;9157:1;9150:15;9184:4;9181:1;9174:15;9201:281;9284:27;9306:4;9284:27;:::i;:::-;9276:6;9272:40;9414:6;9402:10;9399:22;9378:18;9366:10;9363:34;9360:62;9357:88;;;9425:18;;:::i;:::-;9357:88;9465:10;9461:2;9454:22;9244:238;9201:281;;:::o;9488:129::-;9522:6;9549:20;;:::i;:::-;9539:30;;9578:33;9606:4;9598:6;9578:33;:::i;:::-;9488:129;;;:::o;9623:308::-;9685:4;9775:18;9767:6;9764:30;9761:56;;;9797:18;;:::i;:::-;9761:56;9835:29;9857:6;9835:29;:::i;:::-;9827:37;;9919:4;9913;9909:15;9901:23;;9623:308;;;:::o;9937:146::-;10034:6;10029:3;10024;10011:30;10075:1;10066:6;10061:3;10057:16;10050:27;9937:146;;;:::o;10089:425::-;10167:5;10192:66;10208:49;10250:6;10208:49;:::i;:::-;10192:66;:::i;:::-;10183:75;;10281:6;10274:5;10267:21;10319:4;10312:5;10308:16;10357:3;10348:6;10343:3;10339:16;10336:25;10333:112;;;10364:79;;:::i;:::-;10333:112;10454:54;10501:6;10496:3;10491;10454:54;:::i;:::-;10173:341;10089:425;;;;;:::o;10534:340::-;10590:5;10639:3;10632:4;10624:6;10620:17;10616:27;10606:122;;10647:79;;:::i;:::-;10606:122;10764:6;10751:20;10789:79;10864:3;10856:6;10849:4;10841:6;10837:17;10789:79;:::i;:::-;10780:88;;10596:278;10534:340;;;;:::o;10880:509::-;10949:6;10998:2;10986:9;10977:7;10973:23;10969:32;10966:119;;;11004:79;;:::i;:::-;10966:119;11152:1;11141:9;11137:17;11124:31;11182:18;11174:6;11171:30;11168:117;;;11204:79;;:::i;:::-;11168:117;11309:63;11364:7;11355:6;11344:9;11340:22;11309:63;:::i;:::-;11299:73;;11095:287;10880:509;;;;:::o;11395:311::-;11472:4;11562:18;11554:6;11551:30;11548:56;;;11584:18;;:::i;:::-;11548:56;11634:4;11626:6;11622:17;11614:25;;11694:4;11688;11684:15;11676:23;;11395:311;;;:::o;11729:710::-;11825:5;11850:81;11866:64;11923:6;11866:64;:::i;:::-;11850:81;:::i;:::-;11841:90;;11951:5;11980:6;11973:5;11966:21;12014:4;12007:5;12003:16;11996:23;;12067:4;12059:6;12055:17;12047:6;12043:30;12096:3;12088:6;12085:15;12082:122;;;12115:79;;:::i;:::-;12082:122;12230:6;12213:220;12247:6;12242:3;12239:15;12213:220;;;12322:3;12351:37;12384:3;12372:10;12351:37;:::i;:::-;12346:3;12339:50;12418:4;12413:3;12409:14;12402:21;;12289:144;12273:4;12268:3;12264:14;12257:21;;12213:220;;;12217:21;11831:608;;11729:710;;;;;:::o;12462:370::-;12533:5;12582:3;12575:4;12567:6;12563:17;12559:27;12549:122;;12590:79;;:::i;:::-;12549:122;12707:6;12694:20;12732:94;12822:3;12814:6;12807:4;12799:6;12795:17;12732:94;:::i;:::-;12723:103;;12539:293;12462:370;;;;:::o;12838:311::-;12915:4;13005:18;12997:6;12994:30;12991:56;;;13027:18;;:::i;:::-;12991:56;13077:4;13069:6;13065:17;13057:25;;13137:4;13131;13127:15;13119:23;;12838:311;;;:::o;13172:710::-;13268:5;13293:81;13309:64;13366:6;13309:64;:::i;:::-;13293:81;:::i;:::-;13284:90;;13394:5;13423:6;13416:5;13409:21;13457:4;13450:5;13446:16;13439:23;;13510:4;13502:6;13498:17;13490:6;13486:30;13539:3;13531:6;13528:15;13525:122;;;13558:79;;:::i;:::-;13525:122;13673:6;13656:220;13690:6;13685:3;13682:15;13656:220;;;13765:3;13794:37;13827:3;13815:10;13794:37;:::i;:::-;13789:3;13782:50;13861:4;13856:3;13852:14;13845:21;;13732:144;13716:4;13711:3;13707:14;13700:21;;13656:220;;;13660:21;13274:608;;13172:710;;;;;:::o;13905:370::-;13976:5;14025:3;14018:4;14010:6;14006:17;14002:27;13992:122;;14033:79;;:::i;:::-;13992:122;14150:6;14137:20;14175:94;14265:3;14257:6;14250:4;14242:6;14238:17;14175:94;:::i;:::-;14166:103;;13982:293;13905:370;;;;:::o;14281:894::-;14399:6;14407;14456:2;14444:9;14435:7;14431:23;14427:32;14424:119;;;14462:79;;:::i;:::-;14424:119;14610:1;14599:9;14595:17;14582:31;14640:18;14632:6;14629:30;14626:117;;;14662:79;;:::i;:::-;14626:117;14767:78;14837:7;14828:6;14817:9;14813:22;14767:78;:::i;:::-;14757:88;;14553:302;14922:2;14911:9;14907:18;14894:32;14953:18;14945:6;14942:30;14939:117;;;14975:79;;:::i;:::-;14939:117;15080:78;15150:7;15141:6;15130:9;15126:22;15080:78;:::i;:::-;15070:88;;14865:303;14281:894;;;;;:::o;15181:329::-;15240:6;15289:2;15277:9;15268:7;15264:23;15260:32;15257:119;;;15295:79;;:::i;:::-;15257:119;15415:1;15440:53;15485:7;15476:6;15465:9;15461:22;15440:53;:::i;:::-;15430:63;;15386:117;15181:329;;;;:::o;15516:104::-;15581:6;15609:4;15599:14;;15516:104;;;:::o;15626:143::-;15723:11;15760:3;15745:18;;15626:143;;;;:::o;15775:98::-;15840:4;15863:3;15855:11;;15775:98;;;:::o;15879:108::-;15956:24;15974:5;15956:24;:::i;:::-;15951:3;15944:37;15879:108;;:::o;15993:179::-;16062:10;16083:46;16125:3;16117:6;16083:46;:::i;:::-;16161:4;16156:3;16152:14;16138:28;;15993:179;;;;:::o;16178:111::-;16246:4;16278;16273:3;16269:14;16261:22;;16178:111;;;:::o;16327:694::-;16463:52;16509:5;16463:52;:::i;:::-;16531:84;16608:6;16603:3;16531:84;:::i;:::-;16524:91;;16639:54;16687:5;16639:54;:::i;:::-;16716:7;16747:1;16732:282;16757:6;16754:1;16751:13;16732:282;;;16833:6;16827:13;16860:63;16919:3;16904:13;16860:63;:::i;:::-;16853:70;;16946:58;16997:6;16946:58;:::i;:::-;16936:68;;16792:222;16779:1;16776;16772:9;16767:14;;16732:282;;;16736:14;16439:582;;;16327:694;;:::o;17027:315::-;17166:4;17204:3;17193:9;17189:19;17181:27;;17218:117;17332:1;17321:9;17317:17;17308:6;17218:117;:::i;:::-;17027:315;;;;:::o;17348:474::-;17416:6;17424;17473:2;17461:9;17452:7;17448:23;17444:32;17441:119;;;17479:79;;:::i;:::-;17441:119;17599:1;17624:53;17669:7;17660:6;17649:9;17645:22;17624:53;:::i;:::-;17614:63;;17570:117;17726:2;17752:53;17797:7;17788:6;17777:9;17773:22;17752:53;:::i;:::-;17742:63;;17697:118;17348:474;;;;;:::o;17828:116::-;17898:21;17913:5;17898:21;:::i;:::-;17891:5;17888:32;17878:60;;17934:1;17931;17924:12;17878:60;17828:116;:::o;17950:133::-;17993:5;18031:6;18018:20;18009:29;;18047:30;18071:5;18047:30;:::i;:::-;17950:133;;;;:::o;18089:468::-;18154:6;18162;18211:2;18199:9;18190:7;18186:23;18182:32;18179:119;;;18217:79;;:::i;:::-;18179:119;18337:1;18362:53;18407:7;18398:6;18387:9;18383:22;18362:53;:::i;:::-;18352:63;;18308:117;18464:2;18490:50;18532:7;18523:6;18512:9;18508:22;18490:50;:::i;:::-;18480:60;;18435:115;18089:468;;;;;:::o;18563:539::-;18647:6;18696:2;18684:9;18675:7;18671:23;18667:32;18664:119;;;18702:79;;:::i;:::-;18664:119;18850:1;18839:9;18835:17;18822:31;18880:18;18872:6;18869:30;18866:117;;;18902:79;;:::i;:::-;18866:117;19007:78;19077:7;19068:6;19057:9;19053:22;19007:78;:::i;:::-;18997:88;;18793:302;18563:539;;;;:::o;19108:307::-;19169:4;19259:18;19251:6;19248:30;19245:56;;;19281:18;;:::i;:::-;19245:56;19319:29;19341:6;19319:29;:::i;:::-;19311:37;;19403:4;19397;19393:15;19385:23;;19108:307;;;:::o;19421:423::-;19498:5;19523:65;19539:48;19580:6;19539:48;:::i;:::-;19523:65;:::i;:::-;19514:74;;19611:6;19604:5;19597:21;19649:4;19642:5;19638:16;19687:3;19678:6;19673:3;19669:16;19666:25;19663:112;;;19694:79;;:::i;:::-;19663:112;19784:54;19831:6;19826:3;19821;19784:54;:::i;:::-;19504:340;19421:423;;;;;:::o;19863:338::-;19918:5;19967:3;19960:4;19952:6;19948:17;19944:27;19934:122;;19975:79;;:::i;:::-;19934:122;20092:6;20079:20;20117:78;20191:3;20183:6;20176:4;20168:6;20164:17;20117:78;:::i;:::-;20108:87;;19924:277;19863:338;;;;:::o;20207:943::-;20302:6;20310;20318;20326;20375:3;20363:9;20354:7;20350:23;20346:33;20343:120;;;20382:79;;:::i;:::-;20343:120;20502:1;20527:53;20572:7;20563:6;20552:9;20548:22;20527:53;:::i;:::-;20517:63;;20473:117;20629:2;20655:53;20700:7;20691:6;20680:9;20676:22;20655:53;:::i;:::-;20645:63;;20600:118;20757:2;20783:53;20828:7;20819:6;20808:9;20804:22;20783:53;:::i;:::-;20773:63;;20728:118;20913:2;20902:9;20898:18;20885:32;20944:18;20936:6;20933:30;20930:117;;;20966:79;;:::i;:::-;20930:117;21071:62;21125:7;21116:6;21105:9;21101:22;21071:62;:::i;:::-;21061:72;;20856:287;20207:943;;;;;;;:::o;21156:474::-;21224:6;21232;21281:2;21269:9;21260:7;21256:23;21252:32;21249:119;;;21287:79;;:::i;:::-;21249:119;21407:1;21432:53;21477:7;21468:6;21457:9;21453:22;21432:53;:::i;:::-;21422:63;;21378:117;21534:2;21560:53;21605:7;21596:6;21585:9;21581:22;21560:53;:::i;:::-;21550:63;;21505:118;21156:474;;;;;:::o;21636:104::-;21701:6;21729:4;21719:14;;21636:104;;;:::o;21746:143::-;21843:11;21880:3;21865:18;;21746:143;;;;:::o;21895:98::-;21960:4;21983:3;21975:11;;21895:98;;;:::o;21999:111::-;22067:4;22099;22094:3;22090:14;22082:22;;21999:111;;;:::o;22148:694::-;22284:52;22330:5;22284:52;:::i;:::-;22352:84;22429:6;22424:3;22352:84;:::i;:::-;22345:91;;22460:54;22508:5;22460:54;:::i;:::-;22537:7;22568:1;22553:282;22578:6;22575:1;22572:13;22553:282;;;22654:6;22648:13;22681:63;22740:3;22725:13;22681:63;:::i;:::-;22674:70;;22767:58;22818:6;22767:58;:::i;:::-;22757:68;;22613:222;22600:1;22597;22593:9;22588:14;;22553:282;;;22557:14;22260:582;;;22148:694;;:::o;22848:315::-;22987:4;23025:3;23014:9;23010:19;23002:27;;23039:117;23153:1;23142:9;23138:17;23129:6;23039:117;:::i;:::-;22848:315;;;;:::o;23169:181::-;23309:33;23305:1;23297:6;23293:14;23286:57;23169:181;:::o;23356:366::-;23498:3;23519:67;23583:2;23578:3;23519:67;:::i;:::-;23512:74;;23595:93;23684:3;23595:93;:::i;:::-;23713:2;23708:3;23704:12;23697:19;;23356:366;;;:::o;23728:419::-;23894:4;23932:2;23921:9;23917:18;23909:26;;23981:9;23975:4;23971:20;23967:1;23956:9;23952:17;23945:47;24009:131;24135:4;24009:131;:::i;:::-;24001:139;;23728:419;;;:::o;24153:172::-;24293:24;24289:1;24281:6;24277:14;24270:48;24153:172;:::o;24331:366::-;24473:3;24494:67;24558:2;24553:3;24494:67;:::i;:::-;24487:74;;24570:93;24659:3;24570:93;:::i;:::-;24688:2;24683:3;24679:12;24672:19;;24331:366;;;:::o;24703:419::-;24869:4;24907:2;24896:9;24892:18;24884:26;;24956:9;24950:4;24946:20;24942:1;24931:9;24927:17;24920:47;24984:131;25110:4;24984:131;:::i;:::-;24976:139;;24703:419;;;:::o;25128:168::-;25268:20;25264:1;25256:6;25252:14;25245:44;25128:168;:::o;25302:366::-;25444:3;25465:67;25529:2;25524:3;25465:67;:::i;:::-;25458:74;;25541:93;25630:3;25541:93;:::i;:::-;25659:2;25654:3;25650:12;25643:19;;25302:366;;;:::o;25674:419::-;25840:4;25878:2;25867:9;25863:18;25855:26;;25927:9;25921:4;25917:20;25913:1;25902:9;25898:17;25891:47;25955:131;26081:4;25955:131;:::i;:::-;25947:139;;25674:419;;;:::o;26099:160::-;26239:12;26235:1;26227:6;26223:14;26216:36;26099:160;:::o;26265:366::-;26407:3;26428:67;26492:2;26487:3;26428:67;:::i;:::-;26421:74;;26504:93;26593:3;26504:93;:::i;:::-;26622:2;26617:3;26613:12;26606:19;;26265:366;;;:::o;26637:419::-;26803:4;26841:2;26830:9;26826:18;26818:26;;26890:9;26884:4;26880:20;26876:1;26865:9;26861:17;26854:47;26918:131;27044:4;26918:131;:::i;:::-;26910:139;;26637:419;;;:::o;27062:180::-;27110:77;27107:1;27100:88;27207:4;27204:1;27197:15;27231:4;27228:1;27221:15;27248:233;27287:3;27310:24;27328:5;27310:24;:::i;:::-;27301:33;;27356:66;27349:5;27346:77;27343:103;;27426:18;;:::i;:::-;27343:103;27473:1;27466:5;27462:13;27455:20;;27248:233;;;:::o;27487:191::-;27527:3;27546:20;27564:1;27546:20;:::i;:::-;27541:25;;27580:20;27598:1;27580:20;:::i;:::-;27575:25;;27623:1;27620;27616:9;27609:16;;27644:3;27641:1;27638:10;27635:36;;;27651:18;;:::i;:::-;27635:36;27487:191;;;;:::o;27684:180::-;27732:77;27729:1;27722:88;27829:4;27826:1;27819:15;27853:4;27850:1;27843:15;27870:320;27914:6;27951:1;27945:4;27941:12;27931:22;;27998:1;27992:4;27988:12;28019:18;28009:81;;28075:4;28067:6;28063:17;28053:27;;28009:81;28137:2;28129:6;28126:14;28106:18;28103:38;28100:84;;28156:18;;:::i;:::-;28100:84;27921:269;27870:320;;;:::o;28196:182::-;28336:34;28332:1;28324:6;28320:14;28313:58;28196:182;:::o;28384:366::-;28526:3;28547:67;28611:2;28606:3;28547:67;:::i;:::-;28540:74;;28623:93;28712:3;28623:93;:::i;:::-;28741:2;28736:3;28732:12;28725:19;;28384:366;;;:::o;28756:419::-;28922:4;28960:2;28949:9;28945:18;28937:26;;29009:9;29003:4;28999:20;28995:1;28984:9;28980:17;28973:47;29037:131;29163:4;29037:131;:::i;:::-;29029:139;;28756:419;;;:::o;29181:180::-;29321:32;29317:1;29309:6;29305:14;29298:56;29181:180;:::o;29367:366::-;29509:3;29530:67;29594:2;29589:3;29530:67;:::i;:::-;29523:74;;29606:93;29695:3;29606:93;:::i;:::-;29724:2;29719:3;29715:12;29708:19;;29367:366;;;:::o;29739:419::-;29905:4;29943:2;29932:9;29928:18;29920:26;;29992:9;29986:4;29982:20;29978:1;29967:9;29963:17;29956:47;30020:131;30146:4;30020:131;:::i;:::-;30012:139;;29739:419;;;:::o;30164:181::-;30304:33;30300:1;30292:6;30288:14;30281:57;30164:181;:::o;30351:366::-;30493:3;30514:67;30578:2;30573:3;30514:67;:::i;:::-;30507:74;;30590:93;30679:3;30590:93;:::i;:::-;30708:2;30703:3;30699:12;30692:19;;30351:366;;;:::o;30723:419::-;30889:4;30927:2;30916:9;30912:18;30904:26;;30976:9;30970:4;30966:20;30962:1;30951:9;30947:17;30940:47;31004:131;31130:4;31004:131;:::i;:::-;30996:139;;30723:419;;;:::o;31148:194::-;31188:4;31208:20;31226:1;31208:20;:::i;:::-;31203:25;;31242:20;31260:1;31242:20;:::i;:::-;31237:25;;31286:1;31283;31279:9;31271:17;;31310:1;31304:4;31301:11;31298:37;;;31315:18;;:::i;:::-;31298:37;31148:194;;;;:::o;31348:178::-;31488:30;31484:1;31476:6;31472:14;31465:54;31348:178;:::o;31532:366::-;31674:3;31695:67;31759:2;31754:3;31695:67;:::i;:::-;31688:74;;31771:93;31860:3;31771:93;:::i;:::-;31889:2;31884:3;31880:12;31873:19;;31532:366;;;:::o;31904:419::-;32070:4;32108:2;32097:9;32093:18;32085:26;;32157:9;32151:4;32147:20;32143:1;32132:9;32128:17;32121:47;32185:131;32311:4;32185:131;:::i;:::-;32177:139;;31904:419;;;:::o;32329:182::-;32469:34;32465:1;32457:6;32453:14;32446:58;32329:182;:::o;32517:366::-;32659:3;32680:67;32744:2;32739:3;32680:67;:::i;:::-;32673:74;;32756:93;32845:3;32756:93;:::i;:::-;32874:2;32869:3;32865:12;32858:19;;32517:366;;;:::o;32889:419::-;33055:4;33093:2;33082:9;33078:18;33070:26;;33142:9;33136:4;33132:20;33128:1;33117:9;33113:17;33106:47;33170:131;33296:4;33170:131;:::i;:::-;33162:139;;32889:419;;;:::o;33314:147::-;33415:11;33452:3;33437:18;;33314:147;;;;:::o;33467:114::-;;:::o;33587:398::-;33746:3;33767:83;33848:1;33843:3;33767:83;:::i;:::-;33760:90;;33859:93;33948:3;33859:93;:::i;:::-;33977:1;33972:3;33968:11;33961:18;;33587:398;;;:::o;33991:379::-;34175:3;34197:147;34340:3;34197:147;:::i;:::-;34190:154;;34361:3;34354:10;;33991:379;;;:::o;34376:174::-;34516:26;34512:1;34504:6;34500:14;34493:50;34376:174;:::o;34556:366::-;34698:3;34719:67;34783:2;34778:3;34719:67;:::i;:::-;34712:74;;34795:93;34884:3;34795:93;:::i;:::-;34913:2;34908:3;34904:12;34897:19;;34556:366;;;:::o;34928:419::-;35094:4;35132:2;35121:9;35117:18;35109:26;;35181:9;35175:4;35171:20;35167:1;35156:9;35152:17;35145:47;35209:131;35335:4;35209:131;:::i;:::-;35201:139;;34928:419;;;:::o;35353:141::-;35402:4;35425:3;35417:11;;35448:3;35445:1;35438:14;35482:4;35479:1;35469:18;35461:26;;35353:141;;;:::o;35500:93::-;35537:6;35584:2;35579;35572:5;35568:14;35564:23;35554:33;;35500:93;;;:::o;35599:107::-;35643:8;35693:5;35687:4;35683:16;35662:37;;35599:107;;;;:::o;35712:393::-;35781:6;35831:1;35819:10;35815:18;35854:97;35884:66;35873:9;35854:97;:::i;:::-;35972:39;36002:8;35991:9;35972:39;:::i;:::-;35960:51;;36044:4;36040:9;36033:5;36029:21;36020:30;;36093:4;36083:8;36079:19;36072:5;36069:30;36059:40;;35788:317;;35712:393;;;;;:::o;36111:60::-;36139:3;36160:5;36153:12;;36111:60;;;:::o;36177:142::-;36227:9;36260:53;36278:34;36287:24;36305:5;36287:24;:::i;:::-;36278:34;:::i;:::-;36260:53;:::i;:::-;36247:66;;36177:142;;;:::o;36325:75::-;36368:3;36389:5;36382:12;;36325:75;;;:::o;36406:269::-;36516:39;36547:7;36516:39;:::i;:::-;36577:91;36626:41;36650:16;36626:41;:::i;:::-;36618:6;36611:4;36605:11;36577:91;:::i;:::-;36571:4;36564:105;36482:193;36406:269;;;:::o;36681:73::-;36726:3;36681:73;:::o;36760:189::-;36837:32;;:::i;:::-;36878:65;36936:6;36928;36922:4;36878:65;:::i;:::-;36813:136;36760:189;;:::o;36955:186::-;37015:120;37032:3;37025:5;37022:14;37015:120;;;37086:39;37123:1;37116:5;37086:39;:::i;:::-;37059:1;37052:5;37048:13;37039:22;;37015:120;;;36955:186;;:::o;37147:543::-;37248:2;37243:3;37240:11;37237:446;;;37282:38;37314:5;37282:38;:::i;:::-;37366:29;37384:10;37366:29;:::i;:::-;37356:8;37352:44;37549:2;37537:10;37534:18;37531:49;;;37570:8;37555:23;;37531:49;37593:80;37649:22;37667:3;37649:22;:::i;:::-;37639:8;37635:37;37622:11;37593:80;:::i;:::-;37252:431;;37237:446;37147:543;;;:::o;37696:117::-;37750:8;37800:5;37794:4;37790:16;37769:37;;37696:117;;;;:::o;37819:169::-;37863:6;37896:51;37944:1;37940:6;37932:5;37929:1;37925:13;37896:51;:::i;:::-;37892:56;37977:4;37971;37967:15;37957:25;;37870:118;37819:169;;;;:::o;37993:295::-;38069:4;38215:29;38240:3;38234:4;38215:29;:::i;:::-;38207:37;;38277:3;38274:1;38270:11;38264:4;38261:21;38253:29;;37993:295;;;;:::o;38293:1395::-;38410:37;38443:3;38410:37;:::i;:::-;38512:18;38504:6;38501:30;38498:56;;;38534:18;;:::i;:::-;38498:56;38578:38;38610:4;38604:11;38578:38;:::i;:::-;38663:67;38723:6;38715;38709:4;38663:67;:::i;:::-;38757:1;38781:4;38768:17;;38813:2;38805:6;38802:14;38830:1;38825:618;;;;39487:1;39504:6;39501:77;;;39553:9;39548:3;39544:19;39538:26;39529:35;;39501:77;39604:67;39664:6;39657:5;39604:67;:::i;:::-;39598:4;39591:81;39460:222;38795:887;;38825:618;38877:4;38873:9;38865:6;38861:22;38911:37;38943:4;38911:37;:::i;:::-;38970:1;38984:208;38998:7;38995:1;38992:14;38984:208;;;39077:9;39072:3;39068:19;39062:26;39054:6;39047:42;39128:1;39120:6;39116:14;39106:24;;39175:2;39164:9;39160:18;39147:31;;39021:4;39018:1;39014:12;39009:17;;38984:208;;;39220:6;39211:7;39208:19;39205:179;;;39278:9;39273:3;39269:19;39263:26;39321:48;39363:4;39355:6;39351:17;39340:9;39321:48;:::i;:::-;39313:6;39306:64;39228:156;39205:179;39430:1;39426;39418:6;39414:14;39410:22;39404:4;39397:36;38832:611;;;38795:887;;38385:1303;;;38293:1395;;:::o;39694:180::-;39834:32;39830:1;39822:6;39818:14;39811:56;39694:180;:::o;39880:366::-;40022:3;40043:67;40107:2;40102:3;40043:67;:::i;:::-;40036:74;;40119:93;40208:3;40119:93;:::i;:::-;40237:2;40232:3;40228:12;40221:19;;39880:366;;;:::o;40252:419::-;40418:4;40456:2;40445:9;40441:18;40433:26;;40505:9;40499:4;40495:20;40491:1;40480:9;40476:17;40469:47;40533:131;40659:4;40533:131;:::i;:::-;40525:139;;40252:419;;;:::o;40677:174::-;40817:26;40813:1;40805:6;40801:14;40794:50;40677:174;:::o;40857:366::-;40999:3;41020:67;41084:2;41079:3;41020:67;:::i;:::-;41013:74;;41096:93;41185:3;41096:93;:::i;:::-;41214:2;41209:3;41205:12;41198:19;;40857:366;;;:::o;41229:419::-;41395:4;41433:2;41422:9;41418:18;41410:26;;41482:9;41476:4;41472:20;41468:1;41457:9;41453:17;41446:47;41510:131;41636:4;41510:131;:::i;:::-;41502:139;;41229:419;;;:::o;41654:180::-;41702:77;41699:1;41692:88;41799:4;41796:1;41789:15;41823:4;41820:1;41813:15;41840:182;41980:34;41976:1;41968:6;41964:14;41957:58;41840:182;:::o;42028:366::-;42170:3;42191:67;42255:2;42250:3;42191:67;:::i;:::-;42184:74;;42267:93;42356:3;42267:93;:::i;:::-;42385:2;42380:3;42376:12;42369:19;;42028:366;;;:::o;42400:419::-;42566:4;42604:2;42593:9;42589:18;42581:26;;42653:9;42647:4;42643:20;42639:1;42628:9;42624:17;42617:47;42681:131;42807:4;42681:131;:::i;:::-;42673:139;;42400:419;;;:::o;42825:168::-;42965:20;42961:1;42953:6;42949:14;42942:44;42825:168;:::o;42999:366::-;43141:3;43162:67;43226:2;43221:3;43162:67;:::i;:::-;43155:74;;43238:93;43327:3;43238:93;:::i;:::-;43356:2;43351:3;43347:12;43340:19;;42999:366;;;:::o;43371:419::-;43537:4;43575:2;43564:9;43560:18;43552:26;;43624:9;43618:4;43614:20;43610:1;43599:9;43595:17;43588:47;43652:131;43778:4;43652:131;:::i;:::-;43644:139;;43371:419;;;:::o;43796:165::-;43936:17;43932:1;43924:6;43920:14;43913:41;43796:165;:::o;43967:366::-;44109:3;44130:67;44194:2;44189:3;44130:67;:::i;:::-;44123:74;;44206:93;44295:3;44206:93;:::i;:::-;44324:2;44319:3;44315:12;44308:19;;43967:366;;;:::o;44339:419::-;44505:4;44543:2;44532:9;44528:18;44520:26;;44592:9;44586:4;44582:20;44578:1;44567:9;44563:17;44556:47;44620:131;44746:4;44620:131;:::i;:::-;44612:139;;44339:419;;;:::o;44764:174::-;44904:26;44900:1;44892:6;44888:14;44881:50;44764:174;:::o;44944:366::-;45086:3;45107:67;45171:2;45166:3;45107:67;:::i;:::-;45100:74;;45183:93;45272:3;45183:93;:::i;:::-;45301:2;45296:3;45292:12;45285:19;;44944:366;;;:::o;45316:419::-;45482:4;45520:2;45509:9;45505:18;45497:26;;45569:9;45563:4;45559:20;45555:1;45544:9;45540:17;45533:47;45597:131;45723:4;45597:131;:::i;:::-;45589:139;;45316:419;;;:::o;45741:158::-;45881:10;45877:1;45869:6;45865:14;45858:34;45741:158;:::o;45905:365::-;46047:3;46068:66;46132:1;46127:3;46068:66;:::i;:::-;46061:73;;46143:93;46232:3;46143:93;:::i;:::-;46261:2;46256:3;46252:12;46245:19;;45905:365;;;:::o;46276:419::-;46442:4;46480:2;46469:9;46465:18;46457:26;;46529:9;46523:4;46519:20;46515:1;46504:9;46500:17;46493:47;46557:131;46683:4;46557:131;:::i;:::-;46549:139;;46276:419;;;:::o;46701:169::-;46841:21;46837:1;46829:6;46825:14;46818:45;46701:169;:::o;46876:366::-;47018:3;47039:67;47103:2;47098:3;47039:67;:::i;:::-;47032:74;;47115:93;47204:3;47115:93;:::i;:::-;47233:2;47228:3;47224:12;47217:19;;46876:366;;;:::o;47248:419::-;47414:4;47452:2;47441:9;47437:18;47429:26;;47501:9;47495:4;47491:20;47487:1;47476:9;47472:17;47465:47;47529:131;47655:4;47529:131;:::i;:::-;47521:139;;47248:419;;;:::o;47673:410::-;47713:7;47736:20;47754:1;47736:20;:::i;:::-;47731:25;;47770:20;47788:1;47770:20;:::i;:::-;47765:25;;47825:1;47822;47818:9;47847:30;47865:11;47847:30;:::i;:::-;47836:41;;48026:1;48017:7;48013:15;48010:1;48007:22;47987:1;47980:9;47960:83;47937:139;;48056:18;;:::i;:::-;47937:139;47721:362;47673:410;;;;:::o;48089:167::-;48229:19;48225:1;48217:6;48213:14;48206:43;48089:167;:::o;48262:366::-;48404:3;48425:67;48489:2;48484:3;48425:67;:::i;:::-;48418:74;;48501:93;48590:3;48501:93;:::i;:::-;48619:2;48614:3;48610:12;48603:19;;48262:366;;;:::o;48634:419::-;48800:4;48838:2;48827:9;48823:18;48815:26;;48887:9;48881:4;48877:20;48873:1;48862:9;48858:17;48851:47;48915:131;49041:4;48915:131;:::i;:::-;48907:139;;48634:419;;;:::o;49059:178::-;49199:30;49195:1;49187:6;49183:14;49176:54;49059:178;:::o;49243:366::-;49385:3;49406:67;49470:2;49465:3;49406:67;:::i;:::-;49399:74;;49482:93;49571:3;49482:93;:::i;:::-;49600:2;49595:3;49591:12;49584:19;;49243:366;;;:::o;49615:419::-;49781:4;49819:2;49808:9;49804:18;49796:26;;49868:9;49862:4;49858:20;49854:1;49843:9;49839:17;49832:47;49896:131;50022:4;49896:131;:::i;:::-;49888:139;;49615:419;;;:::o;50040:175::-;50180:27;50176:1;50168:6;50164:14;50157:51;50040:175;:::o;50221:366::-;50363:3;50384:67;50448:2;50443:3;50384:67;:::i;:::-;50377:74;;50460:93;50549:3;50460:93;:::i;:::-;50578:2;50573:3;50569:12;50562:19;;50221:366;;;:::o;50593:419::-;50759:4;50797:2;50786:9;50782:18;50774:26;;50846:9;50840:4;50836:20;50832:1;50821:9;50817:17;50810:47;50874:131;51000:4;50874:131;:::i;:::-;50866:139;;50593:419;;;:::o;51018:179::-;51158:31;51154:1;51146:6;51142:14;51135:55;51018:179;:::o;51203:366::-;51345:3;51366:67;51430:2;51425:3;51366:67;:::i;:::-;51359:74;;51442:93;51531:3;51442:93;:::i;:::-;51560:2;51555:3;51551:12;51544:19;;51203:366;;;:::o;51575:419::-;51741:4;51779:2;51768:9;51764:18;51756:26;;51828:9;51822:4;51818:20;51814:1;51803:9;51799:17;51792:47;51856:131;51982:4;51856:131;:::i;:::-;51848:139;;51575:419;;;:::o;52000:148::-;52102:11;52139:3;52124:18;;52000:148;;;;:::o;52178:874::-;52281:3;52318:5;52312:12;52347:36;52373:9;52347:36;:::i;:::-;52399:89;52481:6;52476:3;52399:89;:::i;:::-;52392:96;;52519:1;52508:9;52504:17;52535:1;52530:166;;;;52710:1;52705:341;;;;52497:549;;52530:166;52614:4;52610:9;52599;52595:25;52590:3;52583:38;52676:6;52669:14;52662:22;52654:6;52650:35;52645:3;52641:45;52634:52;;52530:166;;52705:341;52772:38;52804:5;52772:38;:::i;:::-;52832:1;52846:154;52860:6;52857:1;52854:13;52846:154;;;52934:7;52928:14;52924:1;52919:3;52915:11;52908:35;52984:1;52975:7;52971:15;52960:26;;52882:4;52879:1;52875:12;52870:17;;52846:154;;;53029:6;53024:3;53020:16;53013:23;;52712:334;;52497:549;;52285:767;;52178:874;;;;:::o;53058:390::-;53164:3;53192:39;53225:5;53192:39;:::i;:::-;53247:89;53329:6;53324:3;53247:89;:::i;:::-;53240:96;;53345:65;53403:6;53398:3;53391:4;53384:5;53380:16;53345:65;:::i;:::-;53435:6;53430:3;53426:16;53419:23;;53168:280;53058:390;;;;:::o;53454:155::-;53594:7;53590:1;53582:6;53578:14;53571:31;53454:155;:::o;53615:400::-;53775:3;53796:84;53878:1;53873:3;53796:84;:::i;:::-;53789:91;;53889:93;53978:3;53889:93;:::i;:::-;54007:1;54002:3;53998:11;53991:18;;53615:400;;;:::o;54021:695::-;54299:3;54321:92;54409:3;54400:6;54321:92;:::i;:::-;54314:99;;54430:95;54521:3;54512:6;54430:95;:::i;:::-;54423:102;;54542:148;54686:3;54542:148;:::i;:::-;54535:155;;54707:3;54700:10;;54021:695;;;;;:::o;54722:167::-;54862:19;54858:1;54850:6;54846:14;54839:43;54722:167;:::o;54895:366::-;55037:3;55058:67;55122:2;55117:3;55058:67;:::i;:::-;55051:74;;55134:93;55223:3;55134:93;:::i;:::-;55252:2;55247:3;55243:12;55236:19;;54895:366;;;:::o;55267:419::-;55433:4;55471:2;55460:9;55456:18;55448:26;;55520:9;55514:4;55510:20;55506:1;55495:9;55491:17;55484:47;55548:131;55674:4;55548:131;:::i;:::-;55540:139;;55267:419;;;:::o;55692:163::-;55832:15;55828:1;55820:6;55816:14;55809:39;55692:163;:::o;55861:402::-;56021:3;56042:85;56124:2;56119:3;56042:85;:::i;:::-;56035:92;;56136:93;56225:3;56136:93;:::i;:::-;56254:2;56249:3;56245:12;56238:19;;55861:402;;;:::o;56269:535::-;56499:3;56521:92;56609:3;56600:6;56521:92;:::i;:::-;56514:99;;56630:148;56774:3;56630:148;:::i;:::-;56623:155;;56795:3;56788:10;;56269:535;;;;:::o;56810:182::-;56950:34;56946:1;56938:6;56934:14;56927:58;56810:182;:::o;56998:366::-;57140:3;57161:67;57225:2;57220:3;57161:67;:::i;:::-;57154:74;;57237:93;57326:3;57237:93;:::i;:::-;57355:2;57350:3;57346:12;57339:19;;56998:366;;;:::o;57370:419::-;57536:4;57574:2;57563:9;57559:18;57551:26;;57623:9;57617:4;57613:20;57609:1;57598:9;57594:17;57587:47;57651:131;57777:4;57651:131;:::i;:::-;57643:139;;57370:419;;;:::o;57795:180::-;57843:77;57840:1;57833:88;57940:4;57937:1;57930:15;57964:4;57961:1;57954:15;57981:185;58021:1;58038:20;58056:1;58038:20;:::i;:::-;58033:25;;58072:20;58090:1;58072:20;:::i;:::-;58067:25;;58111:1;58101:35;;58116:18;;:::i;:::-;58101:35;58158:1;58155;58151:9;58146:14;;57981:185;;;;:::o;58172:182::-;58312:34;58308:1;58300:6;58296:14;58289:58;58172:182;:::o;58360:366::-;58502:3;58523:67;58587:2;58582:3;58523:67;:::i;:::-;58516:74;;58599:93;58688:3;58599:93;:::i;:::-;58717:2;58712:3;58708:12;58701:19;;58360:366;;;:::o;58732:419::-;58898:4;58936:2;58925:9;58921:18;58913:26;;58985:9;58979:4;58975:20;58971:1;58960:9;58956:17;58949:47;59013:131;59139:4;59013:131;:::i;:::-;59005:139;;58732:419;;;:::o;59157:178::-;59297:30;59293:1;59285:6;59281:14;59274:54;59157:178;:::o;59341:366::-;59483:3;59504:67;59568:2;59563:3;59504:67;:::i;:::-;59497:74;;59580:93;59669:3;59580:93;:::i;:::-;59698:2;59693:3;59689:12;59682:19;;59341:366;;;:::o;59713:419::-;59879:4;59917:2;59906:9;59902:18;59894:26;;59966:9;59960:4;59956:20;59952:1;59941:9;59937:17;59930:47;59994:131;60120:4;59994:131;:::i;:::-;59986:139;;59713:419;;;:::o;60138:177::-;60278:29;60274:1;60266:6;60262:14;60255:53;60138:177;:::o;60321:366::-;60463:3;60484:67;60548:2;60543:3;60484:67;:::i;:::-;60477:74;;60560:93;60649:3;60560:93;:::i;:::-;60678:2;60673:3;60669:12;60662:19;;60321:366;;;:::o;60693:419::-;60859:4;60897:2;60886:9;60882:18;60874:26;;60946:9;60940:4;60936:20;60932:1;60921:9;60917:17;60910:47;60974:131;61100:4;60974:131;:::i;:::-;60966:139;;60693:419;;;:::o;61118:176::-;61258:28;61254:1;61246:6;61242:14;61235:52;61118:176;:::o;61300:366::-;61442:3;61463:67;61527:2;61522:3;61463:67;:::i;:::-;61456:74;;61539:93;61628:3;61539:93;:::i;:::-;61657:2;61652:3;61648:12;61641:19;;61300:366;;;:::o;61672:419::-;61838:4;61876:2;61865:9;61861:18;61853:26;;61925:9;61919:4;61915:20;61911:1;61900:9;61896:17;61889:47;61953:131;62079:4;61953:131;:::i;:::-;61945:139;;61672:419;;;:::o;62097:176::-;62129:1;62146:20;62164:1;62146:20;:::i;:::-;62141:25;;62180:20;62198:1;62180:20;:::i;:::-;62175:25;;62219:1;62209:35;;62224:18;;:::i;:::-;62209:35;62265:1;62262;62258:9;62253:14;;62097:176;;;;:::o;62279:98::-;62330:6;62364:5;62358:12;62348:22;;62279:98;;;:::o;62383:168::-;62466:11;62500:6;62495:3;62488:19;62540:4;62535:3;62531:14;62516:29;;62383:168;;;;:::o;62557:373::-;62643:3;62671:38;62703:5;62671:38;:::i;:::-;62725:70;62788:6;62783:3;62725:70;:::i;:::-;62718:77;;62804:65;62862:6;62857:3;62850:4;62843:5;62839:16;62804:65;:::i;:::-;62894:29;62916:6;62894:29;:::i;:::-;62889:3;62885:39;62878:46;;62647:283;62557:373;;;;:::o;62936:640::-;63131:4;63169:3;63158:9;63154:19;63146:27;;63183:71;63251:1;63240:9;63236:17;63227:6;63183:71;:::i;:::-;63264:72;63332:2;63321:9;63317:18;63308:6;63264:72;:::i;:::-;63346;63414:2;63403:9;63399:18;63390:6;63346:72;:::i;:::-;63465:9;63459:4;63455:20;63450:2;63439:9;63435:18;63428:48;63493:76;63564:4;63555:6;63493:76;:::i;:::-;63485:84;;62936:640;;;;;;;:::o;63582:141::-;63638:5;63669:6;63663:13;63654:22;;63685:32;63711:5;63685:32;:::i;:::-;63582:141;;;;:::o;63729:349::-;63798:6;63847:2;63835:9;63826:7;63822:23;63818:32;63815:119;;;63853:79;;:::i;:::-;63815:119;63973:1;63998:63;64053:7;64044:6;64033:9;64029:22;63998:63;:::i;:::-;63988:73;;63944:127;63729:349;;;;:::o;64084:182::-;64224:34;64220:1;64212:6;64208:14;64201:58;64084:182;:::o;64272:366::-;64414:3;64435:67;64499:2;64494:3;64435:67;:::i;:::-;64428:74;;64511:93;64600:3;64511:93;:::i;:::-;64629:2;64624:3;64620:12;64613:19;;64272:366;;;:::o;64644:419::-;64810:4;64848:2;64837:9;64833:18;64825:26;;64897:9;64891:4;64887:20;64883:1;64872:9;64868:17;64861:47;64925:131;65051:4;64925:131;:::i;:::-;64917:139;;64644:419;;;:::o;65069:178::-;65209:30;65205:1;65197:6;65193:14;65186:54;65069:178;:::o;65253:366::-;65395:3;65416:67;65480:2;65475:3;65416:67;:::i;:::-;65409:74;;65492:93;65581:3;65492:93;:::i;:::-;65610:2;65605:3;65601:12;65594:19;;65253:366;;;:::o;65625:419::-;65791:4;65829:2;65818:9;65814:18;65806:26;;65878:9;65872:4;65868:20;65864:1;65853:9;65849:17;65842:47;65906:131;66032:4;65906:131;:::i;:::-;65898:139;;65625:419;;;:::o

Swarm Source

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