ETH Price: $2,673.23 (+1.36%)

Token

ALIENATORS (AMB)
 

Overview

Max Total Supply

1,000 AMB

Holders

233

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 AMB
0x4aaad8436f2e14a51f7c5a024ae6162f1f501ea4
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ALIENATORS

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0

/*

   ###    ##       #### ######## ##    ##    ###    ########  #######  ########   ######  
  ## ##   ##        ##  ##       ###   ##   ## ##      ##    ##     ## ##     ## ##    ## 
 ##   ##  ##        ##  ##       ####  ##  ##   ##     ##    ##     ## ##     ## ##       
##     ## ##        ##  ######   ## ## ## ##     ##    ##    ##     ## ########   ######  
######### ##        ##  ##       ##  #### #########    ##    ##     ## ##   ##         ## 
##     ## ##        ##  ##       ##   ### ##     ##    ##    ##     ## ##    ##  ##    ## 
##     ## ######## #### ######## ##    ## ##     ##    ##     #######  ##     ##  ######  


*/

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.13;

/**
 * @title  OperatorFilterer
 * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
 *         registrant's entries in the OperatorFilterRegistry.
 * @dev    This smart contract is meant to be inherited by token contracts so they can use the following:
 *         - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
 *         - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
 */
abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        // Allow spending tokens from addresses with balance
        // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
        // from an EOA.
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }

    function _checkFilterOperator(address operator) internal view virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}


// File: @openzeppelin/contracts/security/ReentrancyGuard.sol

pragma solidity ^0.8.0;

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

        _status = _NOT_ENTERED;
    }
}


// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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


// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.8.0;

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() {
        _transferOwnership(_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 {
        _transferOwnership(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 the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

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

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

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

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

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

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

    /**
     * @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, "Address: low-level static call failed");
    }

    /**
     * @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), "Address: static call to 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, "Address: low-level delegate 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), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

interface IERC721Receiver {
  
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
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);

  
    function ownerOf(uint256 tokenId) external view returns (address owner);


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

  
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;


    function approve(address to, uint256 tokenId) external;


    function setApprovalForAll(address operator, bool _approved) external;


    function getApproved(uint256 tokenId) external view returns (address operator);

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
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);
}

// File: erc721a/contracts/IERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;



/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}


// File: erc721a/contracts/ERC721A.sol

// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), 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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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


    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

 
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}


    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}


// File: contracts/ALIENATORS.sol

pragma solidity >= 0.8.0 < 0.9.0;

contract ALIENATORS is ERC721A, Ownable, ReentrancyGuard, OperatorFilterer {

  using Strings for uint256;
  address public signerAddress;

  string public uriPrefix;
  string public notRevealedURI;
  string public uriSuffix = ".json";
  
  uint256 public cost = 0.09 ether;
  uint256 public maxSupply = 625;
  uint256 public PHASE_MAX_SUPPLY = 625;

  uint256 public MaxperTx = 2;
  uint256 public nftPerAddressLimit = 2;

  bool public paused = false;
  uint256 public revealed = 0;

  bool public publicMintEnabled = false;
  bool public whitelistMintEnabled = false;

  mapping(address => uint256) public addressMintedBalance;

  constructor( address _signerAddress ) ERC721A ( "ALIENATORS", "AMB" ) OperatorFilterer(address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6), false) {
    signerAddress = _signerAddress;
  }

// ~~~~~~~~~~~~~~~~~~~~ URI's ~~~~~~~~~~~~~~~~~~~~

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }

// ~~~~~~~~~~~~~~~~~~~~ Modifiers ~~~~~~~~~~~~~~~~~~~~

  modifier mintCompliance(uint256 _mintAmount) {
    require(!paused, "The contract is paused!");
    require(_mintAmount > 0, "Mint amount can't be zero.");
    require(_mintAmount <= MaxperTx, "Max mint per transaction exceeded!");
    require(addressMintedBalance[msg.sender] + _mintAmount <= nftPerAddressLimit, "Max mint amount per address exceeded!");
    require(totalSupply() + _mintAmount <= maxSupply, "Mint amount exceeds max supply!");
    _;
  }

  modifier mintPriceCompliance(uint256 _mintAmount) {
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");
    _;
  }

// ~~~~~~~~~~~~~~~~~~~~ Mint Functions ~~~~~~~~~~~~~~~~~~~~
  
  // PUBLIC MINT
  function mint(uint256 _mintAmount, bytes memory sig) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    require(publicMintEnabled, "Public mint is not active yet!");
    require(totalSupply() + _mintAmount < PHASE_MAX_SUPPLY, "Alienators: Phase mint limit reached!");

    addressMintedBalance[msg.sender] += _mintAmount;
    _safeMint(_msgSender(), _mintAmount);
  }
  
  // WHITELIST MINT
  function mintWhitelist(uint256 _mintAmount, bytes memory sig) public mintCompliance(_mintAmount) {
    require(whitelistMintEnabled, "Whitelist mint is not active yet!");
    require(isValidData(msg.sender, sig) == true, "User is not whitelisted!");
    require(addressMintedBalance[msg.sender] + _mintAmount <= nftPerAddressLimit, "Max Whitelist mint exceeded!");

    addressMintedBalance[msg.sender] += _mintAmount;
    _safeMint(_msgSender(), _mintAmount);
  }

  // MINT for address
  function mintToAddress(uint256 _mintAmount, address _receiver) public onlyOwner {
    require(totalSupply() + _mintAmount <= maxSupply, "Mint amount exceeds max supply!");
    _safeMint(_receiver, _mintAmount);
  }

// ~~~~~~~~~~~~~~~~~~~~ SIGNATURES ~~~~~~~~~~~~~~~~~~~~
  function isValidData(address _user, bytes memory sig) public view returns (bool) {
    bytes32 message = keccak256(abi.encodePacked(_user));
    return (recoverSigner(message, sig) == signerAddress);
  }

  function recoverSigner(bytes32 message, bytes memory sig) public pure returns (address) {
    uint8 v; bytes32 r; bytes32 s;
    (v, r, s) = splitSignature(sig);
    return ecrecover(message, v, r, s);
  }

  function splitSignature(bytes memory sig) public pure returns (uint8, bytes32, bytes32) {
    require(sig.length == 65);
    bytes32 r; bytes32 s; uint8 v;
    assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) }
    return (v, r, s);
  }

// ~~~~~~~~~~~~~~~~~~~~ Checks ~~~~~~~~~~~~~~~~~~~~

  // Check Wallet assets
  function walletOfOwner(address _owner) public view returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = _startTokenId();
    uint256 ownedTokenIndex = 0;
    address latestOwnerAddress;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) {
      TokenOwnership memory ownership = _ownerships[currentTokenId];

      if (!ownership.burned) {
        if (ownership.addr != address(0)) {
          latestOwnerAddress = ownership.addr;
        }

        if (latestOwnerAddress == _owner) {
          ownedTokenIds[ownedTokenIndex] = currentTokenId;
          ownedTokenIndex++;
        }
      }
      currentTokenId++;
    }
    return ownedTokenIds;
  }

  // Start Token
  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

  // TOKEN URI
  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token.");
    
    if (_tokenId > revealed) { return notRevealedURI; }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
    ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
    : "";
  }

// ~~~~~~~~~~~~~~~~~~~~ onlyOwner Functions ~~~~~~~~~~~~~~~~~~~~

  // SIGNER
  function setSigner(address _newSigner) public onlyOwner {
    signerAddress = _newSigner;
  }

  // REVEALED AMOUNT
  function setRevealed(uint256 _revealedAmount) public onlyOwner {
    revealed = _revealedAmount;
  }
  
  // PAUSE
  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  // SET COST
  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  // SET MAX SUPPLY
  function setMaxSupply(uint256 _MaxSupply) public onlyOwner {
    maxSupply = _MaxSupply;
  }

  // SET PHASE MAX SUPPLY
  function setPhaseMaxSupply(uint256 _phaseMaxSupply) public onlyOwner {
    PHASE_MAX_SUPPLY = _phaseMaxSupply;
  }
  
  // SET MAX MINT PER TRX
  function setMaxMintPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    MaxperTx = _maxMintAmountPerTx;
  }
  
  // SET MAX PER ADDRESS LIMIT
  function setMaxPerAddLimit(uint256 _maxPerAddLimit) public onlyOwner {
    nftPerAddressLimit = _maxPerAddLimit;
  }

  // SET BASE URI
  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }
  
  // SET HIDDEN URI
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedURI = _notRevealedURI;
  }

  // SET PUBLIC MINT STATE
  function setPublicMintState(bool _state) public onlyOwner {
    publicMintEnabled = _state;
  }

  // SET WHITELIST MINT STATE
  function setWLMintState(bool _state) public onlyOwner {
    whitelistMintEnabled = _state;
  }

  function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) {
    super.setApprovalForAll(operator, approved);
  }

  function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) {
    super.approve(operator, tokenId);
  }

  function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
    super.transferFrom(from, to, tokenId);
  }

  function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
    super.safeTransferFrom(from, to, tokenId);
  }

  function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) {
    super.safeTransferFrom(from, to, tokenId, data);
  }

  function withdraw() public onlyOwner nonReentrant {
    (bool os, ) = payable(0x3aB45C090472F3b12bCA53f8D16A4Cc34ac6B2ea).call{value: address(this).balance}('');
    require(os);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MaxperTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"isValidData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"mintWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","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":"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAddLimit","type":"uint256"}],"name":"setMaxPerAddLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phaseMaxSupply","type":"uint256"}],"name":"setPhaseMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revealedAmount","type":"uint256"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWLMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90805190602001906200005192919062000508565b5067013fbe85edc90000600e55610271600f55610271601055600260115560026012556000601360006101000a81548160ff02191690831515021790555060006014556000601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff021916908315150217905550348015620000d757600080fd5b5060405162005e1938038062005e198339818101604052810190620000fd919062000622565b733cc6cdda760b79bafa08df41ecfa224f810dceb660006040518060400160405280600a81526020017f414c49454e41544f5253000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f414d42000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200019892919062000508565b508060039080519060200190620001b192919062000508565b50620001c26200043160201b60201c565b6000819055505050620001ea620001de6200043a60201b60201c565b6200044260201b60201c565b600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620003e7578015620002ad576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200027392919062000665565b600060405180830381600087803b1580156200028e57600080fd5b505af1158015620002a3573d6000803e3d6000fd5b50505050620003e6565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000367576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200032d92919062000665565b600060405180830381600087803b1580156200034857600080fd5b505af11580156200035d573d6000803e3d6000fd5b50505050620003e5565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620003b0919062000692565b600060405180830381600087803b158015620003cb57600080fd5b505af1158015620003e0573d6000803e3d6000fd5b505050505b5b5b505080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000713565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200051690620006de565b90600052602060002090601f0160209004810192826200053a576000855562000586565b82601f106200055557805160ff191683800117855562000586565b8280016001018555821562000586579182015b828111156200058557825182559160200191906001019062000568565b5b50905062000595919062000599565b5090565b5b80821115620005b45760008160009055506001016200059a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005ea82620005bd565b9050919050565b620005fc81620005dd565b81146200060857600080fd5b50565b6000815190506200061c81620005f1565b92915050565b6000602082840312156200063b576200063a620005b8565b5b60006200064b848285016200060b565b91505092915050565b6200065f81620005dd565b82525050565b60006040820190506200067c600083018562000654565b6200068b602083018462000654565b9392505050565b6000602082019050620006a9600083018462000654565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006f757607f821691505b6020821081036200070d576200070c620006af565b5b50919050565b6156f680620007236000396000f3fe6080604052600436106102ff5760003560e01c806362b99ad4116101905780639f41554a116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610b6f578063f2c4ce1e14610bac578063f2fde38b14610bd5578063ff64569114610bfe576102ff565b8063c87b56dd14610aeb578063d5abeb0114610b28578063db7fd40814610b53576102ff565b80639f41554a146109c9578063a22cb465146109f2578063a7bb580314610a1b578063b0940d4514610a5a578063b88d4fde14610a97578063ba7d2c7614610ac0576102ff565b8063715018a611610149578063879fbedf11610123578063879fbedf1461090d5780638da5cb5b1461093657806395d89b411461096157806397aba7f91461098c576102ff565b8063715018a6146108a257806372250380146108b95780637ec4a659146108e4576102ff565b806362b99ad4146107805780636352211e146107ab5780636c19e783146107e85780636caede3d146108115780636f8b44b01461083c57806370a0823114610865576102ff565b80633ccfd60b1161024f5780634d973765116102085780635503a0e8116101e25780635503a0e8146106d65780635b7633d0146107015780635c975abb1461072c578063616cdb1e14610757576102ff565b80634d97376514610659578063512b658d1461068257806351830227146106ab576102ff565b80633ccfd60b1461055f57806341f434341461057657806342842e0e146105a1578063438b6300146105ca57806344a0d68a14610607578063489f2bcd14610630576102ff565b806316c38b3c116102bc57806323b872dd1161029657806323b872dd146104b95780632d8be39b146104e25780632fd5bce21461050b57806332282af114610534576102ff565b806316c38b3c1461042857806318160ddd1461045157806318cae2691461047c576102ff565b806301ffc9a71461030457806306fdde0314610341578063081812fc1461036c578063095ea7b3146103a95780630f4161aa146103d257806313faede6146103fd575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613fd3565b610c29565b604051610338919061401b565b60405180910390f35b34801561034d57600080fd5b50610356610d0b565b60405161036391906140cf565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190614127565b610d9d565b6040516103a09190614195565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906141dc565b610e19565b005b3480156103de57600080fd5b506103e7610e32565b6040516103f4919061401b565b60405180910390f35b34801561040957600080fd5b50610412610e45565b60405161041f919061422b565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190614272565b610e4b565b005b34801561045d57600080fd5b50610466610ee4565b604051610473919061422b565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061429f565b610efb565b6040516104b0919061422b565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db91906142cc565b610f13565b005b3480156104ee57600080fd5b5061050960048036038101906105049190614127565b610f62565b005b34801561051757600080fd5b50610532600480360381019061052d9190614127565b610fe8565b005b34801561054057600080fd5b5061054961106e565b604051610556919061422b565b60405180910390f35b34801561056b57600080fd5b50610574611074565b005b34801561058257600080fd5b5061058b6111d2565b604051610598919061437e565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906142cc565b6111e4565b005b3480156105d657600080fd5b506105f160048036038101906105ec919061429f565b611233565b6040516105fe9190614457565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190614127565b611446565b005b34801561063c57600080fd5b5061065760048036038101906106529190614127565b6114cc565b005b34801561066557600080fd5b50610680600480360381019061067b9190614272565b611552565b005b34801561068e57600080fd5b506106a960048036038101906106a49190614479565b6115eb565b005b3480156106b757600080fd5b506106c06116cc565b6040516106cd919061422b565b60405180910390f35b3480156106e257600080fd5b506106eb6116d2565b6040516106f891906140cf565b60405180910390f35b34801561070d57600080fd5b50610716611760565b6040516107239190614195565b60405180910390f35b34801561073857600080fd5b50610741611786565b60405161074e919061401b565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190614127565b611799565b005b34801561078c57600080fd5b5061079561181f565b6040516107a291906140cf565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd9190614127565b6118ad565b6040516107df9190614195565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a919061429f565b6118c3565b005b34801561081d57600080fd5b50610826611983565b604051610833919061401b565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190614127565b611996565b005b34801561087157600080fd5b5061088c6004803603810190610887919061429f565b611a1c565b604051610899919061422b565b60405180910390f35b3480156108ae57600080fd5b506108b7611aeb565b005b3480156108c557600080fd5b506108ce611b73565b6040516108db91906140cf565b60405180910390f35b3480156108f057600080fd5b5061090b600480360381019061090691906145ee565b611c01565b005b34801561091957600080fd5b50610934600480360381019061092f9190614272565b611c97565b005b34801561094257600080fd5b5061094b611d30565b6040516109589190614195565b60405180910390f35b34801561096d57600080fd5b50610976611d5a565b60405161098391906140cf565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae919061470e565b611dec565b6040516109c09190614195565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb919061476a565b611e61565b005b3480156109fe57600080fd5b50610a196004803603810190610a1491906147c6565b6121ba565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614806565b6121d3565b604051610a519392919061487a565b60405180910390f35b348015610a6657600080fd5b50610a816004803603810190610a7c91906148b1565b612216565b604051610a8e919061401b565b60405180910390f35b348015610aa357600080fd5b50610abe6004803603810190610ab9919061490d565b6122a5565b005b348015610acc57600080fd5b50610ad56122f6565b604051610ae2919061422b565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d9190614127565b6122fc565b604051610b1f91906140cf565b60405180910390f35b348015610b3457600080fd5b50610b3d612443565b604051610b4a919061422b565b60405180910390f35b610b6d6004803603810190610b68919061476a565b612449565b005b348015610b7b57600080fd5b50610b966004803603810190610b919190614990565b61276b565b604051610ba3919061401b565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce91906145ee565b6127ff565b005b348015610be157600080fd5b50610bfc6004803603810190610bf7919061429f565b612895565b005b348015610c0a57600080fd5b50610c1361298c565b604051610c20919061422b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cf457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d045750610d0382612992565b5b9050919050565b606060028054610d1a906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610d46906149ff565b8015610d935780601f10610d6857610100808354040283529160200191610d93565b820191906000526020600020905b815481529060010190602001808311610d7657829003601f168201915b5050505050905090565b6000610da8826129fc565b610dde576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610e2381612a4a565b610e2d8383612b47565b505050565b601560009054906101000a900460ff1681565b600e5481565b610e53612c4b565b73ffffffffffffffffffffffffffffffffffffffff16610e71611d30565b73ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90614a7c565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6000610eee612c53565b6001546000540303905090565b60166020528060005260406000206000915090505481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f5157610f5033612a4a565b5b610f5c848484612c5c565b50505050565b610f6a612c4b565b73ffffffffffffffffffffffffffffffffffffffff16610f88611d30565b73ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590614a7c565b60405180910390fd5b8060108190555050565b610ff0612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661100e611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614a7c565b60405180910390fd5b8060148190555050565b60105481565b61107c612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661109a611d30565b73ffffffffffffffffffffffffffffffffffffffff16146110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790614a7c565b60405180910390fd5b600260095403611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90614ae8565b60405180910390fd5b60026009819055506000733ab45c090472f3b12bca53f8d16a4cc34ac6b2ea73ffffffffffffffffffffffffffffffffffffffff164760405161117790614b39565b60006040518083038185875af1925050503d80600081146111b4576040519150601f19603f3d011682016040523d82523d6000602084013e6111b9565b606091505b50509050806111c757600080fd5b506001600981905550565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112225761122133612a4a565b5b61122d848484612c6c565b50505050565b6060600061124083611a1c565b905060008167ffffffffffffffff81111561125e5761125d6144c3565b5b60405190808252806020026020018201604052801561128c5781602001602082028036833780820191505090505b5090506000611299612c53565b90506000805b84821080156112af575060005483105b15611439576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161142557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146113c257806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611424578385848151811061140957611408614b4e565b5b602002602001018181525050828061142090614bac565b9350505b5b838061143090614bac565b9450505061129f565b8395505050505050919050565b61144e612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661146c611d30565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990614a7c565b60405180910390fd5b80600e8190555050565b6114d4612c4b565b73ffffffffffffffffffffffffffffffffffffffff166114f2611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614a7c565b60405180910390fd5b8060128190555050565b61155a612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611578611d30565b73ffffffffffffffffffffffffffffffffffffffff16146115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c590614a7c565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b6115f3612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611611611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90614a7c565b60405180910390fd5b600f5482611673610ee4565b61167d9190614bf4565b11156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614c96565b60405180910390fd5b6116c88183612c8c565b5050565b60145481565b600d80546116df906149ff565b80601f016020809104026020016040519081016040528092919081815260200182805461170b906149ff565b80156117585780601f1061172d57610100808354040283529160200191611758565b820191906000526020600020905b81548152906001019060200180831161173b57829003601f168201915b505050505081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900460ff1681565b6117a1612c4b565b73ffffffffffffffffffffffffffffffffffffffff166117bf611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614a7c565b60405180910390fd5b8060118190555050565b600b805461182c906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611858906149ff565b80156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b505050505081565b60006118b882612caa565b600001519050919050565b6118cb612c4b565b73ffffffffffffffffffffffffffffffffffffffff166118e9611d30565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690614a7c565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560019054906101000a900460ff1681565b61199e612c4b565b73ffffffffffffffffffffffffffffffffffffffff166119bc611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990614a7c565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a83576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611af3612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611b11611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90614a7c565b60405180910390fd5b611b716000612f35565b565b600c8054611b80906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611bac906149ff565b8015611bf95780601f10611bce57610100808354040283529160200191611bf9565b820191906000526020600020905b815481529060010190602001808311611bdc57829003601f168201915b505050505081565b611c09612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611c27611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614a7c565b60405180910390fd5b80600b9080519060200190611c93929190613e81565b5050565b611c9f612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611cbd611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614a7c565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611d69906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611d95906149ff565b8015611de25780601f10611db757610100808354040283529160200191611de2565b820191906000526020600020905b815481529060010190602001808311611dc557829003601f168201915b5050505050905090565b600080600080611dfb856121d3565b80935081945082955050505060018684848460405160008152602001604052604051611e2a9493929190614cb6565b6020604051602081039080840390855afa158015611e4c573d6000803e3d6000fd5b50505060206040510351935050505092915050565b81601360009054906101000a900460ff1615611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614d47565b60405180910390fd5b60008111611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec90614db3565b60405180910390fd5b601154811115611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190614e45565b60405180910390fd5b60125481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f889190614bf4565b1115611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc090614ed7565b60405180910390fd5b600f5481611fd5610ee4565b611fdf9190614bf4565b1115612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790614c96565b60405180910390fd5b601560019054906101000a900460ff1661206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690614f69565b60405180910390fd5b6001151561207d3384612216565b1515146120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614fd5565b60405180910390fd5b60125483601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210d9190614bf4565b111561214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590615041565b60405180910390fd5b82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219d9190614bf4565b925050819055506121b56121af612c4b565b84612c8c565b505050565b816121c481612a4a565b6121ce8383612ffb565b505050565b600080600060418451146121e657600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b6000808360405160200161222a91906150a9565b604051602081830303815290604052805190602001209050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122858285611dec565b73ffffffffffffffffffffffffffffffffffffffff161491505092915050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146122e3576122e233612a4a565b5b6122ef85858585613172565b5050505050565b60125481565b6060612307826129fc565b612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d90615136565b60405180910390fd5b6014548211156123e257600c805461235d906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612389906149ff565b80156123d65780601f106123ab576101008083540402835291602001916123d6565b820191906000526020600020905b8154815290600101906020018083116123b957829003601f168201915b5050505050905061243e565b60006123ec6131ea565b9050600081511161240c576040518060200160405280600081525061243a565b806124168461327c565b600d60405160200161242a93929190615226565b6040516020818303038152906040525b9150505b919050565b600f5481565b81601360009054906101000a900460ff161561249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190614d47565b60405180910390fd5b600081116124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614db3565b60405180910390fd5b601154811115612522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251990614e45565b60405180910390fd5b60125481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125709190614bf4565b11156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890614ed7565b60405180910390fd5b600f54816125bd610ee4565b6125c79190614bf4565b1115612608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ff90614c96565b60405180910390fd5b8280600e546126179190615257565b341015612659576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612650906152fd565b60405180910390fd5b601560009054906101000a900460ff166126a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269f90615369565b60405180910390fd5b601054846126b4610ee4565b6126be9190614bf4565b106126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f5906153fb565b60405180910390fd5b83601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274d9190614bf4565b9250508190555061276561275f612c4b565b85612c8c565b50505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612807612c4b565b73ffffffffffffffffffffffffffffffffffffffff16612825611d30565b73ffffffffffffffffffffffffffffffffffffffff161461287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290614a7c565b60405180910390fd5b80600c9080519060200190612891929190613e81565b5050565b61289d612c4b565b73ffffffffffffffffffffffffffffffffffffffff166128bb611d30565b73ffffffffffffffffffffffffffffffffffffffff1614612911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290890614a7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129779061548d565b60405180910390fd5b61298981612f35565b50565b60115481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612a07612c53565b11158015612a16575060005482105b8015612a43575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115612b44576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612ac19291906154ad565b602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0291906154eb565b612b4357806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401612b3a9190614195565b60405180910390fd5b5b50565b6000612b52826118ad565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bb9576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16612bd8612c4b565b73ffffffffffffffffffffffffffffffffffffffff1614612c3b57612c0481612bff612c4b565b61276b565b612c3a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b612c468383836133dc565b505050565b600033905090565b60006001905090565b612c6783838361348e565b505050565b612c87838383604051806020016040528060008152506122a5565b505050565b612ca6828260405180602001604052806000815250613942565b5050565b612cb2613f07565b600082905080612cc0612c53565b11612efe57600054811015612efd576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612efb57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ddf578092505050612f30565b5b600115612efa57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ef5578092505050612f30565b612de0565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613003612c4b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613067576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000613074612c4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16613121612c4b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613166919061401b565b60405180910390a35050565b61317d84848461348e565b61319c8373ffffffffffffffffffffffffffffffffffffffff16613d02565b156131e4576131ad84848484613d25565b6131e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600b80546131f9906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054613225906149ff565b80156132725780601f1061324757610100808354040283529160200191613272565b820191906000526020600020905b81548152906001019060200180831161325557829003601f168201915b5050505050905090565b6060600082036132c3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133d7565b600082905060005b600082146132f55780806132de90614bac565b915050600a826132ee9190615547565b91506132cb565b60008167ffffffffffffffff811115613311576133106144c3565b5b6040519080825280601f01601f1916602001820160405280156133435781602001600182028036833780820191505090505b5090505b600085146133d05760018261335c9190615578565b9150600a8561336b91906155ac565b60306133779190614bf4565b60f81b81838151811061338d5761338c614b4e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133c99190615547565b9450613347565b8093505050505b919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061349982612caa565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613504576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16613525612c4b565b73ffffffffffffffffffffffffffffffffffffffff16148061355457506135538561354e612c4b565b61276b565b5b806135995750613562612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661358184610d9d565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806135d2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613638576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136458585856001613e75565b613651600084876133dc565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036138d05760005482146138cf57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461393b8585856001613e7b565b5050505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036139ae576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036139e8576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6139f56000858386613e75565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050613bb68673ffffffffffffffffffffffffffffffffffffffff16613d02565b15613c7b575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c2b6000878480600101955087613d25565b613c61576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210613bbc578260005414613c7657600080fd5b613ce6565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613c7c575b816000819055505050613cfc6000858386613e7b565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613d4b612c4b565b8786866040518563ffffffff1660e01b8152600401613d6d9493929190615632565b6020604051808303816000875af1925050508015613da957506040513d601f19601f82011682018060405250810190613da69190615693565b60015b613e22573d8060008114613dd9576040519150601f19603f3d011682016040523d82523d6000602084013e613dde565b606091505b506000815103613e1a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b50505050565b828054613e8d906149ff565b90600052602060002090601f016020900481019282613eaf5760008555613ef6565b82601f10613ec857805160ff1916838001178555613ef6565b82800160010185558215613ef6579182015b82811115613ef5578251825591602001919060010190613eda565b5b509050613f039190613f4a565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613f63576000816000905550600101613f4b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613fb081613f7b565b8114613fbb57600080fd5b50565b600081359050613fcd81613fa7565b92915050565b600060208284031215613fe957613fe8613f71565b5b6000613ff784828501613fbe565b91505092915050565b60008115159050919050565b61401581614000565b82525050565b6000602082019050614030600083018461400c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614070578082015181840152602081019050614055565b8381111561407f576000848401525b50505050565b6000601f19601f8301169050919050565b60006140a182614036565b6140ab8185614041565b93506140bb818560208601614052565b6140c481614085565b840191505092915050565b600060208201905081810360008301526140e98184614096565b905092915050565b6000819050919050565b614104816140f1565b811461410f57600080fd5b50565b600081359050614121816140fb565b92915050565b60006020828403121561413d5761413c613f71565b5b600061414b84828501614112565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061417f82614154565b9050919050565b61418f81614174565b82525050565b60006020820190506141aa6000830184614186565b92915050565b6141b981614174565b81146141c457600080fd5b50565b6000813590506141d6816141b0565b92915050565b600080604083850312156141f3576141f2613f71565b5b6000614201858286016141c7565b925050602061421285828601614112565b9150509250929050565b614225816140f1565b82525050565b6000602082019050614240600083018461421c565b92915050565b61424f81614000565b811461425a57600080fd5b50565b60008135905061426c81614246565b92915050565b60006020828403121561428857614287613f71565b5b60006142968482850161425d565b91505092915050565b6000602082840312156142b5576142b4613f71565b5b60006142c3848285016141c7565b91505092915050565b6000806000606084860312156142e5576142e4613f71565b5b60006142f3868287016141c7565b9350506020614304868287016141c7565b925050604061431586828701614112565b9150509250925092565b6000819050919050565b600061434461433f61433a84614154565b61431f565b614154565b9050919050565b600061435682614329565b9050919050565b60006143688261434b565b9050919050565b6143788161435d565b82525050565b6000602082019050614393600083018461436f565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ce816140f1565b82525050565b60006143e083836143c5565b60208301905092915050565b6000602082019050919050565b600061440482614399565b61440e81856143a4565b9350614419836143b5565b8060005b8381101561444a57815161443188826143d4565b975061443c836143ec565b92505060018101905061441d565b5085935050505092915050565b6000602082019050818103600083015261447181846143f9565b905092915050565b600080604083850312156144905761448f613f71565b5b600061449e85828601614112565b92505060206144af858286016141c7565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6144fb82614085565b810181811067ffffffffffffffff8211171561451a576145196144c3565b5b80604052505050565b600061452d613f67565b905061453982826144f2565b919050565b600067ffffffffffffffff821115614559576145586144c3565b5b61456282614085565b9050602081019050919050565b82818337600083830152505050565b600061459161458c8461453e565b614523565b9050828152602081018484840111156145ad576145ac6144be565b5b6145b884828561456f565b509392505050565b600082601f8301126145d5576145d46144b9565b5b81356145e584826020860161457e565b91505092915050565b60006020828403121561460457614603613f71565b5b600082013567ffffffffffffffff81111561462257614621613f76565b5b61462e848285016145c0565b91505092915050565b6000819050919050565b61464a81614637565b811461465557600080fd5b50565b60008135905061466781614641565b92915050565b600067ffffffffffffffff821115614688576146876144c3565b5b61469182614085565b9050602081019050919050565b60006146b16146ac8461466d565b614523565b9050828152602081018484840111156146cd576146cc6144be565b5b6146d884828561456f565b509392505050565b600082601f8301126146f5576146f46144b9565b5b813561470584826020860161469e565b91505092915050565b6000806040838503121561472557614724613f71565b5b600061473385828601614658565b925050602083013567ffffffffffffffff81111561475457614753613f76565b5b614760858286016146e0565b9150509250929050565b6000806040838503121561478157614780613f71565b5b600061478f85828601614112565b925050602083013567ffffffffffffffff8111156147b0576147af613f76565b5b6147bc858286016146e0565b9150509250929050565b600080604083850312156147dd576147dc613f71565b5b60006147eb858286016141c7565b92505060206147fc8582860161425d565b9150509250929050565b60006020828403121561481c5761481b613f71565b5b600082013567ffffffffffffffff81111561483a57614839613f76565b5b614846848285016146e0565b91505092915050565b600060ff82169050919050565b6148658161484f565b82525050565b61487481614637565b82525050565b600060608201905061488f600083018661485c565b61489c602083018561486b565b6148a9604083018461486b565b949350505050565b600080604083850312156148c8576148c7613f71565b5b60006148d6858286016141c7565b925050602083013567ffffffffffffffff8111156148f7576148f6613f76565b5b614903858286016146e0565b9150509250929050565b6000806000806080858703121561492757614926613f71565b5b6000614935878288016141c7565b9450506020614946878288016141c7565b935050604061495787828801614112565b925050606085013567ffffffffffffffff81111561497857614977613f76565b5b614984878288016146e0565b91505092959194509250565b600080604083850312156149a7576149a6613f71565b5b60006149b5858286016141c7565b92505060206149c6858286016141c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a1757607f821691505b602082108103614a2a57614a296149d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a66602083614041565b9150614a7182614a30565b602082019050919050565b60006020820190508181036000830152614a9581614a59565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ad2601f83614041565b9150614add82614a9c565b602082019050919050565b60006020820190508181036000830152614b0181614ac5565b9050919050565b600081905092915050565b50565b6000614b23600083614b08565b9150614b2e82614b13565b600082019050919050565b6000614b4482614b16565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb7826140f1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614be957614be8614b7d565b5b600182019050919050565b6000614bff826140f1565b9150614c0a836140f1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3f57614c3e614b7d565b5b828201905092915050565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b6000614c80601f83614041565b9150614c8b82614c4a565b602082019050919050565b60006020820190508181036000830152614caf81614c73565b9050919050565b6000608082019050614ccb600083018761486b565b614cd8602083018661485c565b614ce5604083018561486b565b614cf2606083018461486b565b95945050505050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000614d31601783614041565b9150614d3c82614cfb565b602082019050919050565b60006020820190508181036000830152614d6081614d24565b9050919050565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b6000614d9d601a83614041565b9150614da882614d67565b602082019050919050565b60006020820190508181036000830152614dcc81614d90565b9050919050565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e2f602283614041565b9150614e3a82614dd3565b604082019050919050565b60006020820190508181036000830152614e5e81614e22565b9050919050565b7f4d6178206d696e7420616d6f756e74207065722061646472657373206578636560008201527f6564656421000000000000000000000000000000000000000000000000000000602082015250565b6000614ec1602583614041565b9150614ecc82614e65565b604082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f57686974656c697374206d696e74206973206e6f74206163746976652079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f53602183614041565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f55736572206973206e6f742077686974656c6973746564210000000000000000600082015250565b6000614fbf601883614041565b9150614fca82614f89565b602082019050919050565b60006020820190508181036000830152614fee81614fb2565b9050919050565b7f4d61782057686974656c697374206d696e742065786365656465642100000000600082015250565b600061502b601c83614041565b915061503682614ff5565b602082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b60008160601b9050919050565b600061507982615061565b9050919050565b600061508b8261506e565b9050919050565b6150a361509e82614174565b615080565b82525050565b60006150b58284615092565b60148201915081905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b6000615120603083614041565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b600081905092915050565b600061516c82614036565b6151768185615156565b9350615186818560208601614052565b80840191505092915050565b60008190508160005260206000209050919050565b600081546151b4816149ff565b6151be8186615156565b945060018216600081146151d957600181146151ea5761521d565b60ff1983168652818601935061521d565b6151f385615192565b60005b83811015615215578154818901526001820191506020810190506151f6565b838801955050505b50505092915050565b60006152328286615161565b915061523e8285615161565b915061524a82846151a7565b9150819050949350505050565b6000615262826140f1565b915061526d836140f1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152a6576152a5614b7d565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006152e7601383614041565b91506152f2826152b1565b602082019050919050565b60006020820190508181036000830152615316816152da565b9050919050565b7f5075626c6963206d696e74206973206e6f742061637469766520796574210000600082015250565b6000615353601e83614041565b915061535e8261531d565b602082019050919050565b6000602082019050818103600083015261538281615346565b9050919050565b7f416c69656e61746f72733a205068617365206d696e74206c696d69742072656160008201527f6368656421000000000000000000000000000000000000000000000000000000602082015250565b60006153e5602583614041565b91506153f082615389565b604082019050919050565b60006020820190508181036000830152615414816153d8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615477602683614041565b91506154828261541b565b604082019050919050565b600060208201905081810360008301526154a68161546a565b9050919050565b60006040820190506154c26000830185614186565b6154cf6020830184614186565b9392505050565b6000815190506154e581614246565b92915050565b60006020828403121561550157615500613f71565b5b600061550f848285016154d6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615552826140f1565b915061555d836140f1565b92508261556d5761556c615518565b5b828204905092915050565b6000615583826140f1565b915061558e836140f1565b9250828210156155a1576155a0614b7d565b5b828203905092915050565b60006155b7826140f1565b91506155c2836140f1565b9250826155d2576155d1615518565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000615604826155dd565b61560e81856155e8565b935061561e818560208601614052565b61562781614085565b840191505092915050565b60006080820190506156476000830187614186565b6156546020830186614186565b615661604083018561421c565b818103606083015261567381846155f9565b905095945050505050565b60008151905061568d81613fa7565b92915050565b6000602082840312156156a9576156a8613f71565b5b60006156b78482850161567e565b9150509291505056fea2646970667358221220362a2a4f4eabbfb3595c7560912a53f55a17a0b17c226c641537f6430fcb77e764736f6c634300080d003300000000000000000000000011ab585988d1664f5108c5effee1e4bd2649a2b4

Deployed Bytecode

0x6080604052600436106102ff5760003560e01c806362b99ad4116101905780639f41554a116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610b6f578063f2c4ce1e14610bac578063f2fde38b14610bd5578063ff64569114610bfe576102ff565b8063c87b56dd14610aeb578063d5abeb0114610b28578063db7fd40814610b53576102ff565b80639f41554a146109c9578063a22cb465146109f2578063a7bb580314610a1b578063b0940d4514610a5a578063b88d4fde14610a97578063ba7d2c7614610ac0576102ff565b8063715018a611610149578063879fbedf11610123578063879fbedf1461090d5780638da5cb5b1461093657806395d89b411461096157806397aba7f91461098c576102ff565b8063715018a6146108a257806372250380146108b95780637ec4a659146108e4576102ff565b806362b99ad4146107805780636352211e146107ab5780636c19e783146107e85780636caede3d146108115780636f8b44b01461083c57806370a0823114610865576102ff565b80633ccfd60b1161024f5780634d973765116102085780635503a0e8116101e25780635503a0e8146106d65780635b7633d0146107015780635c975abb1461072c578063616cdb1e14610757576102ff565b80634d97376514610659578063512b658d1461068257806351830227146106ab576102ff565b80633ccfd60b1461055f57806341f434341461057657806342842e0e146105a1578063438b6300146105ca57806344a0d68a14610607578063489f2bcd14610630576102ff565b806316c38b3c116102bc57806323b872dd1161029657806323b872dd146104b95780632d8be39b146104e25780632fd5bce21461050b57806332282af114610534576102ff565b806316c38b3c1461042857806318160ddd1461045157806318cae2691461047c576102ff565b806301ffc9a71461030457806306fdde0314610341578063081812fc1461036c578063095ea7b3146103a95780630f4161aa146103d257806313faede6146103fd575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613fd3565b610c29565b604051610338919061401b565b60405180910390f35b34801561034d57600080fd5b50610356610d0b565b60405161036391906140cf565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190614127565b610d9d565b6040516103a09190614195565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906141dc565b610e19565b005b3480156103de57600080fd5b506103e7610e32565b6040516103f4919061401b565b60405180910390f35b34801561040957600080fd5b50610412610e45565b60405161041f919061422b565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190614272565b610e4b565b005b34801561045d57600080fd5b50610466610ee4565b604051610473919061422b565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061429f565b610efb565b6040516104b0919061422b565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db91906142cc565b610f13565b005b3480156104ee57600080fd5b5061050960048036038101906105049190614127565b610f62565b005b34801561051757600080fd5b50610532600480360381019061052d9190614127565b610fe8565b005b34801561054057600080fd5b5061054961106e565b604051610556919061422b565b60405180910390f35b34801561056b57600080fd5b50610574611074565b005b34801561058257600080fd5b5061058b6111d2565b604051610598919061437e565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906142cc565b6111e4565b005b3480156105d657600080fd5b506105f160048036038101906105ec919061429f565b611233565b6040516105fe9190614457565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190614127565b611446565b005b34801561063c57600080fd5b5061065760048036038101906106529190614127565b6114cc565b005b34801561066557600080fd5b50610680600480360381019061067b9190614272565b611552565b005b34801561068e57600080fd5b506106a960048036038101906106a49190614479565b6115eb565b005b3480156106b757600080fd5b506106c06116cc565b6040516106cd919061422b565b60405180910390f35b3480156106e257600080fd5b506106eb6116d2565b6040516106f891906140cf565b60405180910390f35b34801561070d57600080fd5b50610716611760565b6040516107239190614195565b60405180910390f35b34801561073857600080fd5b50610741611786565b60405161074e919061401b565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190614127565b611799565b005b34801561078c57600080fd5b5061079561181f565b6040516107a291906140cf565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd9190614127565b6118ad565b6040516107df9190614195565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a919061429f565b6118c3565b005b34801561081d57600080fd5b50610826611983565b604051610833919061401b565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190614127565b611996565b005b34801561087157600080fd5b5061088c6004803603810190610887919061429f565b611a1c565b604051610899919061422b565b60405180910390f35b3480156108ae57600080fd5b506108b7611aeb565b005b3480156108c557600080fd5b506108ce611b73565b6040516108db91906140cf565b60405180910390f35b3480156108f057600080fd5b5061090b600480360381019061090691906145ee565b611c01565b005b34801561091957600080fd5b50610934600480360381019061092f9190614272565b611c97565b005b34801561094257600080fd5b5061094b611d30565b6040516109589190614195565b60405180910390f35b34801561096d57600080fd5b50610976611d5a565b60405161098391906140cf565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae919061470e565b611dec565b6040516109c09190614195565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb919061476a565b611e61565b005b3480156109fe57600080fd5b50610a196004803603810190610a1491906147c6565b6121ba565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614806565b6121d3565b604051610a519392919061487a565b60405180910390f35b348015610a6657600080fd5b50610a816004803603810190610a7c91906148b1565b612216565b604051610a8e919061401b565b60405180910390f35b348015610aa357600080fd5b50610abe6004803603810190610ab9919061490d565b6122a5565b005b348015610acc57600080fd5b50610ad56122f6565b604051610ae2919061422b565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d9190614127565b6122fc565b604051610b1f91906140cf565b60405180910390f35b348015610b3457600080fd5b50610b3d612443565b604051610b4a919061422b565b60405180910390f35b610b6d6004803603810190610b68919061476a565b612449565b005b348015610b7b57600080fd5b50610b966004803603810190610b919190614990565b61276b565b604051610ba3919061401b565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce91906145ee565b6127ff565b005b348015610be157600080fd5b50610bfc6004803603810190610bf7919061429f565b612895565b005b348015610c0a57600080fd5b50610c1361298c565b604051610c20919061422b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cf457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d045750610d0382612992565b5b9050919050565b606060028054610d1a906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610d46906149ff565b8015610d935780601f10610d6857610100808354040283529160200191610d93565b820191906000526020600020905b815481529060010190602001808311610d7657829003601f168201915b5050505050905090565b6000610da8826129fc565b610dde576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610e2381612a4a565b610e2d8383612b47565b505050565b601560009054906101000a900460ff1681565b600e5481565b610e53612c4b565b73ffffffffffffffffffffffffffffffffffffffff16610e71611d30565b73ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90614a7c565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6000610eee612c53565b6001546000540303905090565b60166020528060005260406000206000915090505481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f5157610f5033612a4a565b5b610f5c848484612c5c565b50505050565b610f6a612c4b565b73ffffffffffffffffffffffffffffffffffffffff16610f88611d30565b73ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590614a7c565b60405180910390fd5b8060108190555050565b610ff0612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661100e611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614a7c565b60405180910390fd5b8060148190555050565b60105481565b61107c612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661109a611d30565b73ffffffffffffffffffffffffffffffffffffffff16146110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790614a7c565b60405180910390fd5b600260095403611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90614ae8565b60405180910390fd5b60026009819055506000733ab45c090472f3b12bca53f8d16a4cc34ac6b2ea73ffffffffffffffffffffffffffffffffffffffff164760405161117790614b39565b60006040518083038185875af1925050503d80600081146111b4576040519150601f19603f3d011682016040523d82523d6000602084013e6111b9565b606091505b50509050806111c757600080fd5b506001600981905550565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112225761122133612a4a565b5b61122d848484612c6c565b50505050565b6060600061124083611a1c565b905060008167ffffffffffffffff81111561125e5761125d6144c3565b5b60405190808252806020026020018201604052801561128c5781602001602082028036833780820191505090505b5090506000611299612c53565b90506000805b84821080156112af575060005483105b15611439576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161142557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146113c257806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611424578385848151811061140957611408614b4e565b5b602002602001018181525050828061142090614bac565b9350505b5b838061143090614bac565b9450505061129f565b8395505050505050919050565b61144e612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661146c611d30565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990614a7c565b60405180910390fd5b80600e8190555050565b6114d4612c4b565b73ffffffffffffffffffffffffffffffffffffffff166114f2611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90614a7c565b60405180910390fd5b8060128190555050565b61155a612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611578611d30565b73ffffffffffffffffffffffffffffffffffffffff16146115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c590614a7c565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b6115f3612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611611611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90614a7c565b60405180910390fd5b600f5482611673610ee4565b61167d9190614bf4565b11156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614c96565b60405180910390fd5b6116c88183612c8c565b5050565b60145481565b600d80546116df906149ff565b80601f016020809104026020016040519081016040528092919081815260200182805461170b906149ff565b80156117585780601f1061172d57610100808354040283529160200191611758565b820191906000526020600020905b81548152906001019060200180831161173b57829003601f168201915b505050505081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900460ff1681565b6117a1612c4b565b73ffffffffffffffffffffffffffffffffffffffff166117bf611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614a7c565b60405180910390fd5b8060118190555050565b600b805461182c906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611858906149ff565b80156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b505050505081565b60006118b882612caa565b600001519050919050565b6118cb612c4b565b73ffffffffffffffffffffffffffffffffffffffff166118e9611d30565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690614a7c565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560019054906101000a900460ff1681565b61199e612c4b565b73ffffffffffffffffffffffffffffffffffffffff166119bc611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990614a7c565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a83576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611af3612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611b11611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90614a7c565b60405180910390fd5b611b716000612f35565b565b600c8054611b80906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611bac906149ff565b8015611bf95780601f10611bce57610100808354040283529160200191611bf9565b820191906000526020600020905b815481529060010190602001808311611bdc57829003601f168201915b505050505081565b611c09612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611c27611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614a7c565b60405180910390fd5b80600b9080519060200190611c93929190613e81565b5050565b611c9f612c4b565b73ffffffffffffffffffffffffffffffffffffffff16611cbd611d30565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614a7c565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611d69906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611d95906149ff565b8015611de25780601f10611db757610100808354040283529160200191611de2565b820191906000526020600020905b815481529060010190602001808311611dc557829003601f168201915b5050505050905090565b600080600080611dfb856121d3565b80935081945082955050505060018684848460405160008152602001604052604051611e2a9493929190614cb6565b6020604051602081039080840390855afa158015611e4c573d6000803e3d6000fd5b50505060206040510351935050505092915050565b81601360009054906101000a900460ff1615611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614d47565b60405180910390fd5b60008111611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec90614db3565b60405180910390fd5b601154811115611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190614e45565b60405180910390fd5b60125481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f889190614bf4565b1115611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc090614ed7565b60405180910390fd5b600f5481611fd5610ee4565b611fdf9190614bf4565b1115612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790614c96565b60405180910390fd5b601560019054906101000a900460ff1661206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690614f69565b60405180910390fd5b6001151561207d3384612216565b1515146120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614fd5565b60405180910390fd5b60125483601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210d9190614bf4565b111561214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590615041565b60405180910390fd5b82601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219d9190614bf4565b925050819055506121b56121af612c4b565b84612c8c565b505050565b816121c481612a4a565b6121ce8383612ffb565b505050565b600080600060418451146121e657600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b6000808360405160200161222a91906150a9565b604051602081830303815290604052805190602001209050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122858285611dec565b73ffffffffffffffffffffffffffffffffffffffff161491505092915050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146122e3576122e233612a4a565b5b6122ef85858585613172565b5050505050565b60125481565b6060612307826129fc565b612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d90615136565b60405180910390fd5b6014548211156123e257600c805461235d906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612389906149ff565b80156123d65780601f106123ab576101008083540402835291602001916123d6565b820191906000526020600020905b8154815290600101906020018083116123b957829003601f168201915b5050505050905061243e565b60006123ec6131ea565b9050600081511161240c576040518060200160405280600081525061243a565b806124168461327c565b600d60405160200161242a93929190615226565b6040516020818303038152906040525b9150505b919050565b600f5481565b81601360009054906101000a900460ff161561249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190614d47565b60405180910390fd5b600081116124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614db3565b60405180910390fd5b601154811115612522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251990614e45565b60405180910390fd5b60125481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125709190614bf4565b11156125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890614ed7565b60405180910390fd5b600f54816125bd610ee4565b6125c79190614bf4565b1115612608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ff90614c96565b60405180910390fd5b8280600e546126179190615257565b341015612659576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612650906152fd565b60405180910390fd5b601560009054906101000a900460ff166126a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269f90615369565b60405180910390fd5b601054846126b4610ee4565b6126be9190614bf4565b106126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f5906153fb565b60405180910390fd5b83601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274d9190614bf4565b9250508190555061276561275f612c4b565b85612c8c565b50505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612807612c4b565b73ffffffffffffffffffffffffffffffffffffffff16612825611d30565b73ffffffffffffffffffffffffffffffffffffffff161461287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290614a7c565b60405180910390fd5b80600c9080519060200190612891929190613e81565b5050565b61289d612c4b565b73ffffffffffffffffffffffffffffffffffffffff166128bb611d30565b73ffffffffffffffffffffffffffffffffffffffff1614612911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290890614a7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129779061548d565b60405180910390fd5b61298981612f35565b50565b60115481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612a07612c53565b11158015612a16575060005482105b8015612a43575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115612b44576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612ac19291906154ad565b602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0291906154eb565b612b4357806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401612b3a9190614195565b60405180910390fd5b5b50565b6000612b52826118ad565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bb9576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16612bd8612c4b565b73ffffffffffffffffffffffffffffffffffffffff1614612c3b57612c0481612bff612c4b565b61276b565b612c3a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b612c468383836133dc565b505050565b600033905090565b60006001905090565b612c6783838361348e565b505050565b612c87838383604051806020016040528060008152506122a5565b505050565b612ca6828260405180602001604052806000815250613942565b5050565b612cb2613f07565b600082905080612cc0612c53565b11612efe57600054811015612efd576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612efb57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ddf578092505050612f30565b5b600115612efa57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ef5578092505050612f30565b612de0565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613003612c4b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613067576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000613074612c4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16613121612c4b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613166919061401b565b60405180910390a35050565b61317d84848461348e565b61319c8373ffffffffffffffffffffffffffffffffffffffff16613d02565b156131e4576131ad84848484613d25565b6131e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600b80546131f9906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054613225906149ff565b80156132725780601f1061324757610100808354040283529160200191613272565b820191906000526020600020905b81548152906001019060200180831161325557829003601f168201915b5050505050905090565b6060600082036132c3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133d7565b600082905060005b600082146132f55780806132de90614bac565b915050600a826132ee9190615547565b91506132cb565b60008167ffffffffffffffff811115613311576133106144c3565b5b6040519080825280601f01601f1916602001820160405280156133435781602001600182028036833780820191505090505b5090505b600085146133d05760018261335c9190615578565b9150600a8561336b91906155ac565b60306133779190614bf4565b60f81b81838151811061338d5761338c614b4e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133c99190615547565b9450613347565b8093505050505b919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061349982612caa565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613504576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16613525612c4b565b73ffffffffffffffffffffffffffffffffffffffff16148061355457506135538561354e612c4b565b61276b565b5b806135995750613562612c4b565b73ffffffffffffffffffffffffffffffffffffffff1661358184610d9d565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806135d2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613638576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136458585856001613e75565b613651600084876133dc565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036138d05760005482146138cf57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461393b8585856001613e7b565b5050505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036139ae576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036139e8576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6139f56000858386613e75565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050613bb68673ffffffffffffffffffffffffffffffffffffffff16613d02565b15613c7b575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c2b6000878480600101955087613d25565b613c61576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210613bbc578260005414613c7657600080fd5b613ce6565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613c7c575b816000819055505050613cfc6000858386613e7b565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613d4b612c4b565b8786866040518563ffffffff1660e01b8152600401613d6d9493929190615632565b6020604051808303816000875af1925050508015613da957506040513d601f19601f82011682018060405250810190613da69190615693565b60015b613e22573d8060008114613dd9576040519150601f19603f3d011682016040523d82523d6000602084013e613dde565b606091505b506000815103613e1a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b50505050565b828054613e8d906149ff565b90600052602060002090601f016020900481019282613eaf5760008555613ef6565b82601f10613ec857805160ff1916838001178555613ef6565b82800160010185558215613ef6579182015b82811115613ef5578251825591602001919060010190613eda565b5b509050613f039190613f4a565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613f63576000816000905550600101613f4b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613fb081613f7b565b8114613fbb57600080fd5b50565b600081359050613fcd81613fa7565b92915050565b600060208284031215613fe957613fe8613f71565b5b6000613ff784828501613fbe565b91505092915050565b60008115159050919050565b61401581614000565b82525050565b6000602082019050614030600083018461400c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614070578082015181840152602081019050614055565b8381111561407f576000848401525b50505050565b6000601f19601f8301169050919050565b60006140a182614036565b6140ab8185614041565b93506140bb818560208601614052565b6140c481614085565b840191505092915050565b600060208201905081810360008301526140e98184614096565b905092915050565b6000819050919050565b614104816140f1565b811461410f57600080fd5b50565b600081359050614121816140fb565b92915050565b60006020828403121561413d5761413c613f71565b5b600061414b84828501614112565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061417f82614154565b9050919050565b61418f81614174565b82525050565b60006020820190506141aa6000830184614186565b92915050565b6141b981614174565b81146141c457600080fd5b50565b6000813590506141d6816141b0565b92915050565b600080604083850312156141f3576141f2613f71565b5b6000614201858286016141c7565b925050602061421285828601614112565b9150509250929050565b614225816140f1565b82525050565b6000602082019050614240600083018461421c565b92915050565b61424f81614000565b811461425a57600080fd5b50565b60008135905061426c81614246565b92915050565b60006020828403121561428857614287613f71565b5b60006142968482850161425d565b91505092915050565b6000602082840312156142b5576142b4613f71565b5b60006142c3848285016141c7565b91505092915050565b6000806000606084860312156142e5576142e4613f71565b5b60006142f3868287016141c7565b9350506020614304868287016141c7565b925050604061431586828701614112565b9150509250925092565b6000819050919050565b600061434461433f61433a84614154565b61431f565b614154565b9050919050565b600061435682614329565b9050919050565b60006143688261434b565b9050919050565b6143788161435d565b82525050565b6000602082019050614393600083018461436f565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ce816140f1565b82525050565b60006143e083836143c5565b60208301905092915050565b6000602082019050919050565b600061440482614399565b61440e81856143a4565b9350614419836143b5565b8060005b8381101561444a57815161443188826143d4565b975061443c836143ec565b92505060018101905061441d565b5085935050505092915050565b6000602082019050818103600083015261447181846143f9565b905092915050565b600080604083850312156144905761448f613f71565b5b600061449e85828601614112565b92505060206144af858286016141c7565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6144fb82614085565b810181811067ffffffffffffffff8211171561451a576145196144c3565b5b80604052505050565b600061452d613f67565b905061453982826144f2565b919050565b600067ffffffffffffffff821115614559576145586144c3565b5b61456282614085565b9050602081019050919050565b82818337600083830152505050565b600061459161458c8461453e565b614523565b9050828152602081018484840111156145ad576145ac6144be565b5b6145b884828561456f565b509392505050565b600082601f8301126145d5576145d46144b9565b5b81356145e584826020860161457e565b91505092915050565b60006020828403121561460457614603613f71565b5b600082013567ffffffffffffffff81111561462257614621613f76565b5b61462e848285016145c0565b91505092915050565b6000819050919050565b61464a81614637565b811461465557600080fd5b50565b60008135905061466781614641565b92915050565b600067ffffffffffffffff821115614688576146876144c3565b5b61469182614085565b9050602081019050919050565b60006146b16146ac8461466d565b614523565b9050828152602081018484840111156146cd576146cc6144be565b5b6146d884828561456f565b509392505050565b600082601f8301126146f5576146f46144b9565b5b813561470584826020860161469e565b91505092915050565b6000806040838503121561472557614724613f71565b5b600061473385828601614658565b925050602083013567ffffffffffffffff81111561475457614753613f76565b5b614760858286016146e0565b9150509250929050565b6000806040838503121561478157614780613f71565b5b600061478f85828601614112565b925050602083013567ffffffffffffffff8111156147b0576147af613f76565b5b6147bc858286016146e0565b9150509250929050565b600080604083850312156147dd576147dc613f71565b5b60006147eb858286016141c7565b92505060206147fc8582860161425d565b9150509250929050565b60006020828403121561481c5761481b613f71565b5b600082013567ffffffffffffffff81111561483a57614839613f76565b5b614846848285016146e0565b91505092915050565b600060ff82169050919050565b6148658161484f565b82525050565b61487481614637565b82525050565b600060608201905061488f600083018661485c565b61489c602083018561486b565b6148a9604083018461486b565b949350505050565b600080604083850312156148c8576148c7613f71565b5b60006148d6858286016141c7565b925050602083013567ffffffffffffffff8111156148f7576148f6613f76565b5b614903858286016146e0565b9150509250929050565b6000806000806080858703121561492757614926613f71565b5b6000614935878288016141c7565b9450506020614946878288016141c7565b935050604061495787828801614112565b925050606085013567ffffffffffffffff81111561497857614977613f76565b5b614984878288016146e0565b91505092959194509250565b600080604083850312156149a7576149a6613f71565b5b60006149b5858286016141c7565b92505060206149c6858286016141c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a1757607f821691505b602082108103614a2a57614a296149d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a66602083614041565b9150614a7182614a30565b602082019050919050565b60006020820190508181036000830152614a9581614a59565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ad2601f83614041565b9150614add82614a9c565b602082019050919050565b60006020820190508181036000830152614b0181614ac5565b9050919050565b600081905092915050565b50565b6000614b23600083614b08565b9150614b2e82614b13565b600082019050919050565b6000614b4482614b16565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb7826140f1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614be957614be8614b7d565b5b600182019050919050565b6000614bff826140f1565b9150614c0a836140f1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3f57614c3e614b7d565b5b828201905092915050565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b6000614c80601f83614041565b9150614c8b82614c4a565b602082019050919050565b60006020820190508181036000830152614caf81614c73565b9050919050565b6000608082019050614ccb600083018761486b565b614cd8602083018661485c565b614ce5604083018561486b565b614cf2606083018461486b565b95945050505050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000614d31601783614041565b9150614d3c82614cfb565b602082019050919050565b60006020820190508181036000830152614d6081614d24565b9050919050565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b6000614d9d601a83614041565b9150614da882614d67565b602082019050919050565b60006020820190508181036000830152614dcc81614d90565b9050919050565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e2f602283614041565b9150614e3a82614dd3565b604082019050919050565b60006020820190508181036000830152614e5e81614e22565b9050919050565b7f4d6178206d696e7420616d6f756e74207065722061646472657373206578636560008201527f6564656421000000000000000000000000000000000000000000000000000000602082015250565b6000614ec1602583614041565b9150614ecc82614e65565b604082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f57686974656c697374206d696e74206973206e6f74206163746976652079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f53602183614041565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f55736572206973206e6f742077686974656c6973746564210000000000000000600082015250565b6000614fbf601883614041565b9150614fca82614f89565b602082019050919050565b60006020820190508181036000830152614fee81614fb2565b9050919050565b7f4d61782057686974656c697374206d696e742065786365656465642100000000600082015250565b600061502b601c83614041565b915061503682614ff5565b602082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b60008160601b9050919050565b600061507982615061565b9050919050565b600061508b8261506e565b9050919050565b6150a361509e82614174565b615080565b82525050565b60006150b58284615092565b60148201915081905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b6000615120603083614041565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b600081905092915050565b600061516c82614036565b6151768185615156565b9350615186818560208601614052565b80840191505092915050565b60008190508160005260206000209050919050565b600081546151b4816149ff565b6151be8186615156565b945060018216600081146151d957600181146151ea5761521d565b60ff1983168652818601935061521d565b6151f385615192565b60005b83811015615215578154818901526001820191506020810190506151f6565b838801955050505b50505092915050565b60006152328286615161565b915061523e8285615161565b915061524a82846151a7565b9150819050949350505050565b6000615262826140f1565b915061526d836140f1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152a6576152a5614b7d565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006152e7601383614041565b91506152f2826152b1565b602082019050919050565b60006020820190508181036000830152615316816152da565b9050919050565b7f5075626c6963206d696e74206973206e6f742061637469766520796574210000600082015250565b6000615353601e83614041565b915061535e8261531d565b602082019050919050565b6000602082019050818103600083015261538281615346565b9050919050565b7f416c69656e61746f72733a205068617365206d696e74206c696d69742072656160008201527f6368656421000000000000000000000000000000000000000000000000000000602082015250565b60006153e5602583614041565b91506153f082615389565b604082019050919050565b60006020820190508181036000830152615414816153d8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615477602683614041565b91506154828261541b565b604082019050919050565b600060208201905081810360008301526154a68161546a565b9050919050565b60006040820190506154c26000830185614186565b6154cf6020830184614186565b9392505050565b6000815190506154e581614246565b92915050565b60006020828403121561550157615500613f71565b5b600061550f848285016154d6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615552826140f1565b915061555d836140f1565b92508261556d5761556c615518565b5b828204905092915050565b6000615583826140f1565b915061558e836140f1565b9250828210156155a1576155a0614b7d565b5b828203905092915050565b60006155b7826140f1565b91506155c2836140f1565b9250826155d2576155d1615518565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000615604826155dd565b61560e81856155e8565b935061561e818560208601614052565b61562781614085565b840191505092915050565b60006080820190506156476000830187614186565b6156546020830186614186565b615661604083018561421c565b818103606083015261567381846155f9565b905095945050505050565b60008151905061568d81613fa7565b92915050565b6000602082840312156156a9576156a8613f71565b5b60006156b78482850161567e565b9150509291505056fea2646970667358221220362a2a4f4eabbfb3595c7560912a53f55a17a0b17c226c641537f6430fcb77e764736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000011ab585988d1664f5108c5effee1e4bd2649a2b4

-----Decoded View---------------
Arg [0] : _signerAddress (address): 0x11Ab585988d1664f5108c5efFEe1e4BD2649a2B4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000011ab585988d1664f5108c5effee1e4bd2649a2b4


Deployed Bytecode Sourcemap

42269:7854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25139:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28254:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29766:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49248:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42776:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42519:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47779:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24379:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42865:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49405:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48105:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47657:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42591:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49935:185;;;;;;;;;;;;;:::i;:::-;;3489:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49568:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46051:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47877:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48410:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48970:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44970:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42742:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42477:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42381:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42711:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48256:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42416:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28062:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47534:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42818:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47978:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25508:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9526:103;;;;;;;;;;;;;:::i;:::-;;42444:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48553:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48836:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8875:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28423:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45462:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44470:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49072:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45677:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;45250:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49739:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42667:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47019:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42556:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44037:404;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30400:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48682:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9784:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42635:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25139:305;25241:4;25293:25;25278:40;;;:11;:40;;;;:105;;;;25350:33;25335:48;;;:11;:48;;;;25278:105;:158;;;;25400:36;25424:11;25400:23;:36::i;:::-;25278:158;25258:178;;25139:305;;;:::o;28254:100::-;28308:13;28341:5;28334:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28254:100;:::o;29766:204::-;29834:7;29859:16;29867:7;29859;:16::i;:::-;29854:64;;29884:34;;;;;;;;;;;;;;29854:64;29938:15;:24;29954:7;29938:24;;;;;;;;;;;;;;;;;;;;;29931:31;;29766:204;;;:::o;49248:151::-;49344:8;5010:30;5031:8;5010:20;:30::i;:::-;49361:32:::1;49375:8;49385:7;49361:13;:32::i;:::-;49248:151:::0;;;:::o;42776:37::-;;;;;;;;;;;;;:::o;42519:32::-;;;;:::o;47779:77::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47844:6:::1;47835;;:15;;;;;;;;;;;;;;;;;;47779:77:::0;:::o;24379:312::-;24432:7;24657:15;:13;:15::i;:::-;24642:12;;24626:13;;:28;:46;24619:53;;24379:312;:::o;42865:55::-;;;;;;;;;;;;;;;;;:::o;49405:157::-;49506:4;4838:10;4830:18;;:4;:18;;;4826:83;;4865:32;4886:10;4865:20;:32::i;:::-;4826:83;49519:37:::1;49538:4;49544:2;49548:7;49519:18;:37::i;:::-;49405:157:::0;;;;:::o;48105:116::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48200:15:::1;48181:16;:34;;;;48105:116:::0;:::o;47657:102::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47738:15:::1;47727:8;:26;;;;47657:102:::0;:::o;42591:37::-;;;;:::o;49935:185::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5719:1:::1;5939:7;;:19:::0;5931:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5719:1;6072:7;:18;;;;49993:7:::2;50014:42;50006:56;;50070:21;50006:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49992:104;;;50111:2;50103:11;;;::::0;::::2;;49985:135;5675:1:::1;6117:7;:22;;;;49935:185::o:0;3489:143::-;3589:42;3489:143;:::o;49568:165::-;49673:4;4838:10;4830:18;;:4;:18;;;4826:83;;4865:32;4886:10;4865:20;:32::i;:::-;4826:83;49686:41:::1;49709:4;49715:2;49719:7;49686:22;:41::i;:::-;49568:165:::0;;;;:::o;46051:827::-;46111:16;46136:23;46162:17;46172:6;46162:9;:17::i;:::-;46136:43;;46186:30;46233:15;46219:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46186:63;;46256:22;46281:15;:13;:15::i;:::-;46256:40;;46303:23;46337:26;46372:474;46397:15;46379;:33;:67;;;;;46433:13;;46416:14;:30;46379:67;46372:474;;;46457:31;46491:11;:27;46503:14;46491:27;;;;;;;;;;;46457:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46534:9;:16;;;46529:285;;46593:1;46567:28;;:9;:14;;;:28;;;46563:94;;46631:9;:14;;;46610:35;;46563:94;46695:6;46673:28;;:18;:28;;;46669:136;;46749:14;46716:13;46730:15;46716:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;46776:17;;;;;:::i;:::-;;;;46669:136;46529:285;46822:16;;;;;:::i;:::-;;;;46448:398;46372:474;;;46859:13;46852:20;;;;;;;46051:827;;;:::o;47877:74::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47940:5:::1;47933:4;:12;;;;47877:74:::0;:::o;48410:118::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48507:15:::1;48486:18;:36;;;;48410:118:::0;:::o;48970:96::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49054:6:::1;49031:20;;:29;;;;;;;;;;;;;;;;;;48970:96:::0;:::o;44970:217::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45096:9:::1;;45081:11;45065:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;45057:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;45148:33;45158:9;45169:11;45148:9;:33::i;:::-;44970:217:::0;;:::o;42742:27::-;;;;:::o;42477:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42381:28::-;;;;;;;;;;;;;:::o;42711:26::-;;;;;;;;;;;;;:::o;48256:114::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48345:19:::1;48334:8;:30;;;;48256:114:::0;:::o;42416:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28062:125::-;28126:7;28153:21;28166:7;28153:12;:21::i;:::-;:26;;;28146:33;;28062:125;;;:::o;47534:95::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47613:10:::1;47597:13;;:26;;;;;;;;;;;;;;;;;;47534:95:::0;:::o;42818:40::-;;;;;;;;;;;;;:::o;47978:94::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48056:10:::1;48044:9;:22;;;;47978:94:::0;:::o;25508:206::-;25572:7;25613:1;25596:19;;:5;:19;;;25592:60;;25624:28;;;;;;;;;;;;;;25592:60;25678:12;:19;25691:5;25678:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25670:36;;25663:43;;25508:206;;;:::o;9526:103::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9591:30:::1;9618:1;9591:18;:30::i;:::-;9526:103::o:0;42444:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48553:100::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48637:10:::1;48625:9;:22;;;;;;;;;;;;:::i;:::-;;48553:100:::0;:::o;48836:97::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48921:6:::1;48901:17;;:26;;;;;;;;;;;;;;;;;;48836:97:::0;:::o;8875:87::-;8921:7;8948:6;;;;;;;;;;;8941:13;;8875:87;:::o;28423:104::-;28479:13;28512:7;28505:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28423:104;:::o;45462:209::-;45541:7;45557;45566:9;45577;45605:19;45620:3;45605:14;:19::i;:::-;45593:31;;;;;;;;;;;;45638:27;45648:7;45657:1;45660;45663;45638:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45631:34;;;;;45462:209;;;;:::o;44470:471::-;44554:11;43406:6;;;;;;;;;;;43405:7;43397:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;43469:1;43455:11;:15;43447:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;43531:8;;43516:11;:23;;43508:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43643:18;;43628:11;43593:20;:32;43614:10;43593:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;43585:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;43749:9;;43734:11;43718:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;43710:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;44582:20:::1;;;;;;;;;;;44574:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44687:4;44655:36;;:28;44667:10;44679:3;44655:11;:28::i;:::-;:36;;;44647:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44785:18;;44770:11;44735:20;:32;44756:10;44735:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;44727:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44881:11;44845:20;:32;44866:10;44845:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;44899:36;44909:12;:10;:12::i;:::-;44923:11;44899:9;:36::i;:::-;44470:471:::0;;;:::o;49072:170::-;49176:8;5010:30;5031:8;5010:20;:30::i;:::-;49193:43:::1;49217:8;49227;49193:23;:43::i;:::-;49072:170:::0;;;:::o;45677:287::-;45740:5;45747:7;45756;45794:2;45780:3;:10;:16;45772:25;;;;;;45804:9;45815;45826:7;45871:2;45866:3;45862:12;45856:19;45851:24;;45896:2;45891:3;45887:12;45881:19;45876:24;;45929:2;45924:3;45920:12;45914:19;45911:1;45906:28;45901:33;;45950:1;45953;45956;45942:16;;;;;;;;;45677:287;;;;;:::o;45250:206::-;45325:4;45338:15;45383:5;45366:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;45356:34;;;;;;45338:52;;45436:13;;;;;;;;;;;45405:44;;:27;45419:7;45428:3;45405:13;:27::i;:::-;:44;;;45397:53;;;45250:206;;;;:::o;49739:190::-;49863:4;4838:10;4830:18;;:4;:18;;;4826:83;;4865:32;4886:10;4865:20;:32::i;:::-;4826:83;49876:47:::1;49899:4;49905:2;49909:7;49918:4;49876:22;:47::i;:::-;49739:190:::0;;;;;:::o;42667:37::-;;;;:::o;47019:428::-;47093:13;47123:17;47131:8;47123:7;:17::i;:::-;47115:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47220:8;;47209;:19;47205:51;;;47239:14;47232:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47205:51;47264:28;47295:10;:8;:10::i;:::-;47264:41;;47350:1;47325:14;47319:28;:32;:122;;;;;;;;;;;;;;;;;47383:14;47399:19;:8;:17;:19::i;:::-;47420:9;47366:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47319:122;47312:129;;;47019:428;;;;:::o;42556:30::-;;;;:::o;44037:404::-;44120:11;43406:6;;;;;;;;;;;43405:7;43397:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;43469:1;43455:11;:15;43447:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;43531:8;;43516:11;:23;;43508:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43643:18;;43628:11;43593:20;:32;43614:10;43593:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;43585:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;43749:9;;43734:11;43718:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;43710:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;44153:11:::1;43899;43892:4;;:18;;;;:::i;:::-;43879:9;:31;;43871:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44181:17:::2;;;;;;;;;;;44173:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44278:16;;44264:11;44248:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:46;44240:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;44381:11;44345:20;:32;44366:10;44345:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;44399:36;44409:12;:10;:12::i;:::-;44423:11;44399:9;:36::i;:::-;43801:1:::1;44037:404:::0;;;:::o;30400:164::-;30497:4;30521:18;:25;30540:5;30521:25;;;;;;;;;;;;;;;:35;30547:8;30521:35;;;;;;;;;;;;;;;;;;;;;;;;;30514:42;;30400:164;;;;:::o;48682:120::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48781:15:::1;48764:14;:32;;;;;;;;;;;;:::i;:::-;;48682:120:::0;:::o;9784:201::-;9106:12;:10;:12::i;:::-;9095:23;;:7;:5;:7::i;:::-;:23;;;9087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9893:1:::1;9873:22;;:8;:22;;::::0;9865:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9949:28;9968:8;9949:18;:28::i;:::-;9784:201:::0;:::o;42635:27::-;;;;:::o;16367:157::-;16452:4;16491:25;16476:40;;;:11;:40;;;;16469:47;;16367:157;;;:::o;31753:174::-;31810:4;31853:7;31834:15;:13;:15::i;:::-;:26;;:53;;;;;31874:13;;31864:7;:23;31834:53;:85;;;;;31892:11;:20;31904:7;31892:20;;;;;;;;;;;:27;;;;;;;;;;;;31891:28;31834:85;31827:92;;31753:174;;;:::o;5068:419::-;5307:1;3589:42;5259:45;;;:49;5255:225;;;3589:42;5330;;;5381:4;5388:8;5330:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5325:144;;5444:8;5425:28;;;;;;;;;;;:::i;:::-;;;;;;;;5325:144;5255:225;5068:419;:::o;29320:380::-;29401:13;29417:24;29433:7;29417:15;:24::i;:::-;29401:40;;29462:5;29456:11;;:2;:11;;;29452:48;;29476:24;;;;;;;;;;;;;;29452:48;29533:5;29517:21;;:12;:10;:12::i;:::-;:21;;;29513:139;;29544:37;29561:5;29568:12;:10;:12::i;:::-;29544:16;:37::i;:::-;29540:112;;29605:35;;;;;;;;;;;;;;29540:112;29513:139;29664:28;29673:2;29677:7;29686:5;29664:8;:28::i;:::-;29390:310;29320:380;;:::o;8165:98::-;8218:7;8245:10;8238:17;;8165:98;:::o;46902:95::-;46967:7;46990:1;46983:8;;46902:95;:::o;30631:170::-;30765:28;30775:4;30781:2;30785:7;30765:9;:28::i;:::-;30631:170;;;:::o;30872:185::-;31010:39;31027:4;31033:2;31037:7;31010:39;;;;;;;;;;;;:16;:39::i;:::-;30872:185;;;:::o;32011:104::-;32080:27;32090:2;32094:8;32080:27;;;;;;;;;;;;:9;:27::i;:::-;32011:104;;:::o;26889:1111::-;26951:21;;:::i;:::-;26985:12;27000:7;26985:22;;27068:4;27049:15;:13;:15::i;:::-;:23;27045:888;;27085:13;;27078:4;:20;27074:859;;;27119:31;27153:11;:17;27165:4;27153:17;;;;;;;;;;;27119:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27194:9;:16;;;27189:729;;27265:1;27239:28;;:9;:14;;;:28;;;27235:101;;27303:9;27296:16;;;;;;27235:101;27638:261;27645:4;27638:261;;;27678:6;;;;;;;;27723:11;:17;27735:4;27723:17;;;;;;;;;;;27711:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27797:1;27771:28;;:9;:14;;;:28;;;27767:109;;27839:9;27832:16;;;;;;27767:109;27638:261;;;27189:729;27100:833;27074:859;27045:888;27961:31;;;;;;;;;;;;;;26889:1111;;;;:::o;10145:191::-;10219:16;10238:6;;;;;;;;;;;10219:25;;10264:8;10255:6;;:17;;;;;;;;;;;;;;;;;;10319:8;10288:40;;10309:8;10288:40;;;;;;;;;;;;10208:128;10145:191;:::o;30042:287::-;30153:12;:10;:12::i;:::-;30141:24;;:8;:24;;;30137:54;;30174:17;;;;;;;;;;;;;;30137:54;30249:8;30204:18;:32;30223:12;:10;:12::i;:::-;30204:32;;;;;;;;;;;;;;;:42;30237:8;30204:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30302:8;30273:48;;30288:12;:10;:12::i;:::-;30273:48;;;30312:8;30273:48;;;;;;:::i;:::-;;;;;;;;30042:287;;:::o;31128:370::-;31295:28;31305:4;31311:2;31315:7;31295:9;:28::i;:::-;31338:15;:2;:13;;;:15::i;:::-;31334:157;;;31359:56;31390:4;31396:2;31400:7;31409:5;31359:30;:56::i;:::-;31355:136;;31439:40;;;;;;;;;;;;;;31355:136;31334:157;31128:370;;;;:::o;43177:104::-;43237:13;43266:9;43259:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43177:104;:::o;6423:534::-;6479:13;6520:1;6511:5;:10;6507:53;;6538:10;;;;;;;;;;;;;;;;;;;;;6507:53;6570:12;6585:5;6570:20;;6601:14;6626:78;6641:1;6633:4;:9;6626:78;;6659:8;;;;;:::i;:::-;;;;6690:2;6682:10;;;;;:::i;:::-;;;6626:78;;;6714:19;6746:6;6736:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6714:39;;6764:154;6780:1;6771:5;:10;6764:154;;6808:1;6798:11;;;;;:::i;:::-;;;6875:2;6867:5;:10;;;;:::i;:::-;6854:2;:24;;;;:::i;:::-;6841:39;;6824:6;6831;6824:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6904:2;6895:11;;;;;:::i;:::-;;;6764:154;;;6942:6;6928:21;;;;;6423:534;;;;:::o;40975:196::-;41117:2;41090:15;:24;41106:7;41090:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41155:7;41151:2;41135:28;;41144:5;41135:28;;;;;;;;;;;;40975:196;;;:::o;35923:2130::-;36038:35;36076:21;36089:7;36076:12;:21::i;:::-;36038:59;;36136:4;36114:26;;:13;:18;;;:26;;;36110:67;;36149:28;;;;;;;;;;;;;;36110:67;36190:22;36232:4;36216:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;36253:36;36270:4;36276:12;:10;:12::i;:::-;36253:16;:36::i;:::-;36216:73;:126;;;;36330:12;:10;:12::i;:::-;36306:36;;:20;36318:7;36306:11;:20::i;:::-;:36;;;36216:126;36190:153;;36361:17;36356:66;;36387:35;;;;;;;;;;;;;;36356:66;36451:1;36437:16;;:2;:16;;;36433:52;;36462:23;;;;;;;;;;;;;;36433:52;36498:43;36520:4;36526:2;36530:7;36539:1;36498:21;:43::i;:::-;36606:35;36623:1;36627:7;36636:4;36606:8;:35::i;:::-;36967:1;36937:12;:18;36950:4;36937:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37011:1;36983:12;:16;36996:2;36983:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37029:31;37063:11;:20;37075:7;37063:20;;;;;;;;;;;37029:54;;37114:2;37098:8;:13;;;:18;;;;;;;;;;;;;;;;;;37164:15;37131:8;:23;;;:49;;;;;;;;;;;;;;;;;;37432:19;37464:1;37454:7;:11;37432:33;;37480:31;37514:11;:24;37526:11;37514:24;;;;;;;;;;;37480:58;;37582:1;37557:27;;:8;:13;;;;;;;;;;;;:27;;;37553:384;;37767:13;;37752:11;:28;37748:174;;37821:4;37805:8;:13;;;:20;;;;;;;;;;;;;;;;;;37874:13;:28;;;37848:8;:23;;;:54;;;;;;;;;;;;;;;;;;37748:174;37553:384;36912:1036;;;37984:7;37980:2;37965:27;;37974:4;37965:27;;;;;;;;;;;;38003:42;38024:4;38030:2;38034:7;38043:1;38003:20;:42::i;:::-;36027:2026;;35923:2130;;;:::o;32488:1749::-;32611:20;32634:13;;32611:36;;32676:1;32662:16;;:2;:16;;;32658:48;;32687:19;;;;;;;;;;;;;;32658:48;32733:1;32721:8;:13;32717:44;;32743:18;;;;;;;;;;;;;;32717:44;32774:61;32804:1;32808:2;32812:12;32826:8;32774:21;:61::i;:::-;33147:8;33112:12;:16;33125:2;33112:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33211:8;33171:12;:16;33184:2;33171:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33270:2;33237:11;:25;33249:12;33237:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;33337:15;33287:11;:25;33299:12;33287:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;33370:20;33393:12;33370:35;;33420:11;33449:8;33434:12;:23;33420:37;;33478:15;:2;:13;;;:15::i;:::-;33474:631;;;33514:313;33570:12;33566:2;33545:38;;33562:1;33545:38;;;;;;;;;;;;33611:69;33650:1;33654:2;33658:14;;;;;;33674:5;33611:30;:69::i;:::-;33606:174;;33716:40;;;;;;;;;;;;;;33606:174;33822:3;33807:12;:18;33514:313;;33908:12;33891:13;;:29;33887:43;;33922:8;;;33887:43;33474:631;;;33971:119;34027:14;;;;;;34023:2;34002:40;;34019:1;34002:40;;;;;;;;;;;;34085:3;34070:12;:18;33971:119;;33474:631;34135:12;34119:13;:28;;;;33087:1072;;34169:60;34198:1;34202:2;34206:12;34220:8;34169:20;:60::i;:::-;32600:1637;32488:1749;;;:::o;10597:115::-;10657:4;10703:1;10681:7;:19;;;:23;10674:30;;10597:115;;;:::o;41181:667::-;41344:4;41381:2;41365:36;;;41402:12;:10;:12::i;:::-;41416:4;41422:7;41431:5;41365:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41361:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41616:1;41599:6;:13;:18;41595:235;;41645:40;;;;;;;;;;;;;;41595:235;41788:6;41782:13;41773:6;41769:2;41765:15;41758:38;41361:480;41494:45;;;41484:55;;;:6;:55;;;;41477:62;;;41181:667;;;;;;:::o;41859:159::-;;;;;:::o;42028:158::-;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:116::-;5360:21;5375:5;5360:21;:::i;:::-;5353:5;5350:32;5340:60;;5396:1;5393;5386:12;5340:60;5290:116;:::o;5412:133::-;5455:5;5493:6;5480:20;5471:29;;5509:30;5533:5;5509:30;:::i;:::-;5412:133;;;;:::o;5551:323::-;5607:6;5656:2;5644:9;5635:7;5631:23;5627:32;5624:119;;;5662:79;;:::i;:::-;5624:119;5782:1;5807:50;5849:7;5840:6;5829:9;5825:22;5807:50;:::i;:::-;5797:60;;5753:114;5551:323;;;;:::o;5880:329::-;5939:6;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;5880:329;;;;:::o;6215:619::-;6292:6;6300;6308;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:53;6553:7;6544:6;6533:9;6529:22;6508:53;:::i;:::-;6498:63;;6454:117;6610:2;6636:53;6681:7;6672:6;6661:9;6657:22;6636:53;:::i;:::-;6626:63;;6581:118;6738:2;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6709:118;6215:619;;;;;:::o;6840:60::-;6868:3;6889:5;6882:12;;6840:60;;;:::o;6906:142::-;6956:9;6989:53;7007:34;7016:24;7034:5;7016:24;:::i;:::-;7007:34;:::i;:::-;6989:53;:::i;:::-;6976:66;;6906:142;;;:::o;7054:126::-;7104:9;7137:37;7168:5;7137:37;:::i;:::-;7124:50;;7054:126;;;:::o;7186:157::-;7267:9;7300:37;7331:5;7300:37;:::i;:::-;7287:50;;7186:157;;;:::o;7349:193::-;7467:68;7529:5;7467:68;:::i;:::-;7462:3;7455:81;7349:193;;:::o;7548:284::-;7672:4;7710:2;7699:9;7695:18;7687:26;;7723:102;7822:1;7811:9;7807:17;7798:6;7723:102;:::i;:::-;7548:284;;;;:::o;7838:114::-;7905:6;7939:5;7933:12;7923:22;;7838:114;;;:::o;7958:184::-;8057:11;8091:6;8086:3;8079:19;8131:4;8126:3;8122:14;8107:29;;7958:184;;;;:::o;8148:132::-;8215:4;8238:3;8230:11;;8268:4;8263:3;8259:14;8251:22;;8148:132;;;:::o;8286:108::-;8363:24;8381:5;8363:24;:::i;:::-;8358:3;8351:37;8286:108;;:::o;8400:179::-;8469:10;8490:46;8532:3;8524:6;8490:46;:::i;:::-;8568:4;8563:3;8559:14;8545:28;;8400:179;;;;:::o;8585:113::-;8655:4;8687;8682:3;8678:14;8670:22;;8585:113;;;:::o;8734:732::-;8853:3;8882:54;8930:5;8882:54;:::i;:::-;8952:86;9031:6;9026:3;8952:86;:::i;:::-;8945:93;;9062:56;9112:5;9062:56;:::i;:::-;9141:7;9172:1;9157:284;9182:6;9179:1;9176:13;9157:284;;;9258:6;9252:13;9285:63;9344:3;9329:13;9285:63;:::i;:::-;9278:70;;9371:60;9424:6;9371:60;:::i;:::-;9361:70;;9217:224;9204:1;9201;9197:9;9192:14;;9157:284;;;9161:14;9457:3;9450:10;;8858:608;;;8734:732;;;;:::o;9472:373::-;9615:4;9653:2;9642:9;9638:18;9630:26;;9702:9;9696:4;9692:20;9688:1;9677:9;9673:17;9666:47;9730:108;9833:4;9824:6;9730:108;:::i;:::-;9722:116;;9472:373;;;;:::o;9851:474::-;9919:6;9927;9976:2;9964:9;9955:7;9951:23;9947:32;9944:119;;;9982:79;;:::i;:::-;9944:119;10102:1;10127:53;10172:7;10163:6;10152:9;10148:22;10127:53;:::i;:::-;10117:63;;10073:117;10229:2;10255:53;10300:7;10291:6;10280:9;10276:22;10255:53;:::i;:::-;10245:63;;10200:118;9851:474;;;;;:::o;10331:117::-;10440:1;10437;10430:12;10454:117;10563:1;10560;10553:12;10577:180;10625:77;10622:1;10615:88;10722:4;10719:1;10712:15;10746:4;10743:1;10736:15;10763:281;10846:27;10868:4;10846:27;:::i;:::-;10838:6;10834:40;10976:6;10964:10;10961:22;10940:18;10928:10;10925:34;10922:62;10919:88;;;10987:18;;:::i;:::-;10919:88;11027:10;11023:2;11016:22;10806:238;10763:281;;:::o;11050:129::-;11084:6;11111:20;;:::i;:::-;11101:30;;11140:33;11168:4;11160:6;11140:33;:::i;:::-;11050:129;;;:::o;11185:308::-;11247:4;11337:18;11329:6;11326:30;11323:56;;;11359:18;;:::i;:::-;11323:56;11397:29;11419:6;11397:29;:::i;:::-;11389:37;;11481:4;11475;11471:15;11463:23;;11185:308;;;:::o;11499:154::-;11583:6;11578:3;11573;11560:30;11645:1;11636:6;11631:3;11627:16;11620:27;11499:154;;;:::o;11659:412::-;11737:5;11762:66;11778:49;11820:6;11778:49;:::i;:::-;11762:66;:::i;:::-;11753:75;;11851:6;11844:5;11837:21;11889:4;11882:5;11878:16;11927:3;11918:6;11913:3;11909:16;11906:25;11903:112;;;11934:79;;:::i;:::-;11903:112;12024:41;12058:6;12053:3;12048;12024:41;:::i;:::-;11743:328;11659:412;;;;;:::o;12091:340::-;12147:5;12196:3;12189:4;12181:6;12177:17;12173:27;12163:122;;12204:79;;:::i;:::-;12163:122;12321:6;12308:20;12346:79;12421:3;12413:6;12406:4;12398:6;12394:17;12346:79;:::i;:::-;12337:88;;12153:278;12091:340;;;;:::o;12437:509::-;12506:6;12555:2;12543:9;12534:7;12530:23;12526:32;12523:119;;;12561:79;;:::i;:::-;12523:119;12709:1;12698:9;12694:17;12681:31;12739:18;12731:6;12728:30;12725:117;;;12761:79;;:::i;:::-;12725:117;12866:63;12921:7;12912:6;12901:9;12897:22;12866:63;:::i;:::-;12856:73;;12652:287;12437:509;;;;:::o;12952:77::-;12989:7;13018:5;13007:16;;12952:77;;;:::o;13035:122::-;13108:24;13126:5;13108:24;:::i;:::-;13101:5;13098:35;13088:63;;13147:1;13144;13137:12;13088:63;13035:122;:::o;13163:139::-;13209:5;13247:6;13234:20;13225:29;;13263:33;13290:5;13263:33;:::i;:::-;13163:139;;;;:::o;13308:307::-;13369:4;13459:18;13451:6;13448:30;13445:56;;;13481:18;;:::i;:::-;13445:56;13519:29;13541:6;13519:29;:::i;:::-;13511:37;;13603:4;13597;13593:15;13585:23;;13308:307;;;:::o;13621:410::-;13698:5;13723:65;13739:48;13780:6;13739:48;:::i;:::-;13723:65;:::i;:::-;13714:74;;13811:6;13804:5;13797:21;13849:4;13842:5;13838:16;13887:3;13878:6;13873:3;13869:16;13866:25;13863:112;;;13894:79;;:::i;:::-;13863:112;13984:41;14018:6;14013:3;14008;13984:41;:::i;:::-;13704:327;13621:410;;;;;:::o;14050:338::-;14105:5;14154:3;14147:4;14139:6;14135:17;14131:27;14121:122;;14162:79;;:::i;:::-;14121:122;14279:6;14266:20;14304:78;14378:3;14370:6;14363:4;14355:6;14351:17;14304:78;:::i;:::-;14295:87;;14111:277;14050:338;;;;:::o;14394:652::-;14471:6;14479;14528:2;14516:9;14507:7;14503:23;14499:32;14496:119;;;14534:79;;:::i;:::-;14496:119;14654:1;14679:53;14724:7;14715:6;14704:9;14700:22;14679:53;:::i;:::-;14669:63;;14625:117;14809:2;14798:9;14794:18;14781:32;14840:18;14832:6;14829:30;14826:117;;;14862:79;;:::i;:::-;14826:117;14967:62;15021:7;15012:6;15001:9;14997:22;14967:62;:::i;:::-;14957:72;;14752:287;14394:652;;;;;:::o;15052:::-;15129:6;15137;15186:2;15174:9;15165:7;15161:23;15157:32;15154:119;;;15192:79;;:::i;:::-;15154:119;15312:1;15337:53;15382:7;15373:6;15362:9;15358:22;15337:53;:::i;:::-;15327:63;;15283:117;15467:2;15456:9;15452:18;15439:32;15498:18;15490:6;15487:30;15484:117;;;15520:79;;:::i;:::-;15484:117;15625:62;15679:7;15670:6;15659:9;15655:22;15625:62;:::i;:::-;15615:72;;15410:287;15052:652;;;;;:::o;15710:468::-;15775:6;15783;15832:2;15820:9;15811:7;15807:23;15803:32;15800:119;;;15838:79;;:::i;:::-;15800:119;15958:1;15983:53;16028:7;16019:6;16008:9;16004:22;15983:53;:::i;:::-;15973:63;;15929:117;16085:2;16111:50;16153:7;16144:6;16133:9;16129:22;16111:50;:::i;:::-;16101:60;;16056:115;15710:468;;;;;:::o;16184:507::-;16252:6;16301:2;16289:9;16280:7;16276:23;16272:32;16269:119;;;16307:79;;:::i;:::-;16269:119;16455:1;16444:9;16440:17;16427:31;16485:18;16477:6;16474:30;16471:117;;;16507:79;;:::i;:::-;16471:117;16612:62;16666:7;16657:6;16646:9;16642:22;16612:62;:::i;:::-;16602:72;;16398:286;16184:507;;;;:::o;16697:86::-;16732:7;16772:4;16765:5;16761:16;16750:27;;16697:86;;;:::o;16789:112::-;16872:22;16888:5;16872:22;:::i;:::-;16867:3;16860:35;16789:112;;:::o;16907:118::-;16994:24;17012:5;16994:24;:::i;:::-;16989:3;16982:37;16907:118;;:::o;17031:434::-;17176:4;17214:2;17203:9;17199:18;17191:26;;17227:67;17291:1;17280:9;17276:17;17267:6;17227:67;:::i;:::-;17304:72;17372:2;17361:9;17357:18;17348:6;17304:72;:::i;:::-;17386;17454:2;17443:9;17439:18;17430:6;17386:72;:::i;:::-;17031:434;;;;;;:::o;17471:652::-;17548:6;17556;17605:2;17593:9;17584:7;17580:23;17576:32;17573:119;;;17611:79;;:::i;:::-;17573:119;17731:1;17756:53;17801:7;17792:6;17781:9;17777:22;17756:53;:::i;:::-;17746:63;;17702:117;17886:2;17875:9;17871:18;17858:32;17917:18;17909:6;17906:30;17903:117;;;17939:79;;:::i;:::-;17903:117;18044:62;18098:7;18089:6;18078:9;18074:22;18044:62;:::i;:::-;18034:72;;17829:287;17471:652;;;;;:::o;18129:943::-;18224:6;18232;18240;18248;18297:3;18285:9;18276:7;18272:23;18268:33;18265:120;;;18304:79;;:::i;:::-;18265:120;18424:1;18449:53;18494:7;18485:6;18474:9;18470:22;18449:53;:::i;:::-;18439:63;;18395:117;18551:2;18577:53;18622:7;18613:6;18602:9;18598:22;18577:53;:::i;:::-;18567:63;;18522:118;18679:2;18705:53;18750:7;18741:6;18730:9;18726:22;18705:53;:::i;:::-;18695:63;;18650:118;18835:2;18824:9;18820:18;18807:32;18866:18;18858:6;18855:30;18852:117;;;18888:79;;:::i;:::-;18852:117;18993:62;19047:7;19038:6;19027:9;19023:22;18993:62;:::i;:::-;18983:72;;18778:287;18129:943;;;;;;;:::o;19078:474::-;19146:6;19154;19203:2;19191:9;19182:7;19178:23;19174:32;19171:119;;;19209:79;;:::i;:::-;19171:119;19329:1;19354:53;19399:7;19390:6;19379:9;19375:22;19354:53;:::i;:::-;19344:63;;19300:117;19456:2;19482:53;19527:7;19518:6;19507:9;19503:22;19482:53;:::i;:::-;19472:63;;19427:118;19078:474;;;;;:::o;19558:180::-;19606:77;19603:1;19596:88;19703:4;19700:1;19693:15;19727:4;19724:1;19717:15;19744:320;19788:6;19825:1;19819:4;19815:12;19805:22;;19872:1;19866:4;19862:12;19893:18;19883:81;;19949:4;19941:6;19937:17;19927:27;;19883:81;20011:2;20003:6;20000:14;19980:18;19977:38;19974:84;;20030:18;;:::i;:::-;19974:84;19795:269;19744:320;;;:::o;20070:182::-;20210:34;20206:1;20198:6;20194:14;20187:58;20070:182;:::o;20258:366::-;20400:3;20421:67;20485:2;20480:3;20421:67;:::i;:::-;20414:74;;20497:93;20586:3;20497:93;:::i;:::-;20615:2;20610:3;20606:12;20599:19;;20258:366;;;:::o;20630:419::-;20796:4;20834:2;20823:9;20819:18;20811:26;;20883:9;20877:4;20873:20;20869:1;20858:9;20854:17;20847:47;20911:131;21037:4;20911:131;:::i;:::-;20903:139;;20630:419;;;:::o;21055:181::-;21195:33;21191:1;21183:6;21179:14;21172:57;21055:181;:::o;21242:366::-;21384:3;21405:67;21469:2;21464:3;21405:67;:::i;:::-;21398:74;;21481:93;21570:3;21481:93;:::i;:::-;21599:2;21594:3;21590:12;21583:19;;21242:366;;;:::o;21614:419::-;21780:4;21818:2;21807:9;21803:18;21795:26;;21867:9;21861:4;21857:20;21853:1;21842:9;21838:17;21831:47;21895:131;22021:4;21895:131;:::i;:::-;21887:139;;21614:419;;;:::o;22039:147::-;22140:11;22177:3;22162:18;;22039:147;;;;:::o;22192:114::-;;:::o;22312:398::-;22471:3;22492:83;22573:1;22568:3;22492:83;:::i;:::-;22485:90;;22584:93;22673:3;22584:93;:::i;:::-;22702:1;22697:3;22693:11;22686:18;;22312:398;;;:::o;22716:379::-;22900:3;22922:147;23065:3;22922:147;:::i;:::-;22915:154;;23086:3;23079:10;;22716:379;;;:::o;23101:180::-;23149:77;23146:1;23139:88;23246:4;23243:1;23236:15;23270:4;23267:1;23260:15;23287:180;23335:77;23332:1;23325:88;23432:4;23429:1;23422:15;23456:4;23453:1;23446:15;23473:233;23512:3;23535:24;23553:5;23535:24;:::i;:::-;23526:33;;23581:66;23574:5;23571:77;23568:103;;23651:18;;:::i;:::-;23568:103;23698:1;23691:5;23687:13;23680:20;;23473:233;;;:::o;23712:305::-;23752:3;23771:20;23789:1;23771:20;:::i;:::-;23766:25;;23805:20;23823:1;23805:20;:::i;:::-;23800:25;;23959:1;23891:66;23887:74;23884:1;23881:81;23878:107;;;23965:18;;:::i;:::-;23878:107;24009:1;24006;24002:9;23995:16;;23712:305;;;;:::o;24023:181::-;24163:33;24159:1;24151:6;24147:14;24140:57;24023:181;:::o;24210:366::-;24352:3;24373:67;24437:2;24432:3;24373:67;:::i;:::-;24366:74;;24449:93;24538:3;24449:93;:::i;:::-;24567:2;24562:3;24558:12;24551:19;;24210:366;;;:::o;24582:419::-;24748:4;24786:2;24775:9;24771:18;24763:26;;24835:9;24829:4;24825:20;24821:1;24810:9;24806:17;24799:47;24863:131;24989:4;24863:131;:::i;:::-;24855:139;;24582:419;;;:::o;25007:545::-;25180:4;25218:3;25207:9;25203:19;25195:27;;25232:71;25300:1;25289:9;25285:17;25276:6;25232:71;:::i;:::-;25313:68;25377:2;25366:9;25362:18;25353:6;25313:68;:::i;:::-;25391:72;25459:2;25448:9;25444:18;25435:6;25391:72;:::i;:::-;25473;25541:2;25530:9;25526:18;25517:6;25473:72;:::i;:::-;25007:545;;;;;;;:::o;25558:173::-;25698:25;25694:1;25686:6;25682:14;25675:49;25558:173;:::o;25737:366::-;25879:3;25900:67;25964:2;25959:3;25900:67;:::i;:::-;25893:74;;25976:93;26065:3;25976:93;:::i;:::-;26094:2;26089:3;26085:12;26078:19;;25737:366;;;:::o;26109:419::-;26275:4;26313:2;26302:9;26298:18;26290:26;;26362:9;26356:4;26352:20;26348:1;26337:9;26333:17;26326:47;26390:131;26516:4;26390:131;:::i;:::-;26382:139;;26109:419;;;:::o;26534:176::-;26674:28;26670:1;26662:6;26658:14;26651:52;26534:176;:::o;26716:366::-;26858:3;26879:67;26943:2;26938:3;26879:67;:::i;:::-;26872:74;;26955:93;27044:3;26955:93;:::i;:::-;27073:2;27068:3;27064:12;27057:19;;26716:366;;;:::o;27088:419::-;27254:4;27292:2;27281:9;27277:18;27269:26;;27341:9;27335:4;27331:20;27327:1;27316:9;27312:17;27305:47;27369:131;27495:4;27369:131;:::i;:::-;27361:139;;27088:419;;;:::o;27513:221::-;27653:34;27649:1;27641:6;27637:14;27630:58;27722:4;27717:2;27709:6;27705:15;27698:29;27513:221;:::o;27740:366::-;27882:3;27903:67;27967:2;27962:3;27903:67;:::i;:::-;27896:74;;27979:93;28068:3;27979:93;:::i;:::-;28097:2;28092:3;28088:12;28081:19;;27740:366;;;:::o;28112:419::-;28278:4;28316:2;28305:9;28301:18;28293:26;;28365:9;28359:4;28355:20;28351:1;28340:9;28336:17;28329:47;28393:131;28519:4;28393:131;:::i;:::-;28385:139;;28112:419;;;:::o;28537:224::-;28677:34;28673:1;28665:6;28661:14;28654:58;28746:7;28741:2;28733:6;28729:15;28722:32;28537:224;:::o;28767:366::-;28909:3;28930:67;28994:2;28989:3;28930:67;:::i;:::-;28923:74;;29006:93;29095:3;29006:93;:::i;:::-;29124:2;29119:3;29115:12;29108:19;;28767:366;;;:::o;29139:419::-;29305:4;29343:2;29332:9;29328:18;29320:26;;29392:9;29386:4;29382:20;29378:1;29367:9;29363:17;29356:47;29420:131;29546:4;29420:131;:::i;:::-;29412:139;;29139:419;;;:::o;29564:220::-;29704:34;29700:1;29692:6;29688:14;29681:58;29773:3;29768:2;29760:6;29756:15;29749:28;29564:220;:::o;29790:366::-;29932:3;29953:67;30017:2;30012:3;29953:67;:::i;:::-;29946:74;;30029:93;30118:3;30029:93;:::i;:::-;30147:2;30142:3;30138:12;30131:19;;29790:366;;;:::o;30162:419::-;30328:4;30366:2;30355:9;30351:18;30343:26;;30415:9;30409:4;30405:20;30401:1;30390:9;30386:17;30379:47;30443:131;30569:4;30443:131;:::i;:::-;30435:139;;30162:419;;;:::o;30587:174::-;30727:26;30723:1;30715:6;30711:14;30704:50;30587:174;:::o;30767:366::-;30909:3;30930:67;30994:2;30989:3;30930:67;:::i;:::-;30923:74;;31006:93;31095:3;31006:93;:::i;:::-;31124:2;31119:3;31115:12;31108:19;;30767:366;;;:::o;31139:419::-;31305:4;31343:2;31332:9;31328:18;31320:26;;31392:9;31386:4;31382:20;31378:1;31367:9;31363:17;31356:47;31420:131;31546:4;31420:131;:::i;:::-;31412:139;;31139:419;;;:::o;31564:178::-;31704:30;31700:1;31692:6;31688:14;31681:54;31564:178;:::o;31748:366::-;31890:3;31911:67;31975:2;31970:3;31911:67;:::i;:::-;31904:74;;31987:93;32076:3;31987:93;:::i;:::-;32105:2;32100:3;32096:12;32089:19;;31748:366;;;:::o;32120:419::-;32286:4;32324:2;32313:9;32309:18;32301:26;;32373:9;32367:4;32363:20;32359:1;32348:9;32344:17;32337:47;32401:131;32527:4;32401:131;:::i;:::-;32393:139;;32120:419;;;:::o;32545:94::-;32578:8;32626:5;32622:2;32618:14;32597:35;;32545:94;;;:::o;32645:::-;32684:7;32713:20;32727:5;32713:20;:::i;:::-;32702:31;;32645:94;;;:::o;32745:100::-;32784:7;32813:26;32833:5;32813:26;:::i;:::-;32802:37;;32745:100;;;:::o;32851:157::-;32956:45;32976:24;32994:5;32976:24;:::i;:::-;32956:45;:::i;:::-;32951:3;32944:58;32851:157;;:::o;33014:256::-;33126:3;33141:75;33212:3;33203:6;33141:75;:::i;:::-;33241:2;33236:3;33232:12;33225:19;;33261:3;33254:10;;33014:256;;;;:::o;33276:235::-;33416:34;33412:1;33404:6;33400:14;33393:58;33485:18;33480:2;33472:6;33468:15;33461:43;33276:235;:::o;33517:366::-;33659:3;33680:67;33744:2;33739:3;33680:67;:::i;:::-;33673:74;;33756:93;33845:3;33756:93;:::i;:::-;33874:2;33869:3;33865:12;33858:19;;33517:366;;;:::o;33889:419::-;34055:4;34093:2;34082:9;34078:18;34070:26;;34142:9;34136:4;34132:20;34128:1;34117:9;34113:17;34106:47;34170:131;34296:4;34170:131;:::i;:::-;34162:139;;33889:419;;;:::o;34314:148::-;34416:11;34453:3;34438:18;;34314:148;;;;:::o;34468:377::-;34574:3;34602:39;34635:5;34602:39;:::i;:::-;34657:89;34739:6;34734:3;34657:89;:::i;:::-;34650:96;;34755:52;34800:6;34795:3;34788:4;34781:5;34777:16;34755:52;:::i;:::-;34832:6;34827:3;34823:16;34816:23;;34578:267;34468:377;;;;:::o;34851:141::-;34900:4;34923:3;34915:11;;34946:3;34943:1;34936:14;34980:4;34977:1;34967:18;34959:26;;34851:141;;;:::o;35022:845::-;35125:3;35162:5;35156:12;35191:36;35217:9;35191:36;:::i;:::-;35243:89;35325:6;35320:3;35243:89;:::i;:::-;35236:96;;35363:1;35352:9;35348:17;35379:1;35374:137;;;;35525:1;35520:341;;;;35341:520;;35374:137;35458:4;35454:9;35443;35439:25;35434:3;35427:38;35494:6;35489:3;35485:16;35478:23;;35374:137;;35520:341;35587:38;35619:5;35587:38;:::i;:::-;35647:1;35661:154;35675:6;35672:1;35669:13;35661:154;;;35749:7;35743:14;35739:1;35734:3;35730:11;35723:35;35799:1;35790:7;35786:15;35775:26;;35697:4;35694:1;35690:12;35685:17;;35661:154;;;35844:6;35839:3;35835:16;35828:23;;35527:334;;35341:520;;35129:738;;35022:845;;;;:::o;35873:589::-;36098:3;36120:95;36211:3;36202:6;36120:95;:::i;:::-;36113:102;;36232:95;36323:3;36314:6;36232:95;:::i;:::-;36225:102;;36344:92;36432:3;36423:6;36344:92;:::i;:::-;36337:99;;36453:3;36446:10;;35873:589;;;;;;:::o;36468:348::-;36508:7;36531:20;36549:1;36531:20;:::i;:::-;36526:25;;36565:20;36583:1;36565:20;:::i;:::-;36560:25;;36753:1;36685:66;36681:74;36678:1;36675:81;36670:1;36663:9;36656:17;36652:105;36649:131;;;36760:18;;:::i;:::-;36649:131;36808:1;36805;36801:9;36790:20;;36468:348;;;;:::o;36822:169::-;36962:21;36958:1;36950:6;36946:14;36939:45;36822:169;:::o;36997:366::-;37139:3;37160:67;37224:2;37219:3;37160:67;:::i;:::-;37153:74;;37236:93;37325:3;37236:93;:::i;:::-;37354:2;37349:3;37345:12;37338:19;;36997:366;;;:::o;37369:419::-;37535:4;37573:2;37562:9;37558:18;37550:26;;37622:9;37616:4;37612:20;37608:1;37597:9;37593:17;37586:47;37650:131;37776:4;37650:131;:::i;:::-;37642:139;;37369:419;;;:::o;37794:180::-;37934:32;37930:1;37922:6;37918:14;37911:56;37794:180;:::o;37980:366::-;38122:3;38143:67;38207:2;38202:3;38143:67;:::i;:::-;38136:74;;38219:93;38308:3;38219:93;:::i;:::-;38337:2;38332:3;38328:12;38321:19;;37980:366;;;:::o;38352:419::-;38518:4;38556:2;38545:9;38541:18;38533:26;;38605:9;38599:4;38595:20;38591:1;38580:9;38576:17;38569:47;38633:131;38759:4;38633:131;:::i;:::-;38625:139;;38352:419;;;:::o;38777:224::-;38917:34;38913:1;38905:6;38901:14;38894:58;38986:7;38981:2;38973:6;38969:15;38962:32;38777:224;:::o;39007:366::-;39149:3;39170:67;39234:2;39229:3;39170:67;:::i;:::-;39163:74;;39246:93;39335:3;39246:93;:::i;:::-;39364:2;39359:3;39355:12;39348:19;;39007:366;;;:::o;39379:419::-;39545:4;39583:2;39572:9;39568:18;39560:26;;39632:9;39626:4;39622:20;39618:1;39607:9;39603:17;39596:47;39660:131;39786:4;39660:131;:::i;:::-;39652:139;;39379:419;;;:::o;39804:225::-;39944:34;39940:1;39932:6;39928:14;39921:58;40013:8;40008:2;40000:6;39996:15;39989:33;39804:225;:::o;40035:366::-;40177:3;40198:67;40262:2;40257:3;40198:67;:::i;:::-;40191:74;;40274:93;40363:3;40274:93;:::i;:::-;40392:2;40387:3;40383:12;40376:19;;40035:366;;;:::o;40407:419::-;40573:4;40611:2;40600:9;40596:18;40588:26;;40660:9;40654:4;40650:20;40646:1;40635:9;40631:17;40624:47;40688:131;40814:4;40688:131;:::i;:::-;40680:139;;40407:419;;;:::o;40832:332::-;40953:4;40991:2;40980:9;40976:18;40968:26;;41004:71;41072:1;41061:9;41057:17;41048:6;41004:71;:::i;:::-;41085:72;41153:2;41142:9;41138:18;41129:6;41085:72;:::i;:::-;40832:332;;;;;:::o;41170:137::-;41224:5;41255:6;41249:13;41240:22;;41271:30;41295:5;41271:30;:::i;:::-;41170:137;;;;:::o;41313:345::-;41380:6;41429:2;41417:9;41408:7;41404:23;41400:32;41397:119;;;41435:79;;:::i;:::-;41397:119;41555:1;41580:61;41633:7;41624:6;41613:9;41609:22;41580:61;:::i;:::-;41570:71;;41526:125;41313:345;;;;:::o;41664:180::-;41712:77;41709:1;41702:88;41809:4;41806:1;41799:15;41833:4;41830:1;41823:15;41850:185;41890:1;41907:20;41925:1;41907:20;:::i;:::-;41902:25;;41941:20;41959:1;41941:20;:::i;:::-;41936:25;;41980:1;41970:35;;41985:18;;:::i;:::-;41970:35;42027:1;42024;42020:9;42015:14;;41850:185;;;;:::o;42041:191::-;42081:4;42101:20;42119:1;42101:20;:::i;:::-;42096:25;;42135:20;42153:1;42135:20;:::i;:::-;42130:25;;42174:1;42171;42168:8;42165:34;;;42179:18;;:::i;:::-;42165:34;42224:1;42221;42217:9;42209:17;;42041:191;;;;:::o;42238:176::-;42270:1;42287:20;42305:1;42287:20;:::i;:::-;42282:25;;42321:20;42339:1;42321:20;:::i;:::-;42316:25;;42360:1;42350:35;;42365:18;;:::i;:::-;42350:35;42406:1;42403;42399:9;42394:14;;42238:176;;;;:::o;42420:98::-;42471:6;42505:5;42499:12;42489:22;;42420:98;;;:::o;42524:168::-;42607:11;42641:6;42636:3;42629:19;42681:4;42676:3;42672:14;42657:29;;42524:168;;;;:::o;42698:360::-;42784:3;42812:38;42844:5;42812:38;:::i;:::-;42866:70;42929:6;42924:3;42866:70;:::i;:::-;42859:77;;42945:52;42990:6;42985:3;42978:4;42971:5;42967:16;42945:52;:::i;:::-;43022:29;43044:6;43022:29;:::i;:::-;43017:3;43013:39;43006:46;;42788:270;42698:360;;;;:::o;43064:640::-;43259:4;43297:3;43286:9;43282:19;43274:27;;43311:71;43379:1;43368:9;43364:17;43355:6;43311:71;:::i;:::-;43392:72;43460:2;43449:9;43445:18;43436:6;43392:72;:::i;:::-;43474;43542:2;43531:9;43527:18;43518:6;43474:72;:::i;:::-;43593:9;43587:4;43583:20;43578:2;43567:9;43563:18;43556:48;43621:76;43692:4;43683:6;43621:76;:::i;:::-;43613:84;;43064:640;;;;;;;:::o;43710:141::-;43766:5;43797:6;43791:13;43782:22;;43813:32;43839:5;43813:32;:::i;:::-;43710:141;;;;:::o;43857:349::-;43926:6;43975:2;43963:9;43954:7;43950:23;43946:32;43943:119;;;43981:79;;:::i;:::-;43943:119;44101:1;44126:63;44181:7;44172:6;44161:9;44157:22;44126:63;:::i;:::-;44116:73;;44072:127;43857:349;;;;:::o

Swarm Source

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