ETH Price: $3,102.64 (-1.09%)

Token

Blitzed Bucks (BBHC)
 

Overview

Max Total Supply

873 BBHC

Holders

627

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BBHC
0xe2dc510809d750426d751e81d41c0bd75ac01fa2
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:
BlitzedBucks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-13
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

pragma solidity ^0.8.0; 

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    function toString(uint256 value) internal pure returns (string memory) { 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
library Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    } 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    } 
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    } 
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else { 
            if (returndata.length > 0) { 

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
interface IERC721 is IERC165 { 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); 
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); 
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved); 
    function balanceOf(address owner) external view returns (uint256 balance); 
    function ownerOf(uint256 tokenId) external view returns (address owner); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function approve(address to, uint256 tokenId) external;
 
    function getApproved(uint256 tokenId) external view returns (address operator); 
    function setApprovalForAll(address operator, bool _approved) external; 
    function isApprovedForAll(address owner, address operator) external view returns (bool); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
} 
interface IERC721Enumerable is IERC721 { 
    function totalSupply() external view returns (uint256); 
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); 
    function tokenByIndex(uint256 index) external view returns (uint256);
}  
interface IERC721Metadata is IERC721 { 
    function name() external view returns (string memory); 
    function symbol() external view returns (string memory); 
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

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

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

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view 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 && 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 override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !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() && !_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;
    }

    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 {
        _mint(to, quantity, _data, true);
    }

    /**
     * @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,
        bytes memory _data,
        bool safe
    ) 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 (safe && 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 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 This is 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);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _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))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract BlitzedBucks is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;


  uint256 public MAX_PER_Transaction = 10; // maximam amount that user can mint/Transaction
  uint256 public MAX_PER_WALLET = 10; // maximam amount that user can mint/Wallet

  mapping(address => uint256) public publicClaimedBy;

  uint256 public  PRICE = 0.08 ether; 

  uint256 private constant TotalCollectionSize_ = 8500; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 20; //max mint per transaction

  string private _baseTokenURI;
  uint public reserve = 0;


  uint public status = 0; //0-pause 1-whitelist 2-public

  constructor() ERC721A("Blitzed Bucks","BBHC") {

  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
 
  function mint(uint256 quantity) external payable callerIsUser {
    require(status == 2 , "Sale is not Active");
    require(totalSupply() + quantity <= TotalCollectionSize_-reserve, "reached max supply");
    require(quantity <= MAX_PER_Transaction,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");


    publicClaimedBy[msg.sender] += quantity;
    require(publicClaimedBy[msg.sender] <= MAX_PER_WALLET, "Purchase exceeds max allowed");
    _safeMint(msg.sender, quantity);
  }

   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, "/", tokenId.toString(), ".json")) : "";
  }

  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return _ownershipOf(tokenId);
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

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

   function changeMAX_PER_WALLET(uint256 q) external onlyOwner
  {
      MAX_PER_WALLET = q;
  }

  function changeMAX_PER_Transaction(uint256 q) external onlyOwner
  {
      MAX_PER_Transaction = q;
  }

  function setStatus(uint256 s)external onlyOwner{
      status = s;
  }

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

 function setReserveTokens(uint256 _quantity) public onlyOwner {
        reserve=_quantity;
    }
    
  function getPrice(uint256 _quantity) public view returns (uint256) {
       
        return _quantity*PRICE;
    }

 function mintReserveTokens(uint quantity) public onlyOwner {
        require(quantity <= reserve, "The quantity exceeds the reserve.");
        reserve -= quantity;
        _safeMint(msg.sender, quantity);

    }

  function airdrop(address sendTo, uint quantity)public onlyOwner{
    require(totalSupply() + quantity <= TotalCollectionSize_, "reached max supply");
    _safeMint(sendTo, quantity);
  }


    //    WhiteList CODE STARTS    //

    uint256 public whiteListMaxMint = 10;
    bytes32 public whitelistMerkleRoot;
    uint256 public itemPriceWhiteList = 0.06 ether;
    mapping(address => uint256) public whiteListClaimedBy;
    uint256 private TotalWLavailable = 1000; // total number of nfts


    function setWhitelistMerkleRoot(bytes32 _whitelistMerkleRoot) external onlyOwner {
        whitelistMerkleRoot = _whitelistMerkleRoot;
    }

    function getWhitelistPrice(uint256 _quantity) public view returns (uint256) {
       
           return _quantity*itemPriceWhiteList;
    }

    function inWhitelist(bytes32[] memory _proof, address _owner) public view returns (bool) {
        return MerkleProof.verify(_proof, whitelistMerkleRoot, keccak256(abi.encodePacked(_owner)));
    }

    function purchaseWhiteListTokens(uint256 _howMany, bytes32[] calldata _proof) external payable {
        require(status == 1 , "Sale is not active ");
        require(totalSupply()+_howMany<=TotalWLavailable,"Quantity must be lesser then MaxSupply");
        require(inWhitelist(_proof, msg.sender), "You are not in presale");
        require(msg.value >= _howMany * itemPriceWhiteList, "Try to send more ETH");

        whiteListClaimedBy[msg.sender] += _howMany;
        require(whiteListClaimedBy[msg.sender] <= whiteListMaxMint, "Purchase exceeds max allowed");

        _safeMint(msg.sender, _howMany);

    }

     function setWhiteListMaxMint(uint256 _whiteListMaxMint) external onlyOwner {
        whiteListMaxMint = _whiteListMaxMint;
    }

     function setWLavailable(uint256 _whiteListCollection) external onlyOwner {
        TotalWLavailable = _whiteListCollection;
    }

    function setPriceWhiteList(uint256 _itemPriceWhiteList) external onlyOwner {
        itemPriceWhiteList = _itemPriceWhiteList;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","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":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sendTo","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getWhitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"address","name":"_owner","type":"address"}],"name":"inWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"itemPriceWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_howMany","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"purchaseWhiteListTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemPriceWhiteList","type":"uint256"}],"name":"setPriceWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setReserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListCollection","type":"uint256"}],"name":"setWLavailable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListMaxMint","type":"uint256"}],"name":"setWhiteListMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a8055600a600b5567011c37937e080000600d556000600f556000601055600a60115566d529ae9e8600006013556103e86015553480156200004657600080fd5b506040518060400160405280600d81526020017f426c69747a6564204275636b73000000000000000000000000000000000000008152506040518060400160405280600481526020017f4242484300000000000000000000000000000000000000000000000000000000815250620000d3620000c76200012b60201b60201c565b6200013360201b60201c565b8160039080519060200190620000eb92919062000200565b5080600490805190602001906200010492919062000200565b5062000115620001f760201b60201c565b6001819055505050600160098190555062000315565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200020e90620002b0565b90600052602060002090601f0160209004810192826200023257600085556200027e565b82601f106200024d57805160ff19168380011785556200027e565b828001600101855582156200027e579182015b828111156200027d57825182559160200191906001019062000260565b5b5090506200028d919062000291565b5090565b5b80821115620002ac57600081600090555060010162000292565b5090565b60006002820490506001821680620002c957607f821691505b60208210811415620002e057620002df620002e6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614c8b80620003256000396000f3fe6080604052600436106102935760003560e01c8063752361431161015a578063ac446002116100c1578063dc33e6811161007a578063dc33e681146109e2578063e5ec56a014610a1f578063e757223014610a5c578063e8006bb014610a99578063e985e9c514610ac2578063f2fde38b14610aff57610293565b8063ac446002146108d4578063aebceff4146108eb578063b88d4fde14610928578063bd32fb6614610951578063c87b56dd1461097a578063cd3293de146109b757610293565b80639231ab2a116101135780639231ab2a146107d357806395d89b4114610810578063a0712d681461083b578063a22cb46514610857578063a40ece7a14610880578063aa98e0c6146108a957610293565b806375236143146106c35780637cdd702e146107005780638825b0141461072b5780638ba4cc3c146107545780638d859f3e1461077d5780638da5cb5b146107a857610293565b80632ba2865b116101fe57806355f804b3116101b757806355f804b3146105b75780636352211e146105e057806369ba1a751461061d5780636a44e1731461064657806370a082311461066f578063715018a6146106ac57610293565b80632ba2865b146104bd5780632ea7c5d9146104e65780633fd173661461050f57806342842e0e146105385780634e69d5601461056157806351d7ff931461058c57610293565b806318160ddd1161025057806318160ddd146103ad5780631984b286146103d8578063200d2ed21461041557806323b872dd146104405780632632d5f814610469578063288bd8fd1461049457610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780630f2cdd6c1461036657806310157fc314610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613ac6565b610b28565b6040516102cc91906140c5565b60405180910390f35b3480156102e157600080fd5b506102ea610c0a565b6040516102f791906140fb565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613b69565b610c9c565b604051610334919061405e565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906139fd565b610d18565b005b34801561037257600080fd5b5061037b610e23565b6040516103889190614338565b60405180910390f35b6103ab60048036038101906103a69190613b96565b610e29565b005b3480156103b957600080fd5b506103c2611088565b6040516103cf9190614338565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa919061387a565b61109f565b60405161040c9190614338565b60405180910390f35b34801561042157600080fd5b5061042a6110b7565b6040516104379190614338565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906138e7565b6110bd565b005b34801561047557600080fd5b5061047e6110cd565b60405161048b9190614338565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190613b69565b6110d3565b005b3480156104c957600080fd5b506104e460048036038101906104df9190613b69565b6111ba565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613b69565b611240565b005b34801561051b57600080fd5b5061053660048036038101906105319190613b69565b6112c6565b005b34801561054457600080fd5b5061055f600480360381019061055a91906138e7565b61134c565b005b34801561056d57600080fd5b5061057661136c565b6040516105839190614338565b60405180910390f35b34801561059857600080fd5b506105a1611376565b6040516105ae9190614338565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613b20565b61137c565b005b3480156105ec57600080fd5b5061060760048036038101906106029190613b69565b611412565b604051610614919061405e565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613b69565b611428565b005b34801561065257600080fd5b5061066d60048036038101906106689190613b69565b6114ae565b005b34801561067b57600080fd5b506106966004803603810190610691919061387a565b611534565b6040516106a39190614338565b60405180910390f35b3480156106b857600080fd5b506106c1611604565b005b3480156106cf57600080fd5b506106ea60048036038101906106e5919061387a565b61168c565b6040516106f79190614338565b60405180910390f35b34801561070c57600080fd5b506107156116a4565b6040516107229190614338565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613b69565b6116aa565b005b34801561076057600080fd5b5061077b600480360381019061077691906139fd565b611730565b005b34801561078957600080fd5b50610792611811565b60405161079f9190614338565b60405180910390f35b3480156107b457600080fd5b506107bd611817565b6040516107ca919061405e565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613b69565b611840565b604051610807919061431d565b60405180910390f35b34801561081c57600080fd5b50610825611858565b60405161083291906140fb565b60405180910390f35b61085560048036038101906108509190613b69565b6118ea565b005b34801561086357600080fd5b5061087e600480360381019061087991906139bd565b611b7d565b005b34801561088c57600080fd5b506108a760048036038101906108a29190613b69565b611cf5565b005b3480156108b557600080fd5b506108be611d7b565b6040516108cb91906140e0565b60405180910390f35b3480156108e057600080fd5b506108e9611d81565b005b3480156108f757600080fd5b50610912600480360381019061090d9190613b69565b611f02565b60405161091f9190614338565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a919061393a565b611f19565b005b34801561095d57600080fd5b5061097860048036038101906109739190613a99565b611f95565b005b34801561098657600080fd5b506109a1600480360381019061099c9190613b69565b61201b565b6040516109ae91906140fb565b60405180910390f35b3480156109c357600080fd5b506109cc6120c2565b6040516109d99190614338565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a04919061387a565b6120c8565b604051610a169190614338565b60405180910390f35b348015610a2b57600080fd5b50610a466004803603810190610a419190613a3d565b6120da565b604051610a5391906140c5565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e9190613b69565b612117565b604051610a909190614338565b60405180910390f35b348015610aa557600080fd5b50610ac06004803603810190610abb9190613b69565b61212e565b005b348015610ace57600080fd5b50610ae96004803603810190610ae491906138a7565b6121b4565b604051610af691906140c5565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b21919061387a565b612248565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bf357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c035750610c0282612340565b5b9050919050565b606060038054610c199061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c459061463d565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b5050505050905090565b6000610ca7826123aa565b610cdd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d2382611412565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610daa6123f8565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ddc5750610dda81610dd56123f8565b6121b4565b155b15610e13576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e1e838383612400565b505050565b600b5481565b600160105414610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e659061415d565b60405180910390fd5b60155483610e7a611088565b610e849190614454565b1115610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc9061423d565b60405180910390fd5b610f10828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050336120da565b610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906141fd565b60405180910390fd5b60135483610f5d91906144db565b341015610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f969061413d565b60405180910390fd5b82601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fee9190614454565b92505081905550601154601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906142dd565b60405180910390fd5b61108333846124b2565b505050565b60006110926124d0565b6002546001540303905090565b60146020528060005260406000206000915090505481565b60105481565b6110c88383836124d9565b505050565b60135481565b6110db6123f8565b73ffffffffffffffffffffffffffffffffffffffff166110f9611817565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111469061421d565b60405180910390fd5b600f54811115611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b9061417d565b60405180910390fd5b80600f60008282546111a69190614535565b925050819055506111b733826124b2565b50565b6111c26123f8565b73ffffffffffffffffffffffffffffffffffffffff166111e0611817565b73ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d9061421d565b60405180910390fd5b80600b8190555050565b6112486123f8565b73ffffffffffffffffffffffffffffffffffffffff16611266611817565b73ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061421d565b60405180910390fd5b8060118190555050565b6112ce6123f8565b73ffffffffffffffffffffffffffffffffffffffff166112ec611817565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113399061421d565b60405180910390fd5b80600d8190555050565b61136783838360405180602001604052806000815250611f19565b505050565b6000601054905090565b600a5481565b6113846123f8565b73ffffffffffffffffffffffffffffffffffffffff166113a2611817565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef9061421d565b60405180910390fd5b80600e908051906020019061140e929190613542565b5050565b600061141d8261298f565b600001519050919050565b6114306123f8565b73ffffffffffffffffffffffffffffffffffffffff1661144e611817565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b9061421d565b60405180910390fd5b8060108190555050565b6114b66123f8565b73ffffffffffffffffffffffffffffffffffffffff166114d4611817565b73ffffffffffffffffffffffffffffffffffffffff161461152a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115219061421d565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561159c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61160c6123f8565b73ffffffffffffffffffffffffffffffffffffffff1661162a611817565b73ffffffffffffffffffffffffffffffffffffffff1614611680576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116779061421d565b60405180910390fd5b61168a6000612c1e565b565b600c6020528060005260406000206000915090505481565b60115481565b6116b26123f8565b73ffffffffffffffffffffffffffffffffffffffff166116d0611817565b73ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d9061421d565b60405180910390fd5b8060138190555050565b6117386123f8565b73ffffffffffffffffffffffffffffffffffffffff16611756611817565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061421d565b60405180910390fd5b612134816117b8611088565b6117c29190614454565b1115611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa906141dd565b60405180910390fd5b61180d82826124b2565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118486135c8565b6118518261298f565b9050919050565b6060600480546118679061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546118939061463d565b80156118e05780601f106118b5576101008083540402835291602001916118e0565b820191906000526020600020905b8154815290600101906020018083116118c357829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f906141bd565b60405180910390fd5b60026010541461199d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119949061419d565b60405180910390fd5b600f546121346119ad9190614535565b816119b6611088565b6119c09190614454565b1115611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906141dd565b60405180910390fd5b600a54811115611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d906142bd565b60405180910390fd5b80600d54611a5491906144db565b341015611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d9061429d565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ae59190614454565b92505081905550600b54600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906142dd565b60405180910390fd5b611b7a33826124b2565b50565b611b856123f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bea576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611bf76123f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ca46123f8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ce991906140c5565b60405180910390a35050565b611cfd6123f8565b73ffffffffffffffffffffffffffffffffffffffff16611d1b611817565b73ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d689061421d565b60405180910390fd5b80600a8190555050565b60125481565b611d896123f8565b73ffffffffffffffffffffffffffffffffffffffff16611da7611817565b73ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df49061421d565b60405180910390fd5b60026009541415611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a906142fd565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611e7190614049565b60006040518083038185875af1925050503d8060008114611eae576040519150601f19603f3d011682016040523d82523d6000602084013e611eb3565b606091505b5050905080611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee9061427d565b60405180910390fd5b506001600981905550565b600060135482611f1291906144db565b9050919050565b611f248484846124d9565b611f438373ffffffffffffffffffffffffffffffffffffffff16612ce2565b8015611f585750611f5684848484612cf5565b155b15611f8f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611f9d6123f8565b73ffffffffffffffffffffffffffffffffffffffff16611fbb611817565b73ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120089061421d565b60405180910390fd5b8060128190555050565b6060612026826123aa565b612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c9061425d565b60405180910390fd5b600061206f612e55565b9050600081511161208f57604051806020016040528060008152506120ba565b8061209984612ee7565b6040516020016120aa92919061400f565b6040516020818303038152906040525b915050919050565b600f5481565b60006120d382613048565b9050919050565b600061210f83601254846040516020016120f49190613ff4565b604051602081830303815290604052805190602001206130b2565b905092915050565b6000600d548261212791906144db565b9050919050565b6121366123f8565b73ffffffffffffffffffffffffffffffffffffffff16612154611817565b73ffffffffffffffffffffffffffffffffffffffff16146121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a19061421d565b60405180910390fd5b8060158190555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122506123f8565b73ffffffffffffffffffffffffffffffffffffffff1661226e611817565b73ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb9061421d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b9061411d565b60405180910390fd5b61233d81612c1e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816123b56124d0565b111580156123c4575060015482105b80156123f1575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6124cc8282604051806020016040528060008152506130c9565b5050565b60006001905090565b60006124e48261298f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461254f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166125706123f8565b73ffffffffffffffffffffffffffffffffffffffff16148061259f575061259e856125996123f8565b6121b4565b5b806125e457506125ad6123f8565b73ffffffffffffffffffffffffffffffffffffffff166125cc84610c9c565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061261d576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612684576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61269185858560016130db565b61269d60008487612400565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561291d57600154821461291c57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461298885858560016130e1565b5050505050565b6129976135c8565b6000829050806129a56124d0565b111580156129b4575060015481105b15612be7576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612be557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ac9578092505050612c19565b5b600115612be457818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612bdf578092505050612c19565b612aca565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1b6123f8565b8786866040518563ffffffff1660e01b8152600401612d3d9493929190614079565b602060405180830381600087803b158015612d5757600080fd5b505af1925050508015612d8857506040513d601f19601f82011682018060405250810190612d859190613af3565b60015b612e02573d8060008114612db8576040519150601f19603f3d011682016040523d82523d6000602084013e612dbd565b606091505b50600081511415612dfa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600e8054612e649061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054612e909061463d565b8015612edd5780601f10612eb257610100808354040283529160200191612edd565b820191906000526020600020905b815481529060010190602001808311612ec057829003601f168201915b5050505050905090565b60606000821415612f2f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613043565b600082905060005b60008214612f61578080612f4a906146a0565b915050600a82612f5a91906144aa565b9150612f37565b60008167ffffffffffffffff811115612f7d57612f7c6147fa565b5b6040519080825280601f01601f191660200182016040528015612faf5781602001600182028036833780820191505090505b5090505b6000851461303c57600182612fc89190614535565b9150600a85612fd7919061470d565b6030612fe39190614454565b60f81b818381518110612ff957612ff86147cb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561303591906144aa565b9450612fb3565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6000826130bf85846130e7565b1490509392505050565b6130d6838383600161315c565b505050565b50505050565b50505050565b60008082905060005b845181101561315157600085828151811061310e5761310d6147cb565b5b6020026020010151905080831161313057613129838261352b565b925061313d565b61313a818461352b565b92505b508080613149906146a0565b9150506130f0565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156131ca576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613205576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61321260008683876130db565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156133dc57506133db8773ffffffffffffffffffffffffffffffffffffffff16612ce2565b5b156134a2575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134516000888480600101955088612cf5565b613487576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156133e257826001541461349d57600080fd5b61350e565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156134a3575b81600181905550505061352460008683876130e1565b5050505050565b600082600052816020526040600020905092915050565b82805461354e9061463d565b90600052602060002090601f01602090048101928261357057600085556135b7565b82601f1061358957805160ff19168380011785556135b7565b828001600101855582156135b7579182015b828111156135b657825182559160200191906001019061359b565b5b5090506135c4919061360b565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561362457600081600090555060010161360c565b5090565b600061363b61363684614378565b614353565b9050808382526020820190508285602086028201111561365e5761365d614833565b5b60005b8581101561368e578161367488826137ca565b845260208401935060208301925050600181019050613661565b5050509392505050565b60006136ab6136a6846143a4565b614353565b9050828152602081018484840111156136c7576136c6614838565b5b6136d28482856145fb565b509392505050565b60006136ed6136e8846143d5565b614353565b90508281526020810184848401111561370957613708614838565b5b6137148482856145fb565b509392505050565b60008135905061372b81614be2565b92915050565b60008083601f8401126137475761374661482e565b5b8235905067ffffffffffffffff81111561376457613763614829565b5b6020830191508360208202830111156137805761377f614833565b5b9250929050565b600082601f83011261379c5761379b61482e565b5b81356137ac848260208601613628565b91505092915050565b6000813590506137c481614bf9565b92915050565b6000813590506137d981614c10565b92915050565b6000813590506137ee81614c27565b92915050565b60008151905061380381614c27565b92915050565b600082601f83011261381e5761381d61482e565b5b813561382e848260208601613698565b91505092915050565b600082601f83011261384c5761384b61482e565b5b813561385c8482602086016136da565b91505092915050565b60008135905061387481614c3e565b92915050565b6000602082840312156138905761388f614842565b5b600061389e8482850161371c565b91505092915050565b600080604083850312156138be576138bd614842565b5b60006138cc8582860161371c565b92505060206138dd8582860161371c565b9150509250929050565b600080600060608486031215613900576138ff614842565b5b600061390e8682870161371c565b935050602061391f8682870161371c565b925050604061393086828701613865565b9150509250925092565b6000806000806080858703121561395457613953614842565b5b60006139628782880161371c565b94505060206139738782880161371c565b935050604061398487828801613865565b925050606085013567ffffffffffffffff8111156139a5576139a461483d565b5b6139b187828801613809565b91505092959194509250565b600080604083850312156139d4576139d3614842565b5b60006139e28582860161371c565b92505060206139f3858286016137b5565b9150509250929050565b60008060408385031215613a1457613a13614842565b5b6000613a228582860161371c565b9250506020613a3385828601613865565b9150509250929050565b60008060408385031215613a5457613a53614842565b5b600083013567ffffffffffffffff811115613a7257613a7161483d565b5b613a7e85828601613787565b9250506020613a8f8582860161371c565b9150509250929050565b600060208284031215613aaf57613aae614842565b5b6000613abd848285016137ca565b91505092915050565b600060208284031215613adc57613adb614842565b5b6000613aea848285016137df565b91505092915050565b600060208284031215613b0957613b08614842565b5b6000613b17848285016137f4565b91505092915050565b600060208284031215613b3657613b35614842565b5b600082013567ffffffffffffffff811115613b5457613b5361483d565b5b613b6084828501613837565b91505092915050565b600060208284031215613b7f57613b7e614842565b5b6000613b8d84828501613865565b91505092915050565b600080600060408486031215613baf57613bae614842565b5b6000613bbd86828701613865565b935050602084013567ffffffffffffffff811115613bde57613bdd61483d565b5b613bea86828701613731565b92509250509250925092565b613bff81614569565b82525050565b613c0e81614569565b82525050565b613c25613c2082614569565b6146e9565b82525050565b613c348161457b565b82525050565b613c438161457b565b82525050565b613c5281614587565b82525050565b6000613c6382614406565b613c6d818561441c565b9350613c7d81856020860161460a565b613c8681614847565b840191505092915050565b6000613c9c82614411565b613ca68185614438565b9350613cb681856020860161460a565b613cbf81614847565b840191505092915050565b6000613cd582614411565b613cdf8185614449565b9350613cef81856020860161460a565b80840191505092915050565b6000613d08602683614438565b9150613d1382614865565b604082019050919050565b6000613d2b601483614438565b9150613d36826148b4565b602082019050919050565b6000613d4e601383614438565b9150613d59826148dd565b602082019050919050565b6000613d71602183614438565b9150613d7c82614906565b604082019050919050565b6000613d94601283614438565b9150613d9f82614955565b602082019050919050565b6000613db7601e83614438565b9150613dc28261497e565b602082019050919050565b6000613dda601283614438565b9150613de5826149a7565b602082019050919050565b6000613dfd601683614438565b9150613e08826149d0565b602082019050919050565b6000613e20600583614449565b9150613e2b826149f9565b600582019050919050565b6000613e43602083614438565b9150613e4e82614a22565b602082019050919050565b6000613e66602683614438565b9150613e7182614a4b565b604082019050919050565b6000613e89602f83614438565b9150613e9482614a9a565b604082019050919050565b6000613eac60008361442d565b9150613eb782614ae9565b600082019050919050565b6000613ecf601083614438565b9150613eda82614aec565b602082019050919050565b6000613ef2601683614438565b9150613efd82614b15565b602082019050919050565b6000613f15601683614438565b9150613f2082614b3e565b602082019050919050565b6000613f38601c83614438565b9150613f4382614b67565b602082019050919050565b6000613f5b601f83614438565b9150613f6682614b90565b602082019050919050565b6000613f7e600183614449565b9150613f8982614bb9565b600182019050919050565b606082016000820151613faa6000850182613bf6565b506020820151613fbd6020850182613fe5565b506040820151613fd06040850182613c2b565b50505050565b613fdf816145dd565b82525050565b613fee816145e7565b82525050565b60006140008284613c14565b60148201915081905092915050565b600061401b8285613cca565b915061402682613f71565b91506140328284613cca565b915061403d82613e13565b91508190509392505050565b600061405482613e9f565b9150819050919050565b60006020820190506140736000830184613c05565b92915050565b600060808201905061408e6000830187613c05565b61409b6020830186613c05565b6140a86040830185613fd6565b81810360608301526140ba8184613c58565b905095945050505050565b60006020820190506140da6000830184613c3a565b92915050565b60006020820190506140f56000830184613c49565b92915050565b600060208201905081810360008301526141158184613c91565b905092915050565b6000602082019050818103600083015261413681613cfb565b9050919050565b6000602082019050818103600083015261415681613d1e565b9050919050565b6000602082019050818103600083015261417681613d41565b9050919050565b6000602082019050818103600083015261419681613d64565b9050919050565b600060208201905081810360008301526141b681613d87565b9050919050565b600060208201905081810360008301526141d681613daa565b9050919050565b600060208201905081810360008301526141f681613dcd565b9050919050565b6000602082019050818103600083015261421681613df0565b9050919050565b6000602082019050818103600083015261423681613e36565b9050919050565b6000602082019050818103600083015261425681613e59565b9050919050565b6000602082019050818103600083015261427681613e7c565b9050919050565b6000602082019050818103600083015261429681613ec2565b9050919050565b600060208201905081810360008301526142b681613ee5565b9050919050565b600060208201905081810360008301526142d681613f08565b9050919050565b600060208201905081810360008301526142f681613f2b565b9050919050565b6000602082019050818103600083015261431681613f4e565b9050919050565b60006060820190506143326000830184613f94565b92915050565b600060208201905061434d6000830184613fd6565b92915050565b600061435d61436e565b9050614369828261466f565b919050565b6000604051905090565b600067ffffffffffffffff821115614393576143926147fa565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143bf576143be6147fa565b5b6143c882614847565b9050602081019050919050565b600067ffffffffffffffff8211156143f0576143ef6147fa565b5b6143f982614847565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061445f826145dd565b915061446a836145dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561449f5761449e61473e565b5b828201905092915050565b60006144b5826145dd565b91506144c0836145dd565b9250826144d0576144cf61476d565b5b828204905092915050565b60006144e6826145dd565b91506144f1836145dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452a5761452961473e565b5b828202905092915050565b6000614540826145dd565b915061454b836145dd565b92508282101561455e5761455d61473e565b5b828203905092915050565b6000614574826145bd565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561462857808201518184015260208101905061460d565b83811115614637576000848401525b50505050565b6000600282049050600182168061465557607f821691505b602082108114156146695761466861479c565b5b50919050565b61467882614847565b810181811067ffffffffffffffff82111715614697576146966147fa565b5b80604052505050565b60006146ab826145dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146de576146dd61473e565b5b600182019050919050565b60006146f4826146fb565b9050919050565b600061470682614858565b9050919050565b6000614718826145dd565b9150614723836145dd565b9250826147335761473261476d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f54727920746f2073656e64206d6f726520455448000000000000000000000000600082015250565b7f53616c65206973206e6f74206163746976652000000000000000000000000000600082015250565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f596f7520617265206e6f7420696e2070726573616c6500000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b614beb81614569565b8114614bf657600080fd5b50565b614c028161457b565b8114614c0d57600080fd5b50565b614c1981614587565b8114614c2457600080fd5b50565b614c3081614591565b8114614c3b57600080fd5b50565b614c47816145dd565b8114614c5257600080fd5b5056fea26469706673582212207423d6fd236711e8557cac621b8a2b1a08520af9ace049a3aa95b27f0e0c8e3364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102935760003560e01c8063752361431161015a578063ac446002116100c1578063dc33e6811161007a578063dc33e681146109e2578063e5ec56a014610a1f578063e757223014610a5c578063e8006bb014610a99578063e985e9c514610ac2578063f2fde38b14610aff57610293565b8063ac446002146108d4578063aebceff4146108eb578063b88d4fde14610928578063bd32fb6614610951578063c87b56dd1461097a578063cd3293de146109b757610293565b80639231ab2a116101135780639231ab2a146107d357806395d89b4114610810578063a0712d681461083b578063a22cb46514610857578063a40ece7a14610880578063aa98e0c6146108a957610293565b806375236143146106c35780637cdd702e146107005780638825b0141461072b5780638ba4cc3c146107545780638d859f3e1461077d5780638da5cb5b146107a857610293565b80632ba2865b116101fe57806355f804b3116101b757806355f804b3146105b75780636352211e146105e057806369ba1a751461061d5780636a44e1731461064657806370a082311461066f578063715018a6146106ac57610293565b80632ba2865b146104bd5780632ea7c5d9146104e65780633fd173661461050f57806342842e0e146105385780634e69d5601461056157806351d7ff931461058c57610293565b806318160ddd1161025057806318160ddd146103ad5780631984b286146103d8578063200d2ed21461041557806323b872dd146104405780632632d5f814610469578063288bd8fd1461049457610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780630f2cdd6c1461036657806310157fc314610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613ac6565b610b28565b6040516102cc91906140c5565b60405180910390f35b3480156102e157600080fd5b506102ea610c0a565b6040516102f791906140fb565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613b69565b610c9c565b604051610334919061405e565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906139fd565b610d18565b005b34801561037257600080fd5b5061037b610e23565b6040516103889190614338565b60405180910390f35b6103ab60048036038101906103a69190613b96565b610e29565b005b3480156103b957600080fd5b506103c2611088565b6040516103cf9190614338565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa919061387a565b61109f565b60405161040c9190614338565b60405180910390f35b34801561042157600080fd5b5061042a6110b7565b6040516104379190614338565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906138e7565b6110bd565b005b34801561047557600080fd5b5061047e6110cd565b60405161048b9190614338565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190613b69565b6110d3565b005b3480156104c957600080fd5b506104e460048036038101906104df9190613b69565b6111ba565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613b69565b611240565b005b34801561051b57600080fd5b5061053660048036038101906105319190613b69565b6112c6565b005b34801561054457600080fd5b5061055f600480360381019061055a91906138e7565b61134c565b005b34801561056d57600080fd5b5061057661136c565b6040516105839190614338565b60405180910390f35b34801561059857600080fd5b506105a1611376565b6040516105ae9190614338565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613b20565b61137c565b005b3480156105ec57600080fd5b5061060760048036038101906106029190613b69565b611412565b604051610614919061405e565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613b69565b611428565b005b34801561065257600080fd5b5061066d60048036038101906106689190613b69565b6114ae565b005b34801561067b57600080fd5b506106966004803603810190610691919061387a565b611534565b6040516106a39190614338565b60405180910390f35b3480156106b857600080fd5b506106c1611604565b005b3480156106cf57600080fd5b506106ea60048036038101906106e5919061387a565b61168c565b6040516106f79190614338565b60405180910390f35b34801561070c57600080fd5b506107156116a4565b6040516107229190614338565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613b69565b6116aa565b005b34801561076057600080fd5b5061077b600480360381019061077691906139fd565b611730565b005b34801561078957600080fd5b50610792611811565b60405161079f9190614338565b60405180910390f35b3480156107b457600080fd5b506107bd611817565b6040516107ca919061405e565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613b69565b611840565b604051610807919061431d565b60405180910390f35b34801561081c57600080fd5b50610825611858565b60405161083291906140fb565b60405180910390f35b61085560048036038101906108509190613b69565b6118ea565b005b34801561086357600080fd5b5061087e600480360381019061087991906139bd565b611b7d565b005b34801561088c57600080fd5b506108a760048036038101906108a29190613b69565b611cf5565b005b3480156108b557600080fd5b506108be611d7b565b6040516108cb91906140e0565b60405180910390f35b3480156108e057600080fd5b506108e9611d81565b005b3480156108f757600080fd5b50610912600480360381019061090d9190613b69565b611f02565b60405161091f9190614338565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a919061393a565b611f19565b005b34801561095d57600080fd5b5061097860048036038101906109739190613a99565b611f95565b005b34801561098657600080fd5b506109a1600480360381019061099c9190613b69565b61201b565b6040516109ae91906140fb565b60405180910390f35b3480156109c357600080fd5b506109cc6120c2565b6040516109d99190614338565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a04919061387a565b6120c8565b604051610a169190614338565b60405180910390f35b348015610a2b57600080fd5b50610a466004803603810190610a419190613a3d565b6120da565b604051610a5391906140c5565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e9190613b69565b612117565b604051610a909190614338565b60405180910390f35b348015610aa557600080fd5b50610ac06004803603810190610abb9190613b69565b61212e565b005b348015610ace57600080fd5b50610ae96004803603810190610ae491906138a7565b6121b4565b604051610af691906140c5565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b21919061387a565b612248565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bf357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c035750610c0282612340565b5b9050919050565b606060038054610c199061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c459061463d565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b5050505050905090565b6000610ca7826123aa565b610cdd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d2382611412565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d8b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610daa6123f8565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ddc5750610dda81610dd56123f8565b6121b4565b155b15610e13576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e1e838383612400565b505050565b600b5481565b600160105414610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e659061415d565b60405180910390fd5b60155483610e7a611088565b610e849190614454565b1115610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc9061423d565b60405180910390fd5b610f10828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050336120da565b610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906141fd565b60405180910390fd5b60135483610f5d91906144db565b341015610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f969061413d565b60405180910390fd5b82601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fee9190614454565b92505081905550601154601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906142dd565b60405180910390fd5b61108333846124b2565b505050565b60006110926124d0565b6002546001540303905090565b60146020528060005260406000206000915090505481565b60105481565b6110c88383836124d9565b505050565b60135481565b6110db6123f8565b73ffffffffffffffffffffffffffffffffffffffff166110f9611817565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111469061421d565b60405180910390fd5b600f54811115611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b9061417d565b60405180910390fd5b80600f60008282546111a69190614535565b925050819055506111b733826124b2565b50565b6111c26123f8565b73ffffffffffffffffffffffffffffffffffffffff166111e0611817565b73ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d9061421d565b60405180910390fd5b80600b8190555050565b6112486123f8565b73ffffffffffffffffffffffffffffffffffffffff16611266611817565b73ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061421d565b60405180910390fd5b8060118190555050565b6112ce6123f8565b73ffffffffffffffffffffffffffffffffffffffff166112ec611817565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113399061421d565b60405180910390fd5b80600d8190555050565b61136783838360405180602001604052806000815250611f19565b505050565b6000601054905090565b600a5481565b6113846123f8565b73ffffffffffffffffffffffffffffffffffffffff166113a2611817565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef9061421d565b60405180910390fd5b80600e908051906020019061140e929190613542565b5050565b600061141d8261298f565b600001519050919050565b6114306123f8565b73ffffffffffffffffffffffffffffffffffffffff1661144e611817565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b9061421d565b60405180910390fd5b8060108190555050565b6114b66123f8565b73ffffffffffffffffffffffffffffffffffffffff166114d4611817565b73ffffffffffffffffffffffffffffffffffffffff161461152a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115219061421d565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561159c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61160c6123f8565b73ffffffffffffffffffffffffffffffffffffffff1661162a611817565b73ffffffffffffffffffffffffffffffffffffffff1614611680576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116779061421d565b60405180910390fd5b61168a6000612c1e565b565b600c6020528060005260406000206000915090505481565b60115481565b6116b26123f8565b73ffffffffffffffffffffffffffffffffffffffff166116d0611817565b73ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d9061421d565b60405180910390fd5b8060138190555050565b6117386123f8565b73ffffffffffffffffffffffffffffffffffffffff16611756611817565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061421d565b60405180910390fd5b612134816117b8611088565b6117c29190614454565b1115611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa906141dd565b60405180910390fd5b61180d82826124b2565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118486135c8565b6118518261298f565b9050919050565b6060600480546118679061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546118939061463d565b80156118e05780601f106118b5576101008083540402835291602001916118e0565b820191906000526020600020905b8154815290600101906020018083116118c357829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f906141bd565b60405180910390fd5b60026010541461199d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119949061419d565b60405180910390fd5b600f546121346119ad9190614535565b816119b6611088565b6119c09190614454565b1115611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906141dd565b60405180910390fd5b600a54811115611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d906142bd565b60405180910390fd5b80600d54611a5491906144db565b341015611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d9061429d565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ae59190614454565b92505081905550600b54600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906142dd565b60405180910390fd5b611b7a33826124b2565b50565b611b856123f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bea576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611bf76123f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ca46123f8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ce991906140c5565b60405180910390a35050565b611cfd6123f8565b73ffffffffffffffffffffffffffffffffffffffff16611d1b611817565b73ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d689061421d565b60405180910390fd5b80600a8190555050565b60125481565b611d896123f8565b73ffffffffffffffffffffffffffffffffffffffff16611da7611817565b73ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df49061421d565b60405180910390fd5b60026009541415611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a906142fd565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611e7190614049565b60006040518083038185875af1925050503d8060008114611eae576040519150601f19603f3d011682016040523d82523d6000602084013e611eb3565b606091505b5050905080611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee9061427d565b60405180910390fd5b506001600981905550565b600060135482611f1291906144db565b9050919050565b611f248484846124d9565b611f438373ffffffffffffffffffffffffffffffffffffffff16612ce2565b8015611f585750611f5684848484612cf5565b155b15611f8f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611f9d6123f8565b73ffffffffffffffffffffffffffffffffffffffff16611fbb611817565b73ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120089061421d565b60405180910390fd5b8060128190555050565b6060612026826123aa565b612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c9061425d565b60405180910390fd5b600061206f612e55565b9050600081511161208f57604051806020016040528060008152506120ba565b8061209984612ee7565b6040516020016120aa92919061400f565b6040516020818303038152906040525b915050919050565b600f5481565b60006120d382613048565b9050919050565b600061210f83601254846040516020016120f49190613ff4565b604051602081830303815290604052805190602001206130b2565b905092915050565b6000600d548261212791906144db565b9050919050565b6121366123f8565b73ffffffffffffffffffffffffffffffffffffffff16612154611817565b73ffffffffffffffffffffffffffffffffffffffff16146121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a19061421d565b60405180910390fd5b8060158190555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122506123f8565b73ffffffffffffffffffffffffffffffffffffffff1661226e611817565b73ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb9061421d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b9061411d565b60405180910390fd5b61233d81612c1e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816123b56124d0565b111580156123c4575060015482105b80156123f1575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6124cc8282604051806020016040528060008152506130c9565b5050565b60006001905090565b60006124e48261298f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461254f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166125706123f8565b73ffffffffffffffffffffffffffffffffffffffff16148061259f575061259e856125996123f8565b6121b4565b5b806125e457506125ad6123f8565b73ffffffffffffffffffffffffffffffffffffffff166125cc84610c9c565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061261d576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612684576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61269185858560016130db565b61269d60008487612400565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561291d57600154821461291c57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461298885858560016130e1565b5050505050565b6129976135c8565b6000829050806129a56124d0565b111580156129b4575060015481105b15612be7576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612be557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ac9578092505050612c19565b5b600115612be457818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612bdf578092505050612c19565b612aca565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1b6123f8565b8786866040518563ffffffff1660e01b8152600401612d3d9493929190614079565b602060405180830381600087803b158015612d5757600080fd5b505af1925050508015612d8857506040513d601f19601f82011682018060405250810190612d859190613af3565b60015b612e02573d8060008114612db8576040519150601f19603f3d011682016040523d82523d6000602084013e612dbd565b606091505b50600081511415612dfa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600e8054612e649061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054612e909061463d565b8015612edd5780601f10612eb257610100808354040283529160200191612edd565b820191906000526020600020905b815481529060010190602001808311612ec057829003601f168201915b5050505050905090565b60606000821415612f2f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613043565b600082905060005b60008214612f61578080612f4a906146a0565b915050600a82612f5a91906144aa565b9150612f37565b60008167ffffffffffffffff811115612f7d57612f7c6147fa565b5b6040519080825280601f01601f191660200182016040528015612faf5781602001600182028036833780820191505090505b5090505b6000851461303c57600182612fc89190614535565b9150600a85612fd7919061470d565b6030612fe39190614454565b60f81b818381518110612ff957612ff86147cb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561303591906144aa565b9450612fb3565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6000826130bf85846130e7565b1490509392505050565b6130d6838383600161315c565b505050565b50505050565b50505050565b60008082905060005b845181101561315157600085828151811061310e5761310d6147cb565b5b6020026020010151905080831161313057613129838261352b565b925061313d565b61313a818461352b565b92505b508080613149906146a0565b9150506130f0565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156131ca576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613205576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61321260008683876130db565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156133dc57506133db8773ffffffffffffffffffffffffffffffffffffffff16612ce2565b5b156134a2575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134516000888480600101955088612cf5565b613487576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156133e257826001541461349d57600080fd5b61350e565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156134a3575b81600181905550505061352460008683876130e1565b5050505050565b600082600052816020526040600020905092915050565b82805461354e9061463d565b90600052602060002090601f01602090048101928261357057600085556135b7565b82601f1061358957805160ff19168380011785556135b7565b828001600101855582156135b7579182015b828111156135b657825182559160200191906001019061359b565b5b5090506135c4919061360b565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561362457600081600090555060010161360c565b5090565b600061363b61363684614378565b614353565b9050808382526020820190508285602086028201111561365e5761365d614833565b5b60005b8581101561368e578161367488826137ca565b845260208401935060208301925050600181019050613661565b5050509392505050565b60006136ab6136a6846143a4565b614353565b9050828152602081018484840111156136c7576136c6614838565b5b6136d28482856145fb565b509392505050565b60006136ed6136e8846143d5565b614353565b90508281526020810184848401111561370957613708614838565b5b6137148482856145fb565b509392505050565b60008135905061372b81614be2565b92915050565b60008083601f8401126137475761374661482e565b5b8235905067ffffffffffffffff81111561376457613763614829565b5b6020830191508360208202830111156137805761377f614833565b5b9250929050565b600082601f83011261379c5761379b61482e565b5b81356137ac848260208601613628565b91505092915050565b6000813590506137c481614bf9565b92915050565b6000813590506137d981614c10565b92915050565b6000813590506137ee81614c27565b92915050565b60008151905061380381614c27565b92915050565b600082601f83011261381e5761381d61482e565b5b813561382e848260208601613698565b91505092915050565b600082601f83011261384c5761384b61482e565b5b813561385c8482602086016136da565b91505092915050565b60008135905061387481614c3e565b92915050565b6000602082840312156138905761388f614842565b5b600061389e8482850161371c565b91505092915050565b600080604083850312156138be576138bd614842565b5b60006138cc8582860161371c565b92505060206138dd8582860161371c565b9150509250929050565b600080600060608486031215613900576138ff614842565b5b600061390e8682870161371c565b935050602061391f8682870161371c565b925050604061393086828701613865565b9150509250925092565b6000806000806080858703121561395457613953614842565b5b60006139628782880161371c565b94505060206139738782880161371c565b935050604061398487828801613865565b925050606085013567ffffffffffffffff8111156139a5576139a461483d565b5b6139b187828801613809565b91505092959194509250565b600080604083850312156139d4576139d3614842565b5b60006139e28582860161371c565b92505060206139f3858286016137b5565b9150509250929050565b60008060408385031215613a1457613a13614842565b5b6000613a228582860161371c565b9250506020613a3385828601613865565b9150509250929050565b60008060408385031215613a5457613a53614842565b5b600083013567ffffffffffffffff811115613a7257613a7161483d565b5b613a7e85828601613787565b9250506020613a8f8582860161371c565b9150509250929050565b600060208284031215613aaf57613aae614842565b5b6000613abd848285016137ca565b91505092915050565b600060208284031215613adc57613adb614842565b5b6000613aea848285016137df565b91505092915050565b600060208284031215613b0957613b08614842565b5b6000613b17848285016137f4565b91505092915050565b600060208284031215613b3657613b35614842565b5b600082013567ffffffffffffffff811115613b5457613b5361483d565b5b613b6084828501613837565b91505092915050565b600060208284031215613b7f57613b7e614842565b5b6000613b8d84828501613865565b91505092915050565b600080600060408486031215613baf57613bae614842565b5b6000613bbd86828701613865565b935050602084013567ffffffffffffffff811115613bde57613bdd61483d565b5b613bea86828701613731565b92509250509250925092565b613bff81614569565b82525050565b613c0e81614569565b82525050565b613c25613c2082614569565b6146e9565b82525050565b613c348161457b565b82525050565b613c438161457b565b82525050565b613c5281614587565b82525050565b6000613c6382614406565b613c6d818561441c565b9350613c7d81856020860161460a565b613c8681614847565b840191505092915050565b6000613c9c82614411565b613ca68185614438565b9350613cb681856020860161460a565b613cbf81614847565b840191505092915050565b6000613cd582614411565b613cdf8185614449565b9350613cef81856020860161460a565b80840191505092915050565b6000613d08602683614438565b9150613d1382614865565b604082019050919050565b6000613d2b601483614438565b9150613d36826148b4565b602082019050919050565b6000613d4e601383614438565b9150613d59826148dd565b602082019050919050565b6000613d71602183614438565b9150613d7c82614906565b604082019050919050565b6000613d94601283614438565b9150613d9f82614955565b602082019050919050565b6000613db7601e83614438565b9150613dc28261497e565b602082019050919050565b6000613dda601283614438565b9150613de5826149a7565b602082019050919050565b6000613dfd601683614438565b9150613e08826149d0565b602082019050919050565b6000613e20600583614449565b9150613e2b826149f9565b600582019050919050565b6000613e43602083614438565b9150613e4e82614a22565b602082019050919050565b6000613e66602683614438565b9150613e7182614a4b565b604082019050919050565b6000613e89602f83614438565b9150613e9482614a9a565b604082019050919050565b6000613eac60008361442d565b9150613eb782614ae9565b600082019050919050565b6000613ecf601083614438565b9150613eda82614aec565b602082019050919050565b6000613ef2601683614438565b9150613efd82614b15565b602082019050919050565b6000613f15601683614438565b9150613f2082614b3e565b602082019050919050565b6000613f38601c83614438565b9150613f4382614b67565b602082019050919050565b6000613f5b601f83614438565b9150613f6682614b90565b602082019050919050565b6000613f7e600183614449565b9150613f8982614bb9565b600182019050919050565b606082016000820151613faa6000850182613bf6565b506020820151613fbd6020850182613fe5565b506040820151613fd06040850182613c2b565b50505050565b613fdf816145dd565b82525050565b613fee816145e7565b82525050565b60006140008284613c14565b60148201915081905092915050565b600061401b8285613cca565b915061402682613f71565b91506140328284613cca565b915061403d82613e13565b91508190509392505050565b600061405482613e9f565b9150819050919050565b60006020820190506140736000830184613c05565b92915050565b600060808201905061408e6000830187613c05565b61409b6020830186613c05565b6140a86040830185613fd6565b81810360608301526140ba8184613c58565b905095945050505050565b60006020820190506140da6000830184613c3a565b92915050565b60006020820190506140f56000830184613c49565b92915050565b600060208201905081810360008301526141158184613c91565b905092915050565b6000602082019050818103600083015261413681613cfb565b9050919050565b6000602082019050818103600083015261415681613d1e565b9050919050565b6000602082019050818103600083015261417681613d41565b9050919050565b6000602082019050818103600083015261419681613d64565b9050919050565b600060208201905081810360008301526141b681613d87565b9050919050565b600060208201905081810360008301526141d681613daa565b9050919050565b600060208201905081810360008301526141f681613dcd565b9050919050565b6000602082019050818103600083015261421681613df0565b9050919050565b6000602082019050818103600083015261423681613e36565b9050919050565b6000602082019050818103600083015261425681613e59565b9050919050565b6000602082019050818103600083015261427681613e7c565b9050919050565b6000602082019050818103600083015261429681613ec2565b9050919050565b600060208201905081810360008301526142b681613ee5565b9050919050565b600060208201905081810360008301526142d681613f08565b9050919050565b600060208201905081810360008301526142f681613f2b565b9050919050565b6000602082019050818103600083015261431681613f4e565b9050919050565b60006060820190506143326000830184613f94565b92915050565b600060208201905061434d6000830184613fd6565b92915050565b600061435d61436e565b9050614369828261466f565b919050565b6000604051905090565b600067ffffffffffffffff821115614393576143926147fa565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143bf576143be6147fa565b5b6143c882614847565b9050602081019050919050565b600067ffffffffffffffff8211156143f0576143ef6147fa565b5b6143f982614847565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061445f826145dd565b915061446a836145dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561449f5761449e61473e565b5b828201905092915050565b60006144b5826145dd565b91506144c0836145dd565b9250826144d0576144cf61476d565b5b828204905092915050565b60006144e6826145dd565b91506144f1836145dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452a5761452961473e565b5b828202905092915050565b6000614540826145dd565b915061454b836145dd565b92508282101561455e5761455d61473e565b5b828203905092915050565b6000614574826145bd565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561462857808201518184015260208101905061460d565b83811115614637576000848401525b50505050565b6000600282049050600182168061465557607f821691505b602082108114156146695761466861479c565b5b50919050565b61467882614847565b810181811067ffffffffffffffff82111715614697576146966147fa565b5b80604052505050565b60006146ab826145dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146de576146dd61473e565b5b600182019050919050565b60006146f4826146fb565b9050919050565b600061470682614858565b9050919050565b6000614718826145dd565b9150614723836145dd565b9250826147335761473261476d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f54727920746f2073656e64206d6f726520455448000000000000000000000000600082015250565b7f53616c65206973206e6f74206163746976652000000000000000000000000000600082015250565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f596f7520617265206e6f7420696e2070726573616c6500000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b614beb81614569565b8114614bf657600080fd5b50565b614c028161457b565b8114614c0d57600080fd5b50565b614c1981614587565b8114614c2457600080fd5b50565b614c3081614591565b8114614c3b57600080fd5b50565b614c47816145dd565b8114614c5257600080fd5b5056fea26469706673582212207423d6fd236711e8557cac621b8a2b1a08520af9ace049a3aa95b27f0e0c8e3364736f6c63430008070033

Deployed Bytecode Sourcemap

32868:5401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15123:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18236:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19739:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19302:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33061:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37220:625;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14372:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36579:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33471:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20604:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36526:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35979:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35378:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37854:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35273:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20845:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35671:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32968:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34605:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18044:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35592:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35749:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15492:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5154:103;;;;;;;;;;;;;:::i;:::-;;33146:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36442:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38132:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36202:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33203:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4931:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34932:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18405:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33709:536;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20015:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35480:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36485:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35086:181;;;;;;;;;;;;;:::i;:::-;;36863:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21101:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36713:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34252:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33439:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34821:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37013:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35857:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37993:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20373:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5266:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15123:305;15225:4;15277:25;15262:40;;;:11;:40;;;;:105;;;;15334:33;15319:48;;;:11;:48;;;;15262:105;:158;;;;15384:36;15408:11;15384:23;:36::i;:::-;15262:158;15242:178;;15123:305;;;:::o;18236:100::-;18290:13;18323:5;18316:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18236:100;:::o;19739:204::-;19807:7;19832:16;19840:7;19832;:16::i;:::-;19827:64;;19857:34;;;;;;;;;;;;;;19827:64;19911:15;:24;19927:7;19911:24;;;;;;;;;;;;;;;;;;;;;19904:31;;19739:204;;;:::o;19302:371::-;19375:13;19391:24;19407:7;19391:15;:24::i;:::-;19375:40;;19436:5;19430:11;;:2;:11;;;19426:48;;;19450:24;;;;;;;;;;;;;;19426:48;19507:5;19491:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;19517:37;19534:5;19541:12;:10;:12::i;:::-;19517:16;:37::i;:::-;19516:38;19491:63;19487:138;;;19578:35;;;;;;;;;;;;;;19487:138;19637:28;19646:2;19650:7;19659:5;19637:8;:28::i;:::-;19364:309;19302:371;;:::o;33061:34::-;;;;:::o;37220:625::-;37344:1;37334:6;;:11;37326:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;37413:16;;37403:8;37389:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;37381:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;37490:31;37502:6;;37490:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37510:10;37490:11;:31::i;:::-;37482:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37591:18;;37580:8;:29;;;;:::i;:::-;37567:9;:42;;37559:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37681:8;37647:18;:30;37666:10;37647:30;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;37742:16;;37708:18;:30;37727:10;37708:30;;;;;;;;;;;;;;;;:50;;37700:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37804:31;37814:10;37826:8;37804:9;:31::i;:::-;37220:625;;;:::o;14372:303::-;14416:7;14641:15;:13;:15::i;:::-;14626:12;;14610:13;;:28;:46;14603:53;;14372:303;:::o;36579:53::-;;;;;;;;;;;;;;;;;:::o;33471:22::-;;;;:::o;20604:170::-;20738:28;20748:4;20754:2;20758:7;20738:9;:28::i;:::-;20604:170;;;:::o;36526:46::-;;;;:::o;35979:217::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36069:7:::1;;36057:8;:19;;36049:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36136:8;36125:7;;:19;;;;;;;:::i;:::-;;;;;;;;36155:31;36165:10;36177:8;36155:9;:31::i;:::-;35979:217:::0;:::o;35378:96::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35467:1:::1;35450:14;:18;;;;35378:96:::0;:::o;37854:130::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37959:17:::1;37940:16;:36;;;;37854:130:::0;:::o;35273:98::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35356:9:::1;35348:5;:17;;;;35273:98:::0;:::o;20845:185::-;20983:39;21000:4;21006:2;21010:7;20983:39;;;;;;;;;;;;:16;:39::i;:::-;20845:185;;;:::o;35671:73::-;35711:4;35732:6;;35725:13;;35671:73;:::o;32968:39::-;;;;:::o;34605:98::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34690:7:::1;34674:13;:23;;;;;;;;;;;;:::i;:::-;;34605:98:::0;:::o;18044:125::-;18108:7;18135:21;18148:7;18135:12;:21::i;:::-;:26;;;18128:33;;18044:125;;;:::o;35592:72::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35657:1:::1;35648:6;:10;;;;35592:72:::0;:::o;35749:98::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35830:9:::1;35822:7;:17;;;;35749:98:::0;:::o;15492:206::-;15556:7;15597:1;15580:19;;:5;:19;;;15576:60;;;15608:28;;;;;;;;;;;;;;15576:60;15662:12;:19;15675:5;15662:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;15654:36;;15647:43;;15492:206;;;:::o;5154:103::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5219:30:::1;5246:1;5219:18;:30::i;:::-;5154:103::o:0;33146:50::-;;;;;;;;;;;;;;;;;:::o;36442:36::-;;;;:::o;38132:134::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38239:19:::1;38218:18;:40;;;;38132:134:::0;:::o;36202:189::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33293:4:::1;36296:8;36280:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;36272:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;36358:27;36368:6;36376:8;36358:9;:27::i;:::-;36202:189:::0;;:::o;33203:34::-;;;;:::o;4931:87::-;4977:7;5004:6;;;;;;;;;;;4997:13;;4931:87;:::o;34932:148::-;35013:21;;:::i;:::-;35053;35066:7;35053:12;:21::i;:::-;35046:28;;34932:148;;;:::o;18405:104::-;18461:13;18494:7;18487:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18405:104;:::o;33709:536::-;33643:10;33630:23;;:9;:23;;;33622:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33796:1:::1;33786:6;;:11;33778:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33885:7;;33293:4;33864:28;;;;:::i;:::-;33852:8;33836:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:56;;33828:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33942:19;;33930:8;:31;;33922:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34023:8;34015:5;;:16;;;;:::i;:::-;34002:9;:29;;33994:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34100:8;34069:15;:27;34085:10;34069:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34154:14;;34123:15;:27;34139:10;34123:27;;;;;;;;;;;;;;;;:45;;34115:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;34208:31;34218:10;34230:8;34208:9;:31::i;:::-;33709:536:::0;:::o;20015:287::-;20126:12;:10;:12::i;:::-;20114:24;;:8;:24;;;20110:54;;;20147:17;;;;;;;;;;;;;;20110:54;20222:8;20177:18;:32;20196:12;:10;:12::i;:::-;20177:32;;;;;;;;;;;;;;;:42;20210:8;20177:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20275:8;20246:48;;20261:12;:10;:12::i;:::-;20246:48;;;20285:8;20246:48;;;;;;:::i;:::-;;;;;;;;20015:287;;:::o;35480:106::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35579:1:::1;35557:19;:23;;;;35480:106:::0;:::o;36485:34::-;;;;:::o;35086:181::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2713:1:::1;2859:7;;:19;;2851:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2713:1;2920:7;:18;;;;35151:12:::2;35169:10;:15;;35192:21;35169:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35150:68;;;35233:7;35225:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;35143:124;2669:1:::1;2963:7;:22;;;;35086:181::o:0;36863:142::-;36930:7;36979:18;;36969:9;:28;;;;:::i;:::-;36962:35;;36863:142;;;:::o;21101:369::-;21268:28;21278:4;21284:2;21288:7;21268:9;:28::i;:::-;21311:15;:2;:13;;;:15::i;:::-;:76;;;;;21331:56;21362:4;21368:2;21372:7;21381:5;21331:30;:56::i;:::-;21330:57;21311:76;21307:156;;;21411:40;;;;;;;;;;;;;;21307:156;21101:369;;;;:::o;36713:142::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36827:20:::1;36805:19;:42;;;;36713:142:::0;:::o;34252:347::-;34325:13;34355:16;34363:7;34355;:16::i;:::-;34347:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34429:21;34453:10;:8;:10::i;:::-;34429:34;;34508:1;34490:7;34484:21;:25;:109;;;;;;;;;;;;;;;;;34545:7;34559:18;:7;:16;:18::i;:::-;34528:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34484:109;34470:123;;;34252:347;;;:::o;33439:23::-;;;;:::o;34821:107::-;34879:7;34902:20;34916:5;34902:13;:20::i;:::-;34895:27;;34821:107;;;:::o;37013:199::-;37096:4;37120:84;37139:6;37147:19;;37195:6;37178:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;37168:35;;;;;;37120:18;:84::i;:::-;37113:91;;37013:199;;;;:::o;35857:117::-;35915:7;35961:5;;35951:9;:15;;;;:::i;:::-;35944:22;;35857:117;;;:::o;37993:131::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38096:20:::1;38077:16;:39;;;;37993:131:::0;:::o;20373:164::-;20470:4;20494:18;:25;20513:5;20494:25;;;;;;;;;;;;;;;:35;20520:8;20494:35;;;;;;;;;;;;;;;;;;;;;;;;;20487:42;;20373:164;;;;:::o;5266:201::-;5076:12;:10;:12::i;:::-;5065:23;;:7;:5;:7::i;:::-;:23;;;5057:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5375:1:::1;5355:22;;:8;:22;;;;5347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5431:28;5450:8;5431:18;:28::i;:::-;5266:201:::0;:::o;9584:157::-;9669:4;9708:25;9693:40;;;:11;:40;;;;9686:47;;9584:157;;;:::o;21725:174::-;21782:4;21825:7;21806:15;:13;:15::i;:::-;:26;;:53;;;;;21846:13;;21836:7;:23;21806:53;:85;;;;;21864:11;:20;21876:7;21864:20;;;;;;;;;;;:27;;;;;;;;;;;;21863:28;21806:85;21799:92;;21725:174;;;:::o;4474:98::-;4527:7;4554:10;4547:17;;4474:98;:::o;29882:196::-;30024:2;29997:15;:24;30013:7;29997:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30062:7;30058:2;30042:28;;30051:5;30042:28;;;;;;;;;;;;29882:196;;;:::o;21907:104::-;21976:27;21986:2;21990:8;21976:27;;;;;;;;;;;;:9;:27::i;:::-;21907:104;;:::o;14146:92::-;14202:7;14229:1;14222:8;;14146:92;:::o;24825:2130::-;24940:35;24978:21;24991:7;24978:12;:21::i;:::-;24940:59;;25038:4;25016:26;;:13;:18;;;:26;;;25012:67;;25051:28;;;;;;;;;;;;;;25012:67;25092:22;25134:4;25118:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;25155:36;25172:4;25178:12;:10;:12::i;:::-;25155:16;:36::i;:::-;25118:73;:126;;;;25232:12;:10;:12::i;:::-;25208:36;;:20;25220:7;25208:11;:20::i;:::-;:36;;;25118:126;25092:153;;25263:17;25258:66;;25289:35;;;;;;;;;;;;;;25258:66;25353:1;25339:16;;:2;:16;;;25335:52;;;25364:23;;;;;;;;;;;;;;25335:52;25400:43;25422:4;25428:2;25432:7;25441:1;25400:21;:43::i;:::-;25508:35;25525:1;25529:7;25538:4;25508:8;:35::i;:::-;25869:1;25839:12;:18;25852:4;25839:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25913:1;25885:12;:16;25898:2;25885:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25931:31;25965:11;:20;25977:7;25965:20;;;;;;;;;;;25931:54;;26016:2;26000:8;:13;;;:18;;;;;;;;;;;;;;;;;;26066:15;26033:8;:23;;;:49;;;;;;;;;;;;;;;;;;26334:19;26366:1;26356:7;:11;26334:33;;26382:31;26416:11;:24;26428:11;26416:24;;;;;;;;;;;26382:58;;26484:1;26459:27;;:8;:13;;;;;;;;;;;;:27;;;26455:384;;;26669:13;;26654:11;:28;26650:174;;26723:4;26707:8;:13;;;:20;;;;;;;;;;;;;;;;;;26776:13;:28;;;26750:8;:23;;;:54;;;;;;;;;;;;;;;;;;26650:174;26455:384;25814:1036;;;26886:7;26882:2;26867:27;;26876:4;26867:27;;;;;;;;;;;;26905:42;26926:4;26932:2;26936:7;26945:1;26905:20;:42::i;:::-;24929:2026;;24825:2130;;;:::o;16873:1109::-;16935:21;;:::i;:::-;16969:12;16984:7;16969:22;;17052:4;17033:15;:13;:15::i;:::-;:23;;:47;;;;;17067:13;;17060:4;:20;17033:47;17029:886;;;17101:31;17135:11;:17;17147:4;17135:17;;;;;;;;;;;17101:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17176:9;:16;;;17171:729;;17247:1;17221:28;;:9;:14;;;:28;;;17217:101;;17285:9;17278:16;;;;;;17217:101;17620:261;17627:4;17620:261;;;17660:6;;;;;;;;17705:11;:17;17717:4;17705:17;;;;;;;;;;;17693:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17779:1;17753:28;;:9;:14;;;:28;;;17749:109;;17821:9;17814:16;;;;;;17749:109;17620:261;;;17171:729;17082:833;17029:886;17943:31;;;;;;;;;;;;;;16873:1109;;;;:::o;5476:191::-;5550:16;5569:6;;;;;;;;;;;5550:25;;5595:8;5586:6;;:17;;;;;;;;;;;;;;;;;;5650:8;5619:40;;5640:8;5619:40;;;;;;;;;;;;5539:128;5476:191;:::o;5699:197::-;5759:4;5777:12;5844:7;5832:20;5824:28;;5887:1;5880:4;:8;5873:15;;;5699:197;;;:::o;30570:667::-;30733:4;30770:2;30754:36;;;30791:12;:10;:12::i;:::-;30805:4;30811:7;30820:5;30754:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30750:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31005:1;30988:6;:13;:18;30984:235;;;31034:40;;;;;;;;;;;;;;30984:235;31177:6;31171:13;31162:6;31158:2;31154:15;31147:38;30750:480;30883:45;;;30873:55;;;:6;:55;;;;30866:62;;;30570:667;;;;;;:::o;34707:108::-;34767:13;34796;34789:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34707:108;:::o;3091:533::-;3147:13;3187:1;3178:5;:10;3174:53;;;3205:10;;;;;;;;;;;;;;;;;;;;;3174:53;3237:12;3252:5;3237:20;;3268:14;3293:78;3308:1;3300:4;:9;3293:78;;3326:8;;;;;:::i;:::-;;;;3357:2;3349:10;;;;;:::i;:::-;;;3293:78;;;3381:19;3413:6;3403:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3381:39;;3431:154;3447:1;3438:5;:10;3431:154;;3475:1;3465:11;;;;;:::i;:::-;;;3542:2;3534:5;:10;;;;:::i;:::-;3521:2;:24;;;;:::i;:::-;3508:39;;3491:6;3498;3491:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3571:2;3562:11;;;;;:::i;:::-;;;3431:154;;;3609:6;3595:21;;;;;3091:533;;;;:::o;15780:137::-;15841:7;15876:12;:19;15889:5;15876:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;15868:41;;15861:48;;15780:137;;;:::o;1094:190::-;1219:4;1272;1243:25;1256:5;1263:4;1243:12;:25::i;:::-;:33;1236:40;;1094:190;;;;;:::o;22374:163::-;22497:32;22503:2;22507:8;22517:5;22524:4;22497:5;:32::i;:::-;22374:163;;;:::o;31885:159::-;;;;;:::o;32703:158::-;;;;;:::o;1645:675::-;1728:7;1748:20;1771:4;1748:27;;1791:9;1786:497;1810:5;:12;1806:1;:16;1786:497;;;1844:20;1867:5;1873:1;1867:8;;;;;;;;:::i;:::-;;;;;;;;1844:31;;1910:12;1894;:28;1890:382;;2037:42;2052:12;2066;2037:14;:42::i;:::-;2022:57;;1890:382;;;2214:42;2229:12;2243;2214:14;:42::i;:::-;2199:57;;1890:382;1829:454;1824:3;;;;;:::i;:::-;;;;1786:497;;;;2300:12;2293:19;;;1645:675;;;;:::o;22796:1775::-;22935:20;22958:13;;22935:36;;23000:1;22986:16;;:2;:16;;;22982:48;;;23011:19;;;;;;;;;;;;;;22982:48;23057:1;23045:8;:13;23041:44;;;23067:18;;;;;;;;;;;;;;23041:44;23098:61;23128:1;23132:2;23136:12;23150:8;23098:21;:61::i;:::-;23471:8;23436:12;:16;23449:2;23436:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23535:8;23495:12;:16;23508:2;23495:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23594:2;23561:11;:25;23573:12;23561:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;23661:15;23611:11;:25;23623:12;23611:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;23694:20;23717:12;23694:35;;23744:11;23773:8;23758:12;:23;23744:37;;23802:4;:23;;;;;23810:15;:2;:13;;;:15::i;:::-;23802:23;23798:641;;;23846:314;23902:12;23898:2;23877:38;;23894:1;23877:38;;;;;;;;;;;;23943:69;23982:1;23986:2;23990:14;;;;;;24006:5;23943:30;:69::i;:::-;23938:174;;24048:40;;;;;;;;;;;;;;23938:174;24155:3;24139:12;:19;;23846:314;;24241:12;24224:13;;:29;24220:43;;24255:8;;;24220:43;23798:641;;;24304:120;24360:14;;;;;;24356:2;24335:40;;24352:1;24335:40;;;;;;;;;;;;24419:3;24403:12;:19;;24304:120;;23798:641;24469:12;24453:13;:28;;;;23411:1082;;24503:60;24532:1;24536:2;24540:12;24554:8;24503:20;:60::i;:::-;22924:1647;22796:1775;;;;:::o;2328:224::-;2396:13;2459:1;2453:4;2446:15;2488:1;2482:4;2475:15;2529:4;2523;2513:21;2504:30;;2328:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3660:340::-;3716:5;3765:3;3758:4;3750:6;3746:17;3742:27;3732:122;;3773:79;;:::i;:::-;3732:122;3890:6;3877:20;3915:79;3990:3;3982:6;3975:4;3967:6;3963:17;3915:79;:::i;:::-;3906:88;;3722:278;3660:340;;;;:::o;4006:139::-;4052:5;4090:6;4077:20;4068:29;;4106:33;4133:5;4106:33;:::i;:::-;4006:139;;;;:::o;4151:329::-;4210:6;4259:2;4247:9;4238:7;4234:23;4230:32;4227:119;;;4265:79;;:::i;:::-;4227:119;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4151:329;;;;:::o;4486:474::-;4554:6;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4486:474;;;;;:::o;4966:619::-;5043:6;5051;5059;5108:2;5096:9;5087:7;5083:23;5079:32;5076:119;;;5114:79;;:::i;:::-;5076:119;5234:1;5259:53;5304:7;5295:6;5284:9;5280:22;5259:53;:::i;:::-;5249:63;;5205:117;5361:2;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5332:118;5489:2;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5460:118;4966:619;;;;;:::o;5591:943::-;5686:6;5694;5702;5710;5759:3;5747:9;5738:7;5734:23;5730:33;5727:120;;;5766:79;;:::i;:::-;5727:120;5886:1;5911:53;5956:7;5947:6;5936:9;5932:22;5911:53;:::i;:::-;5901:63;;5857:117;6013:2;6039:53;6084:7;6075:6;6064:9;6060:22;6039:53;:::i;:::-;6029:63;;5984:118;6141:2;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6112:118;6297:2;6286:9;6282:18;6269:32;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:62;6509:7;6500:6;6489:9;6485:22;6455:62;:::i;:::-;6445:72;;6240:287;5591:943;;;;;;;:::o;6540:468::-;6605:6;6613;6662:2;6650:9;6641:7;6637:23;6633:32;6630:119;;;6668:79;;:::i;:::-;6630:119;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6915:2;6941:50;6983:7;6974:6;6963:9;6959:22;6941:50;:::i;:::-;6931:60;;6886:115;6540:468;;;;;:::o;7014:474::-;7082:6;7090;7139:2;7127:9;7118:7;7114:23;7110:32;7107:119;;;7145:79;;:::i;:::-;7107:119;7265:1;7290:53;7335:7;7326:6;7315:9;7311:22;7290:53;:::i;:::-;7280:63;;7236:117;7392:2;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7363:118;7014:474;;;;;:::o;7494:684::-;7587:6;7595;7644:2;7632:9;7623:7;7619:23;7615:32;7612:119;;;7650:79;;:::i;:::-;7612:119;7798:1;7787:9;7783:17;7770:31;7828:18;7820:6;7817:30;7814:117;;;7850:79;;:::i;:::-;7814:117;7955:78;8025:7;8016:6;8005:9;8001:22;7955:78;:::i;:::-;7945:88;;7741:302;8082:2;8108:53;8153:7;8144:6;8133:9;8129:22;8108:53;:::i;:::-;8098:63;;8053:118;7494:684;;;;;:::o;8184:329::-;8243:6;8292:2;8280:9;8271:7;8267:23;8263:32;8260:119;;;8298:79;;:::i;:::-;8260:119;8418:1;8443:53;8488:7;8479:6;8468:9;8464:22;8443:53;:::i;:::-;8433:63;;8389:117;8184:329;;;;:::o;8519:327::-;8577:6;8626:2;8614:9;8605:7;8601:23;8597:32;8594:119;;;8632:79;;:::i;:::-;8594:119;8752:1;8777:52;8821:7;8812:6;8801:9;8797:22;8777:52;:::i;:::-;8767:62;;8723:116;8519:327;;;;:::o;8852:349::-;8921:6;8970:2;8958:9;8949:7;8945:23;8941:32;8938:119;;;8976:79;;:::i;:::-;8938:119;9096:1;9121:63;9176:7;9167:6;9156:9;9152:22;9121:63;:::i;:::-;9111:73;;9067:127;8852:349;;;;:::o;9207:509::-;9276:6;9325:2;9313:9;9304:7;9300:23;9296:32;9293:119;;;9331:79;;:::i;:::-;9293:119;9479:1;9468:9;9464:17;9451:31;9509:18;9501:6;9498:30;9495:117;;;9531:79;;:::i;:::-;9495:117;9636:63;9691:7;9682:6;9671:9;9667:22;9636:63;:::i;:::-;9626:73;;9422:287;9207:509;;;;:::o;9722:329::-;9781:6;9830:2;9818:9;9809:7;9805:23;9801:32;9798:119;;;9836:79;;:::i;:::-;9798:119;9956:1;9981:53;10026:7;10017:6;10006:9;10002:22;9981:53;:::i;:::-;9971:63;;9927:117;9722:329;;;;:::o;10057:704::-;10152:6;10160;10168;10217:2;10205:9;10196:7;10192:23;10188:32;10185:119;;;10223:79;;:::i;:::-;10185:119;10343:1;10368:53;10413:7;10404:6;10393:9;10389:22;10368:53;:::i;:::-;10358:63;;10314:117;10498:2;10487:9;10483:18;10470:32;10529:18;10521:6;10518:30;10515:117;;;10551:79;;:::i;:::-;10515:117;10664:80;10736:7;10727:6;10716:9;10712:22;10664:80;:::i;:::-;10646:98;;;;10441:313;10057:704;;;;;:::o;10767:108::-;10844:24;10862:5;10844:24;:::i;:::-;10839:3;10832:37;10767:108;;:::o;10881:118::-;10968:24;10986:5;10968:24;:::i;:::-;10963:3;10956:37;10881:118;;:::o;11005:157::-;11110:45;11130:24;11148:5;11130:24;:::i;:::-;11110:45;:::i;:::-;11105:3;11098:58;11005:157;;:::o;11168:99::-;11239:21;11254:5;11239:21;:::i;:::-;11234:3;11227:34;11168:99;;:::o;11273:109::-;11354:21;11369:5;11354:21;:::i;:::-;11349:3;11342:34;11273:109;;:::o;11388:118::-;11475:24;11493:5;11475:24;:::i;:::-;11470:3;11463:37;11388:118;;:::o;11512:360::-;11598:3;11626:38;11658:5;11626:38;:::i;:::-;11680:70;11743:6;11738:3;11680:70;:::i;:::-;11673:77;;11759:52;11804:6;11799:3;11792:4;11785:5;11781:16;11759:52;:::i;:::-;11836:29;11858:6;11836:29;:::i;:::-;11831:3;11827:39;11820:46;;11602:270;11512:360;;;;:::o;11878:364::-;11966:3;11994:39;12027:5;11994:39;:::i;:::-;12049:71;12113:6;12108:3;12049:71;:::i;:::-;12042:78;;12129:52;12174:6;12169:3;12162:4;12155:5;12151:16;12129:52;:::i;:::-;12206:29;12228:6;12206:29;:::i;:::-;12201:3;12197:39;12190:46;;11970:272;11878:364;;;;:::o;12248:377::-;12354:3;12382:39;12415:5;12382:39;:::i;:::-;12437:89;12519:6;12514:3;12437:89;:::i;:::-;12430:96;;12535:52;12580:6;12575:3;12568:4;12561:5;12557:16;12535:52;:::i;:::-;12612:6;12607:3;12603:16;12596:23;;12358:267;12248:377;;;;:::o;12631:366::-;12773:3;12794:67;12858:2;12853:3;12794:67;:::i;:::-;12787:74;;12870:93;12959:3;12870:93;:::i;:::-;12988:2;12983:3;12979:12;12972:19;;12631:366;;;:::o;13003:::-;13145:3;13166:67;13230:2;13225:3;13166:67;:::i;:::-;13159:74;;13242:93;13331:3;13242:93;:::i;:::-;13360:2;13355:3;13351:12;13344:19;;13003:366;;;:::o;13375:::-;13517:3;13538:67;13602:2;13597:3;13538:67;:::i;:::-;13531:74;;13614:93;13703:3;13614:93;:::i;:::-;13732:2;13727:3;13723:12;13716:19;;13375:366;;;:::o;13747:::-;13889:3;13910:67;13974:2;13969:3;13910:67;:::i;:::-;13903:74;;13986:93;14075:3;13986:93;:::i;:::-;14104:2;14099:3;14095:12;14088:19;;13747:366;;;:::o;14119:::-;14261:3;14282:67;14346:2;14341:3;14282:67;:::i;:::-;14275:74;;14358:93;14447:3;14358:93;:::i;:::-;14476:2;14471:3;14467:12;14460:19;;14119:366;;;:::o;14491:::-;14633:3;14654:67;14718:2;14713:3;14654:67;:::i;:::-;14647:74;;14730:93;14819:3;14730:93;:::i;:::-;14848:2;14843:3;14839:12;14832:19;;14491:366;;;:::o;14863:::-;15005:3;15026:67;15090:2;15085:3;15026:67;:::i;:::-;15019:74;;15102:93;15191:3;15102:93;:::i;:::-;15220:2;15215:3;15211:12;15204:19;;14863:366;;;:::o;15235:::-;15377:3;15398:67;15462:2;15457:3;15398:67;:::i;:::-;15391:74;;15474:93;15563:3;15474:93;:::i;:::-;15592:2;15587:3;15583:12;15576:19;;15235:366;;;:::o;15607:400::-;15767:3;15788:84;15870:1;15865:3;15788:84;:::i;:::-;15781:91;;15881:93;15970:3;15881:93;:::i;:::-;15999:1;15994:3;15990:11;15983:18;;15607:400;;;:::o;16013:366::-;16155:3;16176:67;16240:2;16235:3;16176:67;:::i;:::-;16169:74;;16252:93;16341:3;16252:93;:::i;:::-;16370:2;16365:3;16361:12;16354:19;;16013:366;;;:::o;16385:::-;16527:3;16548:67;16612:2;16607:3;16548:67;:::i;:::-;16541:74;;16624:93;16713:3;16624:93;:::i;:::-;16742:2;16737:3;16733:12;16726:19;;16385:366;;;:::o;16757:::-;16899:3;16920:67;16984:2;16979:3;16920:67;:::i;:::-;16913:74;;16996:93;17085:3;16996:93;:::i;:::-;17114:2;17109:3;17105:12;17098:19;;16757:366;;;:::o;17129:398::-;17288:3;17309:83;17390:1;17385:3;17309:83;:::i;:::-;17302:90;;17401:93;17490:3;17401:93;:::i;:::-;17519:1;17514:3;17510:11;17503:18;;17129:398;;;:::o;17533:366::-;17675:3;17696:67;17760:2;17755:3;17696:67;:::i;:::-;17689:74;;17772:93;17861:3;17772:93;:::i;:::-;17890:2;17885:3;17881:12;17874:19;;17533:366;;;:::o;17905:::-;18047:3;18068:67;18132:2;18127:3;18068:67;:::i;:::-;18061:74;;18144:93;18233:3;18144:93;:::i;:::-;18262:2;18257:3;18253:12;18246:19;;17905:366;;;:::o;18277:::-;18419:3;18440:67;18504:2;18499:3;18440:67;:::i;:::-;18433:74;;18516:93;18605:3;18516:93;:::i;:::-;18634:2;18629:3;18625:12;18618:19;;18277:366;;;:::o;18649:::-;18791:3;18812:67;18876:2;18871:3;18812:67;:::i;:::-;18805:74;;18888:93;18977:3;18888:93;:::i;:::-;19006:2;19001:3;18997:12;18990:19;;18649:366;;;:::o;19021:::-;19163:3;19184:67;19248:2;19243:3;19184:67;:::i;:::-;19177:74;;19260:93;19349:3;19260:93;:::i;:::-;19378:2;19373:3;19369:12;19362:19;;19021:366;;;:::o;19393:400::-;19553:3;19574:84;19656:1;19651:3;19574:84;:::i;:::-;19567:91;;19667:93;19756:3;19667:93;:::i;:::-;19785:1;19780:3;19776:11;19769:18;;19393:400;;;:::o;19869:697::-;20028:4;20023:3;20019:14;20115:4;20108:5;20104:16;20098:23;20134:63;20191:4;20186:3;20182:14;20168:12;20134:63;:::i;:::-;20043:164;20299:4;20292:5;20288:16;20282:23;20318:61;20373:4;20368:3;20364:14;20350:12;20318:61;:::i;:::-;20217:172;20473:4;20466:5;20462:16;20456:23;20492:57;20543:4;20538:3;20534:14;20520:12;20492:57;:::i;:::-;20399:160;19997:569;19869:697;;:::o;20572:118::-;20659:24;20677:5;20659:24;:::i;:::-;20654:3;20647:37;20572:118;;:::o;20696:105::-;20771:23;20788:5;20771:23;:::i;:::-;20766:3;20759:36;20696:105;;:::o;20807:256::-;20919:3;20934:75;21005:3;20996:6;20934:75;:::i;:::-;21034:2;21029:3;21025:12;21018:19;;21054:3;21047:10;;20807:256;;;;:::o;21069:967::-;21451:3;21473:95;21564:3;21555:6;21473:95;:::i;:::-;21466:102;;21585:148;21729:3;21585:148;:::i;:::-;21578:155;;21750:95;21841:3;21832:6;21750:95;:::i;:::-;21743:102;;21862:148;22006:3;21862:148;:::i;:::-;21855:155;;22027:3;22020:10;;21069:967;;;;;:::o;22042:379::-;22226:3;22248:147;22391:3;22248:147;:::i;:::-;22241:154;;22412:3;22405:10;;22042:379;;;:::o;22427:222::-;22520:4;22558:2;22547:9;22543:18;22535:26;;22571:71;22639:1;22628:9;22624:17;22615:6;22571:71;:::i;:::-;22427:222;;;;:::o;22655:640::-;22850:4;22888:3;22877:9;22873:19;22865:27;;22902:71;22970:1;22959:9;22955:17;22946:6;22902:71;:::i;:::-;22983:72;23051:2;23040:9;23036:18;23027:6;22983:72;:::i;:::-;23065;23133:2;23122:9;23118:18;23109:6;23065:72;:::i;:::-;23184:9;23178:4;23174:20;23169:2;23158:9;23154:18;23147:48;23212:76;23283:4;23274:6;23212:76;:::i;:::-;23204:84;;22655:640;;;;;;;:::o;23301:210::-;23388:4;23426:2;23415:9;23411:18;23403:26;;23439:65;23501:1;23490:9;23486:17;23477:6;23439:65;:::i;:::-;23301:210;;;;:::o;23517:222::-;23610:4;23648:2;23637:9;23633:18;23625:26;;23661:71;23729:1;23718:9;23714:17;23705:6;23661:71;:::i;:::-;23517:222;;;;:::o;23745:313::-;23858:4;23896:2;23885:9;23881:18;23873:26;;23945:9;23939:4;23935:20;23931:1;23920:9;23916:17;23909:47;23973:78;24046:4;24037:6;23973:78;:::i;:::-;23965:86;;23745:313;;;;:::o;24064:419::-;24230:4;24268:2;24257:9;24253:18;24245:26;;24317:9;24311:4;24307:20;24303:1;24292:9;24288:17;24281:47;24345:131;24471:4;24345:131;:::i;:::-;24337:139;;24064:419;;;:::o;24489:::-;24655:4;24693:2;24682:9;24678:18;24670:26;;24742:9;24736:4;24732:20;24728:1;24717:9;24713:17;24706:47;24770:131;24896:4;24770:131;:::i;:::-;24762:139;;24489:419;;;:::o;24914:::-;25080:4;25118:2;25107:9;25103:18;25095:26;;25167:9;25161:4;25157:20;25153:1;25142:9;25138:17;25131:47;25195:131;25321:4;25195:131;:::i;:::-;25187:139;;24914:419;;;:::o;25339:::-;25505:4;25543:2;25532:9;25528:18;25520:26;;25592:9;25586:4;25582:20;25578:1;25567:9;25563:17;25556:47;25620:131;25746:4;25620:131;:::i;:::-;25612:139;;25339:419;;;:::o;25764:::-;25930:4;25968:2;25957:9;25953:18;25945:26;;26017:9;26011:4;26007:20;26003:1;25992:9;25988:17;25981:47;26045:131;26171:4;26045:131;:::i;:::-;26037:139;;25764:419;;;:::o;26189:::-;26355:4;26393:2;26382:9;26378:18;26370:26;;26442:9;26436:4;26432:20;26428:1;26417:9;26413:17;26406:47;26470:131;26596:4;26470:131;:::i;:::-;26462:139;;26189:419;;;:::o;26614:::-;26780:4;26818:2;26807:9;26803:18;26795:26;;26867:9;26861:4;26857:20;26853:1;26842:9;26838:17;26831:47;26895:131;27021:4;26895:131;:::i;:::-;26887:139;;26614:419;;;:::o;27039:::-;27205:4;27243:2;27232:9;27228:18;27220:26;;27292:9;27286:4;27282:20;27278:1;27267:9;27263:17;27256:47;27320:131;27446:4;27320:131;:::i;:::-;27312:139;;27039:419;;;:::o;27464:::-;27630:4;27668:2;27657:9;27653:18;27645:26;;27717:9;27711:4;27707:20;27703:1;27692:9;27688:17;27681:47;27745:131;27871:4;27745:131;:::i;:::-;27737:139;;27464:419;;;:::o;27889:::-;28055:4;28093:2;28082:9;28078:18;28070:26;;28142:9;28136:4;28132:20;28128:1;28117:9;28113:17;28106:47;28170:131;28296:4;28170:131;:::i;:::-;28162:139;;27889:419;;;:::o;28314:::-;28480:4;28518:2;28507:9;28503:18;28495:26;;28567:9;28561:4;28557:20;28553:1;28542:9;28538:17;28531:47;28595:131;28721:4;28595:131;:::i;:::-;28587:139;;28314:419;;;:::o;28739:::-;28905:4;28943:2;28932:9;28928:18;28920:26;;28992:9;28986:4;28982:20;28978:1;28967:9;28963:17;28956:47;29020:131;29146:4;29020:131;:::i;:::-;29012:139;;28739:419;;;:::o;29164:::-;29330:4;29368:2;29357:9;29353:18;29345:26;;29417:9;29411:4;29407:20;29403:1;29392:9;29388:17;29381:47;29445:131;29571:4;29445:131;:::i;:::-;29437:139;;29164:419;;;:::o;29589:::-;29755:4;29793:2;29782:9;29778:18;29770:26;;29842:9;29836:4;29832:20;29828:1;29817:9;29813:17;29806:47;29870:131;29996:4;29870:131;:::i;:::-;29862:139;;29589:419;;;:::o;30014:::-;30180:4;30218:2;30207:9;30203:18;30195:26;;30267:9;30261:4;30257:20;30253:1;30242:9;30238:17;30231:47;30295:131;30421:4;30295:131;:::i;:::-;30287:139;;30014:419;;;:::o;30439:::-;30605:4;30643:2;30632:9;30628:18;30620:26;;30692:9;30686:4;30682:20;30678:1;30667:9;30663:17;30656:47;30720:131;30846:4;30720:131;:::i;:::-;30712:139;;30439:419;;;:::o;30864:346::-;31019:4;31057:2;31046:9;31042:18;31034:26;;31070:133;31200:1;31189:9;31185:17;31176:6;31070:133;:::i;:::-;30864:346;;;;:::o;31216:222::-;31309:4;31347:2;31336:9;31332:18;31324:26;;31360:71;31428:1;31417:9;31413:17;31404:6;31360:71;:::i;:::-;31216:222;;;;:::o;31444:129::-;31478:6;31505:20;;:::i;:::-;31495:30;;31534:33;31562:4;31554:6;31534:33;:::i;:::-;31444:129;;;:::o;31579:75::-;31612:6;31645:2;31639:9;31629:19;;31579:75;:::o;31660:311::-;31737:4;31827:18;31819:6;31816:30;31813:56;;;31849:18;;:::i;:::-;31813:56;31899:4;31891:6;31887:17;31879:25;;31959:4;31953;31949:15;31941:23;;31660:311;;;:::o;31977:307::-;32038:4;32128:18;32120:6;32117:30;32114:56;;;32150:18;;:::i;:::-;32114:56;32188:29;32210:6;32188:29;:::i;:::-;32180:37;;32272:4;32266;32262:15;32254:23;;31977:307;;;:::o;32290:308::-;32352:4;32442:18;32434:6;32431:30;32428:56;;;32464:18;;:::i;:::-;32428:56;32502:29;32524:6;32502:29;:::i;:::-;32494:37;;32586:4;32580;32576:15;32568:23;;32290:308;;;:::o;32604:98::-;32655:6;32689:5;32683:12;32673:22;;32604:98;;;:::o;32708:99::-;32760:6;32794:5;32788:12;32778:22;;32708:99;;;:::o;32813:168::-;32896:11;32930:6;32925:3;32918:19;32970:4;32965:3;32961:14;32946:29;;32813:168;;;;:::o;32987:147::-;33088:11;33125:3;33110:18;;32987:147;;;;:::o;33140:169::-;33224:11;33258:6;33253:3;33246:19;33298:4;33293:3;33289:14;33274:29;;33140:169;;;;:::o;33315:148::-;33417:11;33454:3;33439:18;;33315:148;;;;:::o;33469:305::-;33509:3;33528:20;33546:1;33528:20;:::i;:::-;33523:25;;33562:20;33580:1;33562:20;:::i;:::-;33557:25;;33716:1;33648:66;33644:74;33641:1;33638:81;33635:107;;;33722:18;;:::i;:::-;33635:107;33766:1;33763;33759:9;33752:16;;33469:305;;;;:::o;33780:185::-;33820:1;33837:20;33855:1;33837:20;:::i;:::-;33832:25;;33871:20;33889:1;33871:20;:::i;:::-;33866:25;;33910:1;33900:35;;33915:18;;:::i;:::-;33900:35;33957:1;33954;33950:9;33945:14;;33780:185;;;;:::o;33971:348::-;34011:7;34034:20;34052:1;34034:20;:::i;:::-;34029:25;;34068:20;34086:1;34068:20;:::i;:::-;34063:25;;34256:1;34188:66;34184:74;34181:1;34178:81;34173:1;34166:9;34159:17;34155:105;34152:131;;;34263:18;;:::i;:::-;34152:131;34311:1;34308;34304:9;34293:20;;33971:348;;;;:::o;34325:191::-;34365:4;34385:20;34403:1;34385:20;:::i;:::-;34380:25;;34419:20;34437:1;34419:20;:::i;:::-;34414:25;;34458:1;34455;34452:8;34449:34;;;34463:18;;:::i;:::-;34449:34;34508:1;34505;34501:9;34493:17;;34325:191;;;;:::o;34522:96::-;34559:7;34588:24;34606:5;34588:24;:::i;:::-;34577:35;;34522:96;;;:::o;34624:90::-;34658:7;34701:5;34694:13;34687:21;34676:32;;34624:90;;;:::o;34720:77::-;34757:7;34786:5;34775:16;;34720:77;;;:::o;34803:149::-;34839:7;34879:66;34872:5;34868:78;34857:89;;34803:149;;;:::o;34958:126::-;34995:7;35035:42;35028:5;35024:54;35013:65;;34958:126;;;:::o;35090:77::-;35127:7;35156:5;35145:16;;35090:77;;;:::o;35173:101::-;35209:7;35249:18;35242:5;35238:30;35227:41;;35173:101;;;:::o;35280:154::-;35364:6;35359:3;35354;35341:30;35426:1;35417:6;35412:3;35408:16;35401:27;35280:154;;;:::o;35440:307::-;35508:1;35518:113;35532:6;35529:1;35526:13;35518:113;;;35617:1;35612:3;35608:11;35602:18;35598:1;35593:3;35589:11;35582:39;35554:2;35551:1;35547:10;35542:15;;35518:113;;;35649:6;35646:1;35643:13;35640:101;;;35729:1;35720:6;35715:3;35711:16;35704:27;35640:101;35489:258;35440:307;;;:::o;35753:320::-;35797:6;35834:1;35828:4;35824:12;35814:22;;35881:1;35875:4;35871:12;35902:18;35892:81;;35958:4;35950:6;35946:17;35936:27;;35892:81;36020:2;36012:6;36009:14;35989:18;35986:38;35983:84;;;36039:18;;:::i;:::-;35983:84;35804:269;35753:320;;;:::o;36079:281::-;36162:27;36184:4;36162:27;:::i;:::-;36154:6;36150:40;36292:6;36280:10;36277:22;36256:18;36244:10;36241:34;36238:62;36235:88;;;36303:18;;:::i;:::-;36235:88;36343:10;36339:2;36332:22;36122:238;36079:281;;:::o;36366:233::-;36405:3;36428:24;36446:5;36428:24;:::i;:::-;36419:33;;36474:66;36467:5;36464:77;36461:103;;;36544:18;;:::i;:::-;36461:103;36591:1;36584:5;36580:13;36573:20;;36366:233;;;:::o;36605:100::-;36644:7;36673:26;36693:5;36673:26;:::i;:::-;36662:37;;36605:100;;;:::o;36711:94::-;36750:7;36779:20;36793:5;36779:20;:::i;:::-;36768:31;;36711:94;;;:::o;36811:176::-;36843:1;36860:20;36878:1;36860:20;:::i;:::-;36855:25;;36894:20;36912:1;36894:20;:::i;:::-;36889:25;;36933:1;36923:35;;36938:18;;:::i;:::-;36923:35;36979:1;36976;36972:9;36967:14;;36811:176;;;;:::o;36993:180::-;37041:77;37038:1;37031:88;37138:4;37135:1;37128:15;37162:4;37159:1;37152:15;37179:180;37227:77;37224:1;37217:88;37324:4;37321:1;37314:15;37348:4;37345:1;37338:15;37365:180;37413:77;37410:1;37403:88;37510:4;37507:1;37500:15;37534:4;37531:1;37524:15;37551:180;37599:77;37596:1;37589:88;37696:4;37693:1;37686:15;37720:4;37717:1;37710:15;37737:180;37785:77;37782:1;37775:88;37882:4;37879:1;37872:15;37906:4;37903:1;37896:15;37923:117;38032:1;38029;38022:12;38046:117;38155:1;38152;38145:12;38169:117;38278:1;38275;38268:12;38292:117;38401:1;38398;38391:12;38415:117;38524:1;38521;38514:12;38538:117;38647:1;38644;38637:12;38661:102;38702:6;38753:2;38749:7;38744:2;38737:5;38733:14;38729:28;38719:38;;38661:102;;;:::o;38769:94::-;38802:8;38850:5;38846:2;38842:14;38821:35;;38769:94;;;:::o;38869:225::-;39009:34;39005:1;38997:6;38993:14;38986:58;39078:8;39073:2;39065:6;39061:15;39054:33;38869:225;:::o;39100:170::-;39240:22;39236:1;39228:6;39224:14;39217:46;39100:170;:::o;39276:169::-;39416:21;39412:1;39404:6;39400:14;39393:45;39276:169;:::o;39451:220::-;39591:34;39587:1;39579:6;39575:14;39568:58;39660:3;39655:2;39647:6;39643:15;39636:28;39451:220;:::o;39677:168::-;39817:20;39813:1;39805:6;39801:14;39794:44;39677:168;:::o;39851:180::-;39991:32;39987:1;39979:6;39975:14;39968:56;39851:180;:::o;40037:168::-;40177:20;40173:1;40165:6;40161:14;40154:44;40037:168;:::o;40211:172::-;40351:24;40347:1;40339:6;40335:14;40328:48;40211:172;:::o;40389:155::-;40529:7;40525:1;40517:6;40513:14;40506:31;40389:155;:::o;40550:182::-;40690:34;40686:1;40678:6;40674:14;40667:58;40550:182;:::o;40738:225::-;40878:34;40874:1;40866:6;40862:14;40855:58;40947:8;40942:2;40934:6;40930:15;40923:33;40738:225;:::o;40969:234::-;41109:34;41105:1;41097:6;41093:14;41086:58;41178:17;41173:2;41165:6;41161:15;41154:42;40969:234;:::o;41209:114::-;;:::o;41329:166::-;41469:18;41465:1;41457:6;41453:14;41446:42;41329:166;:::o;41501:172::-;41641:24;41637:1;41629:6;41625:14;41618:48;41501:172;:::o;41679:::-;41819:24;41815:1;41807:6;41803:14;41796:48;41679:172;:::o;41857:178::-;41997:30;41993:1;41985:6;41981:14;41974:54;41857:178;:::o;42041:181::-;42181:33;42177:1;42169:6;42165:14;42158:57;42041:181;:::o;42228:151::-;42368:3;42364:1;42356:6;42352:14;42345:27;42228:151;:::o;42385:122::-;42458:24;42476:5;42458:24;:::i;:::-;42451:5;42448:35;42438:63;;42497:1;42494;42487:12;42438:63;42385:122;:::o;42513:116::-;42583:21;42598:5;42583:21;:::i;:::-;42576:5;42573:32;42563:60;;42619:1;42616;42609:12;42563:60;42513:116;:::o;42635:122::-;42708:24;42726:5;42708:24;:::i;:::-;42701:5;42698:35;42688:63;;42747:1;42744;42737:12;42688:63;42635:122;:::o;42763:120::-;42835:23;42852:5;42835:23;:::i;:::-;42828:5;42825:34;42815:62;;42873:1;42870;42863:12;42815:62;42763:120;:::o;42889:122::-;42962:24;42980:5;42962:24;:::i;:::-;42955:5;42952:35;42942:63;;43001:1;42998;42991:12;42942:63;42889:122;:::o

Swarm Source

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