ERC-721
Overview
Max Total Supply
750 HODLE
Holders
333
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HodleBoard
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-07 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) 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. */ 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 Merklee 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 = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/HodleBoard.sol pragma solidity ^0.8.4; contract HodleBoard is ERC721Enumerable, Ownable { using Counters for Counters.Counter; using Strings for uint256; uint256 public boardTotal; uint256 public boardMinted; Counters.Counter private _boardIds; bytes32 public rootWordList; mapping(address => uint256) public _wordLists; bool public burnEnabled = false; bool public mintPaused = false; uint256 public totalBoardSupply = 8888; uint256 public wordListLimit = 10; bool public boardRevealed = false; string public baseHash; string public hiddenHash; string public baseExt = ".json"; bool public wordListLive = false; uint256 _wordlistprice = 90000000000000000; //0.09 ether bool public publicLive = false; uint256 _publicprice = 110000000000000000; //0.11 ether constructor() ERC721("Hodle Board", "HODLE") {} function toggleMintPause() public onlyOwner { mintPaused = !mintPaused; } function toggleWordListMint() public onlyOwner { wordListLive = !wordListLive; } function togglePublicMint() public onlyOwner { publicLive = !publicLive; } function changeIPFSBase(string calldata _newBaseURI) external onlyOwner { baseHash = _newBaseURI; } function _baseURI() internal view override returns (string memory) { return baseHash; } function revealBoards() public onlyOwner { boardRevealed = true; } function toggleBurnStatus(bool _burnStatus) external onlyOwner { burnEnabled = _burnStatus; } function mintWordList(uint256 _mintqty, bytes32[] memory wordListProof) external payable { require(wordListLive, "The Hodle Board WordList mint is currently unavailable."); require(!mintPaused, "The Hodle Board WordList mint is currently paused."); require(_mintqty <= wordListLimit, "You can mint a maximum of 10 Hodle Boards on the WordList mint."); require(_wordLists[msg.sender] + _mintqty <= wordListLimit, "This address has already claimed 10 WordList mints."); require(checkWordList(msg.sender, wordListProof), "This address is not on the WordList."); require(boardMinted + _mintqty <= totalBoardSupply, "The Hodle Board collection is minted out."); require(_wordlistprice * _mintqty <= msg.value, "The transaction requires more ETH to WordList mint."); uint256 _freshBoardId; for (uint256 i = 0; i < _mintqty; i++) { _boardIds.increment(); _freshBoardId = _boardIds.current(); _safeMint(msg.sender, _freshBoardId); _wordLists[msg.sender] = _wordLists[msg.sender] + 1; boardTotal = boardTotal + 1; boardMinted = boardMinted + 1; } } function publicMint(uint256 _mintqty) external payable { require(publicLive, "The Hodle Board public mint is currently unavailable."); require(!mintPaused, "The Hodle Board public mint is currently paused."); require(_mintqty > 0, "You must mint more than 0 Hodle Boards."); require(boardMinted + _mintqty <= totalBoardSupply, "The Hodle Board collection is minted out."); require(_publicprice * _mintqty <= msg.value, "The transaction requires more ETH to WordList mint."); uint256 _freshBoardId; for (uint256 i = 0; i < _mintqty; i++) { _boardIds.increment(); _freshBoardId = _boardIds.current(); _safeMint(msg.sender, _freshBoardId); boardTotal = boardTotal + 1; boardMinted = boardMinted + 1; } } function mintTeamBoards(uint256 _mintqty) external onlyOwner { uint256 _freshBoardId; for (uint256 i = 1; i <= _mintqty; i++) { _boardIds.increment(); _freshBoardId = _boardIds.current(); _safeMint(msg.sender, _freshBoardId); boardTotal = boardTotal + 1; boardMinted = boardMinted + 1; } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if (boardRevealed == false) { return hiddenHash; } string memory crnt_URI = _baseURI(); return bytes(crnt_URI).length > 0 ? string(abi.encodePacked(crnt_URI, "/", tokenId.toString(), baseExt)) : ""; } function setHiddenHash(string memory _newHash) public onlyOwner { hiddenHash = _newHash; } function editSupply(uint256 _newSupply) public onlyOwner { totalBoardSupply = _newSupply; } function editRootWordList(bytes32 _newRoot) public onlyOwner { rootWordList = _newRoot; } function burn(uint256 tokenId) external { require(burnEnabled, "Hodle Board burning is currently disabled."); require(_isApprovedOrOwner(msg.sender, tokenId), "Burn caller is not approved nor the owner."); _burn(tokenId); boardTotal = boardTotal - 1; } function checkWordList(address walletAddress, bytes32[] memory wordListProof) internal view returns (bool) { bytes32 edgeNode = keccak256(abi.encodePacked(walletAddress)); return MerkleProof.verify(wordListProof, rootWordList, edgeNode); } function wdrawDeployContract() public onlyOwner { uint256 contractAmount = address(this).balance; payable(owner()).transfer(contractAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_wordLists","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"baseExt","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boardMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boardRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boardTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"changeIPFSBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"editRootWordList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"editSupply","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":[],"name":"hiddenHash","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintqty","type":"uint256"}],"name":"mintTeamBoards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintqty","type":"uint256"},{"internalType":"bytes32[]","name":"wordListProof","type":"bytes32[]"}],"name":"mintWordList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintqty","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealBoards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rootWordList","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"_newHash","type":"string"}],"name":"setHiddenHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_burnStatus","type":"bool"}],"name":"toggleBurnStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleMintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWordListMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalBoardSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wdrawDeployContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wordListLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wordListLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506122b8601155600a6012556000601360006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060169080519060200190620000ad9291906200029e565b506000601760006101000a81548160ff02191690831515021790555067013fbe85edc900006018556000601960006101000a81548160ff021916908315150217905550670186cc6acd4b0000601a553480156200010957600080fd5b506040518060400160405280600b81526020017f486f646c6520426f6172640000000000000000000000000000000000000000008152506040518060400160405280600581526020017f484f444c4500000000000000000000000000000000000000000000000000000081525081600090805190602001906200018e9291906200029e565b508060019080519060200190620001a79291906200029e565b505050620001ca620001be620001d060201b60201c565b620001d860201b60201c565b620003b3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ac906200034e565b90600052602060002090601f016020900481019282620002d057600085556200031c565b82601f10620002eb57805160ff19168380011785556200031c565b828001600101855582156200031c579182015b828111156200031b578251825591602001919060010190620002fe565b5b5090506200032b91906200032f565b5090565b5b808211156200034a57600081600090555060010162000330565b5090565b600060028204905060018216806200036757607f821691505b602082108114156200037e576200037d62000384565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61596080620003c36000396000f3fe6080604052600436106102885760003560e01c80634d7e60b21161015a57806395d89b41116100c1578063b7f751d81161007a578063b7f751d814610942578063b88d4fde1461096d578063c87b56dd14610996578063dd27d70f146109d3578063e985e9c5146109fe578063f2fde38b14610a3b57610288565b806395d89b41146108485780639e5fe63d14610873578063a22cb4651461089c578063a5525292146108c5578063a8046b3f146108ee578063aa6fa0691461091757610288565b806370a082311161011357806370a0823114610748578063715018a614610785578063723118601461079c5780637e4831d3146107c75780638da5cb5b146107f257806391c0e5231461081d57610288565b80634d7e60b21461064a5780634f6ccce71461067557806359262259146106b25780635c464229146106c95780635dc96d16146106e05780636352211e1461070b57610288565b80632db11544116101fe578063419f6b3b116101b7578063419f6b3b1461055d57806342842e0e1461057957806342966c68146105a2578063441af61a146105cb57806345a915de146105f65780634d7883651461061f57610288565b80632db11544146104705780632f745c591461048c57806334b50a89146104c957806334ed9950146104e05780633bce0c79146105095780634047638d1461054657610288565b80630ecc7b23116102505780630ecc7b231461038657806311536eac1461039d57806318160ddd146103c6578063199c8581146103f157806323b872dd1461041c578063288346da1461044557610288565b806301ffc9a71461028d57806306fdde03146102ca578063077fc040146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613e44565b610a64565b6040516102c19190614670565b60405180910390f35b3480156102d657600080fd5b506102df610ade565b6040516102ec91906146a6565b60405180910390f35b34801561030157600080fd5b5061030a610b70565b60405161031791906146a6565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613f34565b610bfe565b6040516103549190614609565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613daa565b610c83565b005b34801561039257600080fd5b5061039b610d9b565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190613e9e565b610e43565b005b3480156103d257600080fd5b506103db610ed5565b6040516103e89190614a88565b60405180910390f35b3480156103fd57600080fd5b50610406610ee2565b6040516104139190614670565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613c94565b610ef5565b005b34801561045157600080fd5b5061045a610f55565b6040516104679190614a88565b60405180910390f35b61048a60048036038101906104859190613f34565b610f5b565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613daa565b611151565b6040516104c09190614a88565b60405180910390f35b3480156104d557600080fd5b506104de6111f6565b005b3480156104ec57600080fd5b5061050760048036038101906105029190613eeb565b6112c8565b005b34801561051557600080fd5b50610530600480360381019061052b9190613c27565b61135e565b60405161053d9190614a88565b60405180910390f35b34801561055257600080fd5b5061055b611376565b005b61057760048036038101906105729190613f61565b61141e565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613c94565b61177e565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613f34565b61179e565b005b3480156105d757600080fd5b506105e0611857565b6040516105ed91906146a6565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f34565b6118e5565b005b34801561062b57600080fd5b5061063461196b565b60405161064191906146a6565b60405180910390f35b34801561065657600080fd5b5061065f6119f9565b60405161066c9190614a88565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613f34565b6119ff565b6040516106a99190614a88565b60405180910390f35b3480156106be57600080fd5b506106c7611a70565b005b3480156106d557600080fd5b506106de611b09565b005b3480156106ec57600080fd5b506106f5611bb1565b6040516107029190614670565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190613f34565b611bc4565b60405161073f9190614609565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190613c27565b611c76565b60405161077c9190614a88565b60405180910390f35b34801561079157600080fd5b5061079a611d2e565b005b3480156107a857600080fd5b506107b1611db6565b6040516107be9190614670565b60405180910390f35b3480156107d357600080fd5b506107dc611dc9565b6040516107e99190614670565b60405180910390f35b3480156107fe57600080fd5b50610807611ddc565b6040516108149190614609565b60405180910390f35b34801561082957600080fd5b50610832611e06565b60405161083f919061468b565b60405180910390f35b34801561085457600080fd5b5061085d611e0c565b60405161086a91906146a6565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190613f34565b611e9e565b005b3480156108a857600080fd5b506108c360048036038101906108be9190613d6a565b611f8b565b005b3480156108d157600080fd5b506108ec60048036038101906108e79190613e17565b611fa1565b005b3480156108fa57600080fd5b5061091560048036038101906109109190613dea565b612027565b005b34801561092357600080fd5b5061092c6120c0565b6040516109399190614a88565b60405180910390f35b34801561094e57600080fd5b506109576120c6565b6040516109649190614670565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613ce7565b6120d9565b005b3480156109a257600080fd5b506109bd60048036038101906109b89190613f34565b61213b565b6040516109ca91906146a6565b60405180910390f35b3480156109df57600080fd5b506109e8612294565b6040516109f59190614a88565b60405180910390f35b348015610a0a57600080fd5b50610a256004803603810190610a209190613c54565b61229a565b604051610a329190614670565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d9190613c27565b61232e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad75750610ad682612426565b5b9050919050565b606060008054610aed90614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1990614d83565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b60168054610b7d90614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba990614d83565b8015610bf65780601f10610bcb57610100808354040283529160200191610bf6565b820191906000526020600020905b815481529060010190602001808311610bd957829003601f168201915b505050505081565b6000610c0982612508565b610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90614928565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c8e82611bc4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf6906149e8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d1e612574565b73ffffffffffffffffffffffffffffffffffffffff161480610d4d5750610d4c81610d47612574565b61229a565b5b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390614888565b60405180910390fd5b610d96838361257c565b505050565b610da3612574565b73ffffffffffffffffffffffffffffffffffffffff16610dc1611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90614968565b60405180910390fd5b601760009054906101000a900460ff1615601760006101000a81548160ff021916908315150217905550565b610e4b612574565b73ffffffffffffffffffffffffffffffffffffffff16610e69611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614968565b60405180910390fd5b818160149190610ed09291906138ac565b505050565b6000600880549050905090565b601360009054906101000a900460ff1681565b610f06610f00612574565b82612635565b610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90614a28565b60405180910390fd5b610f50838383612713565b505050565b60125481565b601960009054906101000a900460ff16610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190614808565b60405180910390fd5b601060019054906101000a900460ff1615610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906147a8565b60405180910390fd5b6000811161103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906146e8565b60405180910390fd5b60115481600c5461104e9190614bae565b111561108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906148e8565b60405180910390fd5b3481601a5461109e9190614c35565b11156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690614848565b60405180910390fd5b600080600090505b8281101561114c576110f9600d61296f565b611103600d612985565b915061110f3383612993565b6001600b5461111e9190614bae565b600b819055506001600c546111339190614bae565b600c81905550808061114490614de6565b9150506110e7565b505050565b600061115c83611c76565b821061119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906146c8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6111fe612574565b73ffffffffffffffffffffffffffffffffffffffff1661121c611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990614968565b60405180910390fd5b600047905061127f611ddc565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112c4573d6000803e3d6000fd5b5050565b6112d0612574565b73ffffffffffffffffffffffffffffffffffffffff166112ee611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90614968565b60405180910390fd5b806015908051906020019061135a929190613932565b5050565b600f6020528060005260406000206000915090505481565b61137e612574565b73ffffffffffffffffffffffffffffffffffffffff1661139c611ddc565b73ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e990614968565b60405180910390fd5b601960009054906101000a900460ff1615601960006101000a81548160ff021916908315150217905550565b601760009054906101000a900460ff1661146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614948565b60405180910390fd5b601060019054906101000a900460ff16156114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490614828565b60405180910390fd5b601254821115611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f9906149c8565b60405180910390fd5b60125482600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115509190614bae565b1115611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614a08565b60405180910390fd5b61159b33826129b1565b6115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614768565b60405180910390fd5b60115482600c546115eb9190614bae565b111561162c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611623906148e8565b60405180910390fd5b348260185461163b9190614c35565b111561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390614848565b60405180910390fd5b600080600090505b8381101561177857611696600d61296f565b6116a0600d612985565b91506116ac3383612993565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116f89190614bae565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600b5461174a9190614bae565b600b819055506001600c5461175f9190614bae565b600c81905550808061177090614de6565b915050611684565b50505050565b611799838383604051806020016040528060008152506120d9565b505050565b601060009054906101000a900460ff166117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490614748565b60405180910390fd5b6117f73382612635565b611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614a68565b60405180910390fd5b61183f816129f3565b6001600b5461184e9190614c8f565b600b8190555050565b6014805461186490614d83565b80601f016020809104026020016040519081016040528092919081815260200182805461189090614d83565b80156118dd5780601f106118b2576101008083540402835291602001916118dd565b820191906000526020600020905b8154815290600101906020018083116118c057829003601f168201915b505050505081565b6118ed612574565b73ffffffffffffffffffffffffffffffffffffffff1661190b611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614968565b60405180910390fd5b8060118190555050565b6015805461197890614d83565b80601f01602080910402602001604051908101604052809291908181526020018280546119a490614d83565b80156119f15780601f106119c6576101008083540402835291602001916119f1565b820191906000526020600020905b8154815290600101906020018083116119d457829003601f168201915b505050505081565b600b5481565b6000611a09610ed5565b8210611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614a48565b60405180910390fd5b60088281548110611a5e57611a5d614f4a565b5b90600052602060002001549050919050565b611a78612574565b73ffffffffffffffffffffffffffffffffffffffff16611a96611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae390614968565b60405180910390fd5b6001601360006101000a81548160ff021916908315150217905550565b611b11612574565b73ffffffffffffffffffffffffffffffffffffffff16611b2f611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614968565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c64906148c8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde906148a8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d36612574565b73ffffffffffffffffffffffffffffffffffffffff16611d54611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614968565b60405180910390fd5b611db46000612b04565b565b601760009054906101000a900460ff1681565b601060019054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b606060018054611e1b90614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4790614d83565b8015611e945780601f10611e6957610100808354040283529160200191611e94565b820191906000526020600020905b815481529060010190602001808311611e7757829003601f168201915b5050505050905090565b611ea6612574565b73ffffffffffffffffffffffffffffffffffffffff16611ec4611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190614968565b60405180910390fd5b600080600190505b828111611f8657611f33600d61296f565b611f3d600d612985565b9150611f493383612993565b6001600b54611f589190614bae565b600b819055506001600c54611f6d9190614bae565b600c819055508080611f7e90614de6565b915050611f22565b505050565b611f9d611f96612574565b8383612bca565b5050565b611fa9612574565b73ffffffffffffffffffffffffffffffffffffffff16611fc7611ddc565b73ffffffffffffffffffffffffffffffffffffffff161461201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614968565b60405180910390fd5b80600e8190555050565b61202f612574565b73ffffffffffffffffffffffffffffffffffffffff1661204d611ddc565b73ffffffffffffffffffffffffffffffffffffffff16146120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90614968565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60115481565b601960009054906101000a900460ff1681565b6120ea6120e4612574565b83612635565b612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614a28565b60405180910390fd5b61213584848484612d37565b50505050565b606061214682612508565b612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c906149a8565b60405180910390fd5b60001515601360009054906101000a900460ff161515141561223357601580546121ae90614d83565b80601f01602080910402602001604051908101604052809291908181526020018280546121da90614d83565b80156122275780601f106121fc57610100808354040283529160200191612227565b820191906000526020600020905b81548152906001019060200180831161220a57829003601f168201915b5050505050905061228f565b600061223d612d93565b9050600081511161225d576040518060200160405280600081525061228b565b8061226784612e25565b601660405160200161227b939291906145cd565b6040516020818303038152906040525b9150505b919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612336612574565b73ffffffffffffffffffffffffffffffffffffffff16612354611ddc565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614968565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614728565b60405180910390fd5b61242381612b04565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124f157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612501575061250082612f86565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125ef83611bc4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061264082612508565b61267f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267690614868565b60405180910390fd5b600061268a83611bc4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126f957508373ffffffffffffffffffffffffffffffffffffffff166126e184610bfe565b73ffffffffffffffffffffffffffffffffffffffff16145b8061270a5750612709818561229a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661273382611bc4565b73ffffffffffffffffffffffffffffffffffffffff1614612789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278090614988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f0906147c8565b60405180910390fd5b612804838383612ff0565b61280f60008261257c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285f9190614c8f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128b69190614bae565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6129ad828260405180602001604052806000815250613104565b5050565b600080836040516020016129c59190614586565b6040516020818303038152906040528051906020012090506129ea83600e548361315f565b91505092915050565b60006129fe82611bc4565b9050612a0c81600084612ff0565b612a1760008361257c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a679190614c8f565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c30906147e8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d2a9190614670565b60405180910390a3505050565b612d42848484612713565b612d4e84848484613176565b612d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8490614708565b60405180910390fd5b50505050565b606060148054612da290614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054612dce90614d83565b8015612e1b5780601f10612df057610100808354040283529160200191612e1b565b820191906000526020600020905b815481529060010190602001808311612dfe57829003601f168201915b5050505050905090565b60606000821415612e6d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f81565b600082905060005b60008214612e9f578080612e8890614de6565b915050600a82612e989190614c04565b9150612e75565b60008167ffffffffffffffff811115612ebb57612eba614f79565b5b6040519080825280601f01601f191660200182016040528015612eed5781602001600182028036833780820191505090505b5090505b60008514612f7a57600182612f069190614c8f565b9150600a85612f159190614e5d565b6030612f219190614bae565b60f81b818381518110612f3757612f36614f4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f739190614c04565b9450612ef1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ffb83838361330d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561303e5761303981613312565b61307d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461307c5761307b838261335b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130c0576130bb816134c8565b6130ff565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130fe576130fd8282613599565b5b5b505050565b61310e8383613618565b61311b6000848484613176565b61315a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315190614708565b60405180910390fd5b505050565b60008261316c85846137e6565b1490509392505050565b60006131978473ffffffffffffffffffffffffffffffffffffffff16613899565b15613300578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131c0612574565b8786866040518563ffffffff1660e01b81526004016131e29493929190614624565b602060405180830381600087803b1580156131fc57600080fd5b505af192505050801561322d57506040513d601f19601f8201168201806040525081019061322a9190613e71565b60015b6132b0573d806000811461325d576040519150601f19603f3d011682016040523d82523d6000602084013e613262565b606091505b506000815114156132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90614708565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613305565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161336884611c76565b6133729190614c8f565b9050600060076000848152602001908152602001600020549050818114613457576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134dc9190614c8f565b905060006009600084815260200190815260200160002054905060006008838154811061350c5761350b614f4a565b5b90600052602060002001549050806008838154811061352e5761352d614f4a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061357d5761357c614f1b565b5b6001900381819060005260206000200160009055905550505050565b60006135a483611c76565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f90614908565b60405180910390fd5b61369181612508565b156136d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c890614788565b60405180910390fd5b6136dd60008383612ff0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461372d9190614bae565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008082905060005b845181101561388e57600085828151811061380d5761380c614f4a565b5b6020026020010151905080831161384e5782816040516020016138319291906145a1565b60405160208183030381529060405280519060200120925061387a565b80836040516020016138619291906145a1565b6040516020818303038152906040528051906020012092505b50808061388690614de6565b9150506137ef565b508091505092915050565b600080823b905060008111915050919050565b8280546138b890614d83565b90600052602060002090601f0160209004810192826138da5760008555613921565b82601f106138f357803560ff1916838001178555613921565b82800160010185558215613921579182015b82811115613920578235825591602001919060010190613905565b5b50905061392e91906139b8565b5090565b82805461393e90614d83565b90600052602060002090601f01602090048101928261396057600085556139a7565b82601f1061397957805160ff19168380011785556139a7565b828001600101855582156139a7579182015b828111156139a657825182559160200191906001019061398b565b5b5090506139b491906139b8565b5090565b5b808211156139d15760008160009055506001016139b9565b5090565b60006139e86139e384614ac8565b614aa3565b90508083825260208201905082856020860282011115613a0b57613a0a614fb2565b5b60005b85811015613a3b5781613a218882613b21565b845260208401935060208301925050600181019050613a0e565b5050509392505050565b6000613a58613a5384614af4565b614aa3565b905082815260208101848484011115613a7457613a73614fb7565b5b613a7f848285614d41565b509392505050565b6000613a9a613a9584614b25565b614aa3565b905082815260208101848484011115613ab657613ab5614fb7565b5b613ac1848285614d41565b509392505050565b600081359050613ad8816158b7565b92915050565b600082601f830112613af357613af2614fad565b5b8135613b038482602086016139d5565b91505092915050565b600081359050613b1b816158ce565b92915050565b600081359050613b30816158e5565b92915050565b600081359050613b45816158fc565b92915050565b600081519050613b5a816158fc565b92915050565b600082601f830112613b7557613b74614fad565b5b8135613b85848260208601613a45565b91505092915050565b60008083601f840112613ba457613ba3614fad565b5b8235905067ffffffffffffffff811115613bc157613bc0614fa8565b5b602083019150836001820283011115613bdd57613bdc614fb2565b5b9250929050565b600082601f830112613bf957613bf8614fad565b5b8135613c09848260208601613a87565b91505092915050565b600081359050613c2181615913565b92915050565b600060208284031215613c3d57613c3c614fc1565b5b6000613c4b84828501613ac9565b91505092915050565b60008060408385031215613c6b57613c6a614fc1565b5b6000613c7985828601613ac9565b9250506020613c8a85828601613ac9565b9150509250929050565b600080600060608486031215613cad57613cac614fc1565b5b6000613cbb86828701613ac9565b9350506020613ccc86828701613ac9565b9250506040613cdd86828701613c12565b9150509250925092565b60008060008060808587031215613d0157613d00614fc1565b5b6000613d0f87828801613ac9565b9450506020613d2087828801613ac9565b9350506040613d3187828801613c12565b925050606085013567ffffffffffffffff811115613d5257613d51614fbc565b5b613d5e87828801613b60565b91505092959194509250565b60008060408385031215613d8157613d80614fc1565b5b6000613d8f85828601613ac9565b9250506020613da085828601613b0c565b9150509250929050565b60008060408385031215613dc157613dc0614fc1565b5b6000613dcf85828601613ac9565b9250506020613de085828601613c12565b9150509250929050565b600060208284031215613e0057613dff614fc1565b5b6000613e0e84828501613b0c565b91505092915050565b600060208284031215613e2d57613e2c614fc1565b5b6000613e3b84828501613b21565b91505092915050565b600060208284031215613e5a57613e59614fc1565b5b6000613e6884828501613b36565b91505092915050565b600060208284031215613e8757613e86614fc1565b5b6000613e9584828501613b4b565b91505092915050565b60008060208385031215613eb557613eb4614fc1565b5b600083013567ffffffffffffffff811115613ed357613ed2614fbc565b5b613edf85828601613b8e565b92509250509250929050565b600060208284031215613f0157613f00614fc1565b5b600082013567ffffffffffffffff811115613f1f57613f1e614fbc565b5b613f2b84828501613be4565b91505092915050565b600060208284031215613f4a57613f49614fc1565b5b6000613f5884828501613c12565b91505092915050565b60008060408385031215613f7857613f77614fc1565b5b6000613f8685828601613c12565b925050602083013567ffffffffffffffff811115613fa757613fa6614fbc565b5b613fb385828601613ade565b9150509250929050565b613fc681614cc3565b82525050565b613fdd613fd882614cc3565b614e2f565b82525050565b613fec81614cd5565b82525050565b613ffb81614ce1565b82525050565b61401261400d82614ce1565b614e41565b82525050565b600061402382614b6b565b61402d8185614b81565b935061403d818560208601614d50565b61404681614fc6565b840191505092915050565b600061405c82614b76565b6140668185614b92565b9350614076818560208601614d50565b61407f81614fc6565b840191505092915050565b600061409582614b76565b61409f8185614ba3565b93506140af818560208601614d50565b80840191505092915050565b600081546140c881614d83565b6140d28186614ba3565b945060018216600081146140ed57600181146140fe57614131565b60ff19831686528186019350614131565b61410785614b56565b60005b838110156141295781548189015260018201915060208101905061410a565b838801955050505b50505092915050565b6000614147602b83614b92565b915061415282614fe4565b604082019050919050565b600061416a602783614b92565b915061417582615033565b604082019050919050565b600061418d603283614b92565b915061419882615082565b604082019050919050565b60006141b0602683614b92565b91506141bb826150d1565b604082019050919050565b60006141d3602a83614b92565b91506141de82615120565b604082019050919050565b60006141f6602483614b92565b91506142018261516f565b604082019050919050565b6000614219601c83614b92565b9150614224826151be565b602082019050919050565b600061423c603083614b92565b9150614247826151e7565b604082019050919050565b600061425f602483614b92565b915061426a82615236565b604082019050919050565b6000614282601983614b92565b915061428d82615285565b602082019050919050565b60006142a5603583614b92565b91506142b0826152ae565b604082019050919050565b60006142c8603283614b92565b91506142d3826152fd565b604082019050919050565b60006142eb603383614b92565b91506142f68261534c565b604082019050919050565b600061430e602c83614b92565b91506143198261539b565b604082019050919050565b6000614331603883614b92565b915061433c826153ea565b604082019050919050565b6000614354602a83614b92565b915061435f82615439565b604082019050919050565b6000614377602983614b92565b915061438282615488565b604082019050919050565b600061439a602983614b92565b91506143a5826154d7565b604082019050919050565b60006143bd602083614b92565b91506143c882615526565b602082019050919050565b60006143e0602c83614b92565b91506143eb8261554f565b604082019050919050565b6000614403603783614b92565b915061440e8261559e565b604082019050919050565b6000614426602083614b92565b9150614431826155ed565b602082019050919050565b6000614449602983614b92565b915061445482615616565b604082019050919050565b600061446c602f83614b92565b915061447782615665565b604082019050919050565b600061448f603f83614b92565b915061449a826156b4565b604082019050919050565b60006144b2602183614b92565b91506144bd82615703565b604082019050919050565b60006144d5603383614b92565b91506144e082615752565b604082019050919050565b60006144f8603183614b92565b9150614503826157a1565b604082019050919050565b600061451b602c83614b92565b9150614526826157f0565b604082019050919050565b600061453e600183614ba3565b91506145498261583f565b600182019050919050565b6000614561602a83614b92565b915061456c82615868565b604082019050919050565b61458081614d37565b82525050565b60006145928284613fcc565b60148201915081905092915050565b60006145ad8285614001565b6020820191506145bd8284614001565b6020820191508190509392505050565b60006145d9828661408a565b91506145e482614531565b91506145f0828561408a565b91506145fc82846140bb565b9150819050949350505050565b600060208201905061461e6000830184613fbd565b92915050565b60006080820190506146396000830187613fbd565b6146466020830186613fbd565b6146536040830185614577565b81810360608301526146658184614018565b905095945050505050565b60006020820190506146856000830184613fe3565b92915050565b60006020820190506146a06000830184613ff2565b92915050565b600060208201905081810360008301526146c08184614051565b905092915050565b600060208201905081810360008301526146e18161413a565b9050919050565b600060208201905081810360008301526147018161415d565b9050919050565b6000602082019050818103600083015261472181614180565b9050919050565b60006020820190508181036000830152614741816141a3565b9050919050565b60006020820190508181036000830152614761816141c6565b9050919050565b60006020820190508181036000830152614781816141e9565b9050919050565b600060208201905081810360008301526147a18161420c565b9050919050565b600060208201905081810360008301526147c18161422f565b9050919050565b600060208201905081810360008301526147e181614252565b9050919050565b6000602082019050818103600083015261480181614275565b9050919050565b6000602082019050818103600083015261482181614298565b9050919050565b60006020820190508181036000830152614841816142bb565b9050919050565b60006020820190508181036000830152614861816142de565b9050919050565b6000602082019050818103600083015261488181614301565b9050919050565b600060208201905081810360008301526148a181614324565b9050919050565b600060208201905081810360008301526148c181614347565b9050919050565b600060208201905081810360008301526148e18161436a565b9050919050565b600060208201905081810360008301526149018161438d565b9050919050565b60006020820190508181036000830152614921816143b0565b9050919050565b60006020820190508181036000830152614941816143d3565b9050919050565b60006020820190508181036000830152614961816143f6565b9050919050565b6000602082019050818103600083015261498181614419565b9050919050565b600060208201905081810360008301526149a18161443c565b9050919050565b600060208201905081810360008301526149c18161445f565b9050919050565b600060208201905081810360008301526149e181614482565b9050919050565b60006020820190508181036000830152614a01816144a5565b9050919050565b60006020820190508181036000830152614a21816144c8565b9050919050565b60006020820190508181036000830152614a41816144eb565b9050919050565b60006020820190508181036000830152614a618161450e565b9050919050565b60006020820190508181036000830152614a8181614554565b9050919050565b6000602082019050614a9d6000830184614577565b92915050565b6000614aad614abe565b9050614ab98282614db5565b919050565b6000604051905090565b600067ffffffffffffffff821115614ae357614ae2614f79565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b0f57614b0e614f79565b5b614b1882614fc6565b9050602081019050919050565b600067ffffffffffffffff821115614b4057614b3f614f79565b5b614b4982614fc6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bb982614d37565b9150614bc483614d37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bf957614bf8614e8e565b5b828201905092915050565b6000614c0f82614d37565b9150614c1a83614d37565b925082614c2a57614c29614ebd565b5b828204905092915050565b6000614c4082614d37565b9150614c4b83614d37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c8457614c83614e8e565b5b828202905092915050565b6000614c9a82614d37565b9150614ca583614d37565b925082821015614cb857614cb7614e8e565b5b828203905092915050565b6000614cce82614d17565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d6e578082015181840152602081019050614d53565b83811115614d7d576000848401525b50505050565b60006002820490506001821680614d9b57607f821691505b60208210811415614daf57614dae614eec565b5b50919050565b614dbe82614fc6565b810181811067ffffffffffffffff82111715614ddd57614ddc614f79565b5b80604052505050565b6000614df182614d37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2457614e23614e8e565b5b600182019050919050565b6000614e3a82614e4b565b9050919050565b6000819050919050565b6000614e5682614fd7565b9050919050565b6000614e6882614d37565b9150614e7383614d37565b925082614e8357614e82614ebd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f596f75206d757374206d696e74206d6f7265207468616e203020486f646c652060008201527f426f617264732e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f486f646c6520426f617264206275726e696e672069732063757272656e746c7960008201527f2064697361626c65642e00000000000000000000000000000000000000000000602082015250565b7f546869732061646472657373206973206e6f74206f6e2074686520576f72644c60008201527f6973742e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520486f646c6520426f617264207075626c6963206d696e74206973206360008201527f757272656e746c79207061757365642e00000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f54686520486f646c6520426f617264207075626c6963206d696e74206973206360008201527f757272656e746c7920756e617661696c61626c652e0000000000000000000000602082015250565b7f54686520486f646c6520426f61726420576f72644c697374206d696e7420697360008201527f2063757272656e746c79207061757365642e0000000000000000000000000000602082015250565b7f546865207472616e73616374696f6e207265717569726573206d6f726520455460008201527f4820746f20576f72644c697374206d696e742e00000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f54686520486f646c6520426f61726420636f6c6c656374696f6e206973206d6960008201527f6e746564206f75742e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686520486f646c6520426f61726420576f72644c697374206d696e7420697360008201527f2063757272656e746c7920756e617661696c61626c652e000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620313020486f6460008201527f6c6520426f61726473206f6e2074686520576f72644c697374206d696e742e00602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468697320616464726573732068617320616c726561647920636c61696d656460008201527f20313020576f72644c697374206d696e74732e00000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4275726e2063616c6c6572206973206e6f7420617070726f766564206e6f722060008201527f746865206f776e65722e00000000000000000000000000000000000000000000602082015250565b6158c081614cc3565b81146158cb57600080fd5b50565b6158d781614cd5565b81146158e257600080fd5b50565b6158ee81614ce1565b81146158f957600080fd5b50565b61590581614ceb565b811461591057600080fd5b50565b61591c81614d37565b811461592757600080fd5b5056fea2646970667358221220ee2b9726b631ce51bfa0584064323fb29369f304b6277171bc003d5efa49b2a164736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102885760003560e01c80634d7e60b21161015a57806395d89b41116100c1578063b7f751d81161007a578063b7f751d814610942578063b88d4fde1461096d578063c87b56dd14610996578063dd27d70f146109d3578063e985e9c5146109fe578063f2fde38b14610a3b57610288565b806395d89b41146108485780639e5fe63d14610873578063a22cb4651461089c578063a5525292146108c5578063a8046b3f146108ee578063aa6fa0691461091757610288565b806370a082311161011357806370a0823114610748578063715018a614610785578063723118601461079c5780637e4831d3146107c75780638da5cb5b146107f257806391c0e5231461081d57610288565b80634d7e60b21461064a5780634f6ccce71461067557806359262259146106b25780635c464229146106c95780635dc96d16146106e05780636352211e1461070b57610288565b80632db11544116101fe578063419f6b3b116101b7578063419f6b3b1461055d57806342842e0e1461057957806342966c68146105a2578063441af61a146105cb57806345a915de146105f65780634d7883651461061f57610288565b80632db11544146104705780632f745c591461048c57806334b50a89146104c957806334ed9950146104e05780633bce0c79146105095780634047638d1461054657610288565b80630ecc7b23116102505780630ecc7b231461038657806311536eac1461039d57806318160ddd146103c6578063199c8581146103f157806323b872dd1461041c578063288346da1461044557610288565b806301ffc9a71461028d57806306fdde03146102ca578063077fc040146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613e44565b610a64565b6040516102c19190614670565b60405180910390f35b3480156102d657600080fd5b506102df610ade565b6040516102ec91906146a6565b60405180910390f35b34801561030157600080fd5b5061030a610b70565b60405161031791906146a6565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613f34565b610bfe565b6040516103549190614609565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613daa565b610c83565b005b34801561039257600080fd5b5061039b610d9b565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190613e9e565b610e43565b005b3480156103d257600080fd5b506103db610ed5565b6040516103e89190614a88565b60405180910390f35b3480156103fd57600080fd5b50610406610ee2565b6040516104139190614670565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613c94565b610ef5565b005b34801561045157600080fd5b5061045a610f55565b6040516104679190614a88565b60405180910390f35b61048a60048036038101906104859190613f34565b610f5b565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613daa565b611151565b6040516104c09190614a88565b60405180910390f35b3480156104d557600080fd5b506104de6111f6565b005b3480156104ec57600080fd5b5061050760048036038101906105029190613eeb565b6112c8565b005b34801561051557600080fd5b50610530600480360381019061052b9190613c27565b61135e565b60405161053d9190614a88565b60405180910390f35b34801561055257600080fd5b5061055b611376565b005b61057760048036038101906105729190613f61565b61141e565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613c94565b61177e565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613f34565b61179e565b005b3480156105d757600080fd5b506105e0611857565b6040516105ed91906146a6565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613f34565b6118e5565b005b34801561062b57600080fd5b5061063461196b565b60405161064191906146a6565b60405180910390f35b34801561065657600080fd5b5061065f6119f9565b60405161066c9190614a88565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613f34565b6119ff565b6040516106a99190614a88565b60405180910390f35b3480156106be57600080fd5b506106c7611a70565b005b3480156106d557600080fd5b506106de611b09565b005b3480156106ec57600080fd5b506106f5611bb1565b6040516107029190614670565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190613f34565b611bc4565b60405161073f9190614609565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190613c27565b611c76565b60405161077c9190614a88565b60405180910390f35b34801561079157600080fd5b5061079a611d2e565b005b3480156107a857600080fd5b506107b1611db6565b6040516107be9190614670565b60405180910390f35b3480156107d357600080fd5b506107dc611dc9565b6040516107e99190614670565b60405180910390f35b3480156107fe57600080fd5b50610807611ddc565b6040516108149190614609565b60405180910390f35b34801561082957600080fd5b50610832611e06565b60405161083f919061468b565b60405180910390f35b34801561085457600080fd5b5061085d611e0c565b60405161086a91906146a6565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190613f34565b611e9e565b005b3480156108a857600080fd5b506108c360048036038101906108be9190613d6a565b611f8b565b005b3480156108d157600080fd5b506108ec60048036038101906108e79190613e17565b611fa1565b005b3480156108fa57600080fd5b5061091560048036038101906109109190613dea565b612027565b005b34801561092357600080fd5b5061092c6120c0565b6040516109399190614a88565b60405180910390f35b34801561094e57600080fd5b506109576120c6565b6040516109649190614670565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613ce7565b6120d9565b005b3480156109a257600080fd5b506109bd60048036038101906109b89190613f34565b61213b565b6040516109ca91906146a6565b60405180910390f35b3480156109df57600080fd5b506109e8612294565b6040516109f59190614a88565b60405180910390f35b348015610a0a57600080fd5b50610a256004803603810190610a209190613c54565b61229a565b604051610a329190614670565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d9190613c27565b61232e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad75750610ad682612426565b5b9050919050565b606060008054610aed90614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1990614d83565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b60168054610b7d90614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba990614d83565b8015610bf65780601f10610bcb57610100808354040283529160200191610bf6565b820191906000526020600020905b815481529060010190602001808311610bd957829003601f168201915b505050505081565b6000610c0982612508565b610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90614928565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c8e82611bc4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf6906149e8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d1e612574565b73ffffffffffffffffffffffffffffffffffffffff161480610d4d5750610d4c81610d47612574565b61229a565b5b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390614888565b60405180910390fd5b610d96838361257c565b505050565b610da3612574565b73ffffffffffffffffffffffffffffffffffffffff16610dc1611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90614968565b60405180910390fd5b601760009054906101000a900460ff1615601760006101000a81548160ff021916908315150217905550565b610e4b612574565b73ffffffffffffffffffffffffffffffffffffffff16610e69611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614968565b60405180910390fd5b818160149190610ed09291906138ac565b505050565b6000600880549050905090565b601360009054906101000a900460ff1681565b610f06610f00612574565b82612635565b610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90614a28565b60405180910390fd5b610f50838383612713565b505050565b60125481565b601960009054906101000a900460ff16610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190614808565b60405180910390fd5b601060019054906101000a900460ff1615610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906147a8565b60405180910390fd5b6000811161103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906146e8565b60405180910390fd5b60115481600c5461104e9190614bae565b111561108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906148e8565b60405180910390fd5b3481601a5461109e9190614c35565b11156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690614848565b60405180910390fd5b600080600090505b8281101561114c576110f9600d61296f565b611103600d612985565b915061110f3383612993565b6001600b5461111e9190614bae565b600b819055506001600c546111339190614bae565b600c81905550808061114490614de6565b9150506110e7565b505050565b600061115c83611c76565b821061119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906146c8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6111fe612574565b73ffffffffffffffffffffffffffffffffffffffff1661121c611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990614968565b60405180910390fd5b600047905061127f611ddc565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112c4573d6000803e3d6000fd5b5050565b6112d0612574565b73ffffffffffffffffffffffffffffffffffffffff166112ee611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90614968565b60405180910390fd5b806015908051906020019061135a929190613932565b5050565b600f6020528060005260406000206000915090505481565b61137e612574565b73ffffffffffffffffffffffffffffffffffffffff1661139c611ddc565b73ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e990614968565b60405180910390fd5b601960009054906101000a900460ff1615601960006101000a81548160ff021916908315150217905550565b601760009054906101000a900460ff1661146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614948565b60405180910390fd5b601060019054906101000a900460ff16156114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490614828565b60405180910390fd5b601254821115611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f9906149c8565b60405180910390fd5b60125482600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115509190614bae565b1115611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614a08565b60405180910390fd5b61159b33826129b1565b6115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614768565b60405180910390fd5b60115482600c546115eb9190614bae565b111561162c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611623906148e8565b60405180910390fd5b348260185461163b9190614c35565b111561167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390614848565b60405180910390fd5b600080600090505b8381101561177857611696600d61296f565b6116a0600d612985565b91506116ac3383612993565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116f89190614bae565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600b5461174a9190614bae565b600b819055506001600c5461175f9190614bae565b600c81905550808061177090614de6565b915050611684565b50505050565b611799838383604051806020016040528060008152506120d9565b505050565b601060009054906101000a900460ff166117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490614748565b60405180910390fd5b6117f73382612635565b611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614a68565b60405180910390fd5b61183f816129f3565b6001600b5461184e9190614c8f565b600b8190555050565b6014805461186490614d83565b80601f016020809104026020016040519081016040528092919081815260200182805461189090614d83565b80156118dd5780601f106118b2576101008083540402835291602001916118dd565b820191906000526020600020905b8154815290600101906020018083116118c057829003601f168201915b505050505081565b6118ed612574565b73ffffffffffffffffffffffffffffffffffffffff1661190b611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614968565b60405180910390fd5b8060118190555050565b6015805461197890614d83565b80601f01602080910402602001604051908101604052809291908181526020018280546119a490614d83565b80156119f15780601f106119c6576101008083540402835291602001916119f1565b820191906000526020600020905b8154815290600101906020018083116119d457829003601f168201915b505050505081565b600b5481565b6000611a09610ed5565b8210611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614a48565b60405180910390fd5b60088281548110611a5e57611a5d614f4a565b5b90600052602060002001549050919050565b611a78612574565b73ffffffffffffffffffffffffffffffffffffffff16611a96611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae390614968565b60405180910390fd5b6001601360006101000a81548160ff021916908315150217905550565b611b11612574565b73ffffffffffffffffffffffffffffffffffffffff16611b2f611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614968565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c64906148c8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde906148a8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d36612574565b73ffffffffffffffffffffffffffffffffffffffff16611d54611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614968565b60405180910390fd5b611db46000612b04565b565b601760009054906101000a900460ff1681565b601060019054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b606060018054611e1b90614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4790614d83565b8015611e945780601f10611e6957610100808354040283529160200191611e94565b820191906000526020600020905b815481529060010190602001808311611e7757829003601f168201915b5050505050905090565b611ea6612574565b73ffffffffffffffffffffffffffffffffffffffff16611ec4611ddc565b73ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190614968565b60405180910390fd5b600080600190505b828111611f8657611f33600d61296f565b611f3d600d612985565b9150611f493383612993565b6001600b54611f589190614bae565b600b819055506001600c54611f6d9190614bae565b600c819055508080611f7e90614de6565b915050611f22565b505050565b611f9d611f96612574565b8383612bca565b5050565b611fa9612574565b73ffffffffffffffffffffffffffffffffffffffff16611fc7611ddc565b73ffffffffffffffffffffffffffffffffffffffff161461201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614968565b60405180910390fd5b80600e8190555050565b61202f612574565b73ffffffffffffffffffffffffffffffffffffffff1661204d611ddc565b73ffffffffffffffffffffffffffffffffffffffff16146120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90614968565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60115481565b601960009054906101000a900460ff1681565b6120ea6120e4612574565b83612635565b612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614a28565b60405180910390fd5b61213584848484612d37565b50505050565b606061214682612508565b612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c906149a8565b60405180910390fd5b60001515601360009054906101000a900460ff161515141561223357601580546121ae90614d83565b80601f01602080910402602001604051908101604052809291908181526020018280546121da90614d83565b80156122275780601f106121fc57610100808354040283529160200191612227565b820191906000526020600020905b81548152906001019060200180831161220a57829003601f168201915b5050505050905061228f565b600061223d612d93565b9050600081511161225d576040518060200160405280600081525061228b565b8061226784612e25565b601660405160200161227b939291906145cd565b6040516020818303038152906040525b9150505b919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612336612574565b73ffffffffffffffffffffffffffffffffffffffff16612354611ddc565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614968565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614728565b60405180910390fd5b61242381612b04565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124f157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612501575061250082612f86565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125ef83611bc4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061264082612508565b61267f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267690614868565b60405180910390fd5b600061268a83611bc4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126f957508373ffffffffffffffffffffffffffffffffffffffff166126e184610bfe565b73ffffffffffffffffffffffffffffffffffffffff16145b8061270a5750612709818561229a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661273382611bc4565b73ffffffffffffffffffffffffffffffffffffffff1614612789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278090614988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f0906147c8565b60405180910390fd5b612804838383612ff0565b61280f60008261257c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285f9190614c8f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128b69190614bae565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6129ad828260405180602001604052806000815250613104565b5050565b600080836040516020016129c59190614586565b6040516020818303038152906040528051906020012090506129ea83600e548361315f565b91505092915050565b60006129fe82611bc4565b9050612a0c81600084612ff0565b612a1760008361257c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a679190614c8f565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c30906147e8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d2a9190614670565b60405180910390a3505050565b612d42848484612713565b612d4e84848484613176565b612d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8490614708565b60405180910390fd5b50505050565b606060148054612da290614d83565b80601f0160208091040260200160405190810160405280929190818152602001828054612dce90614d83565b8015612e1b5780601f10612df057610100808354040283529160200191612e1b565b820191906000526020600020905b815481529060010190602001808311612dfe57829003601f168201915b5050505050905090565b60606000821415612e6d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f81565b600082905060005b60008214612e9f578080612e8890614de6565b915050600a82612e989190614c04565b9150612e75565b60008167ffffffffffffffff811115612ebb57612eba614f79565b5b6040519080825280601f01601f191660200182016040528015612eed5781602001600182028036833780820191505090505b5090505b60008514612f7a57600182612f069190614c8f565b9150600a85612f159190614e5d565b6030612f219190614bae565b60f81b818381518110612f3757612f36614f4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f739190614c04565b9450612ef1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ffb83838361330d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561303e5761303981613312565b61307d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461307c5761307b838261335b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130c0576130bb816134c8565b6130ff565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130fe576130fd8282613599565b5b5b505050565b61310e8383613618565b61311b6000848484613176565b61315a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315190614708565b60405180910390fd5b505050565b60008261316c85846137e6565b1490509392505050565b60006131978473ffffffffffffffffffffffffffffffffffffffff16613899565b15613300578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131c0612574565b8786866040518563ffffffff1660e01b81526004016131e29493929190614624565b602060405180830381600087803b1580156131fc57600080fd5b505af192505050801561322d57506040513d601f19601f8201168201806040525081019061322a9190613e71565b60015b6132b0573d806000811461325d576040519150601f19603f3d011682016040523d82523d6000602084013e613262565b606091505b506000815114156132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90614708565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613305565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161336884611c76565b6133729190614c8f565b9050600060076000848152602001908152602001600020549050818114613457576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134dc9190614c8f565b905060006009600084815260200190815260200160002054905060006008838154811061350c5761350b614f4a565b5b90600052602060002001549050806008838154811061352e5761352d614f4a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061357d5761357c614f1b565b5b6001900381819060005260206000200160009055905550505050565b60006135a483611c76565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f90614908565b60405180910390fd5b61369181612508565b156136d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c890614788565b60405180910390fd5b6136dd60008383612ff0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461372d9190614bae565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008082905060005b845181101561388e57600085828151811061380d5761380c614f4a565b5b6020026020010151905080831161384e5782816040516020016138319291906145a1565b60405160208183030381529060405280519060200120925061387a565b80836040516020016138619291906145a1565b6040516020818303038152906040528051906020012092505b50808061388690614de6565b9150506137ef565b508091505092915050565b600080823b905060008111915050919050565b8280546138b890614d83565b90600052602060002090601f0160209004810192826138da5760008555613921565b82601f106138f357803560ff1916838001178555613921565b82800160010185558215613921579182015b82811115613920578235825591602001919060010190613905565b5b50905061392e91906139b8565b5090565b82805461393e90614d83565b90600052602060002090601f01602090048101928261396057600085556139a7565b82601f1061397957805160ff19168380011785556139a7565b828001600101855582156139a7579182015b828111156139a657825182559160200191906001019061398b565b5b5090506139b491906139b8565b5090565b5b808211156139d15760008160009055506001016139b9565b5090565b60006139e86139e384614ac8565b614aa3565b90508083825260208201905082856020860282011115613a0b57613a0a614fb2565b5b60005b85811015613a3b5781613a218882613b21565b845260208401935060208301925050600181019050613a0e565b5050509392505050565b6000613a58613a5384614af4565b614aa3565b905082815260208101848484011115613a7457613a73614fb7565b5b613a7f848285614d41565b509392505050565b6000613a9a613a9584614b25565b614aa3565b905082815260208101848484011115613ab657613ab5614fb7565b5b613ac1848285614d41565b509392505050565b600081359050613ad8816158b7565b92915050565b600082601f830112613af357613af2614fad565b5b8135613b038482602086016139d5565b91505092915050565b600081359050613b1b816158ce565b92915050565b600081359050613b30816158e5565b92915050565b600081359050613b45816158fc565b92915050565b600081519050613b5a816158fc565b92915050565b600082601f830112613b7557613b74614fad565b5b8135613b85848260208601613a45565b91505092915050565b60008083601f840112613ba457613ba3614fad565b5b8235905067ffffffffffffffff811115613bc157613bc0614fa8565b5b602083019150836001820283011115613bdd57613bdc614fb2565b5b9250929050565b600082601f830112613bf957613bf8614fad565b5b8135613c09848260208601613a87565b91505092915050565b600081359050613c2181615913565b92915050565b600060208284031215613c3d57613c3c614fc1565b5b6000613c4b84828501613ac9565b91505092915050565b60008060408385031215613c6b57613c6a614fc1565b5b6000613c7985828601613ac9565b9250506020613c8a85828601613ac9565b9150509250929050565b600080600060608486031215613cad57613cac614fc1565b5b6000613cbb86828701613ac9565b9350506020613ccc86828701613ac9565b9250506040613cdd86828701613c12565b9150509250925092565b60008060008060808587031215613d0157613d00614fc1565b5b6000613d0f87828801613ac9565b9450506020613d2087828801613ac9565b9350506040613d3187828801613c12565b925050606085013567ffffffffffffffff811115613d5257613d51614fbc565b5b613d5e87828801613b60565b91505092959194509250565b60008060408385031215613d8157613d80614fc1565b5b6000613d8f85828601613ac9565b9250506020613da085828601613b0c565b9150509250929050565b60008060408385031215613dc157613dc0614fc1565b5b6000613dcf85828601613ac9565b9250506020613de085828601613c12565b9150509250929050565b600060208284031215613e0057613dff614fc1565b5b6000613e0e84828501613b0c565b91505092915050565b600060208284031215613e2d57613e2c614fc1565b5b6000613e3b84828501613b21565b91505092915050565b600060208284031215613e5a57613e59614fc1565b5b6000613e6884828501613b36565b91505092915050565b600060208284031215613e8757613e86614fc1565b5b6000613e9584828501613b4b565b91505092915050565b60008060208385031215613eb557613eb4614fc1565b5b600083013567ffffffffffffffff811115613ed357613ed2614fbc565b5b613edf85828601613b8e565b92509250509250929050565b600060208284031215613f0157613f00614fc1565b5b600082013567ffffffffffffffff811115613f1f57613f1e614fbc565b5b613f2b84828501613be4565b91505092915050565b600060208284031215613f4a57613f49614fc1565b5b6000613f5884828501613c12565b91505092915050565b60008060408385031215613f7857613f77614fc1565b5b6000613f8685828601613c12565b925050602083013567ffffffffffffffff811115613fa757613fa6614fbc565b5b613fb385828601613ade565b9150509250929050565b613fc681614cc3565b82525050565b613fdd613fd882614cc3565b614e2f565b82525050565b613fec81614cd5565b82525050565b613ffb81614ce1565b82525050565b61401261400d82614ce1565b614e41565b82525050565b600061402382614b6b565b61402d8185614b81565b935061403d818560208601614d50565b61404681614fc6565b840191505092915050565b600061405c82614b76565b6140668185614b92565b9350614076818560208601614d50565b61407f81614fc6565b840191505092915050565b600061409582614b76565b61409f8185614ba3565b93506140af818560208601614d50565b80840191505092915050565b600081546140c881614d83565b6140d28186614ba3565b945060018216600081146140ed57600181146140fe57614131565b60ff19831686528186019350614131565b61410785614b56565b60005b838110156141295781548189015260018201915060208101905061410a565b838801955050505b50505092915050565b6000614147602b83614b92565b915061415282614fe4565b604082019050919050565b600061416a602783614b92565b915061417582615033565b604082019050919050565b600061418d603283614b92565b915061419882615082565b604082019050919050565b60006141b0602683614b92565b91506141bb826150d1565b604082019050919050565b60006141d3602a83614b92565b91506141de82615120565b604082019050919050565b60006141f6602483614b92565b91506142018261516f565b604082019050919050565b6000614219601c83614b92565b9150614224826151be565b602082019050919050565b600061423c603083614b92565b9150614247826151e7565b604082019050919050565b600061425f602483614b92565b915061426a82615236565b604082019050919050565b6000614282601983614b92565b915061428d82615285565b602082019050919050565b60006142a5603583614b92565b91506142b0826152ae565b604082019050919050565b60006142c8603283614b92565b91506142d3826152fd565b604082019050919050565b60006142eb603383614b92565b91506142f68261534c565b604082019050919050565b600061430e602c83614b92565b91506143198261539b565b604082019050919050565b6000614331603883614b92565b915061433c826153ea565b604082019050919050565b6000614354602a83614b92565b915061435f82615439565b604082019050919050565b6000614377602983614b92565b915061438282615488565b604082019050919050565b600061439a602983614b92565b91506143a5826154d7565b604082019050919050565b60006143bd602083614b92565b91506143c882615526565b602082019050919050565b60006143e0602c83614b92565b91506143eb8261554f565b604082019050919050565b6000614403603783614b92565b915061440e8261559e565b604082019050919050565b6000614426602083614b92565b9150614431826155ed565b602082019050919050565b6000614449602983614b92565b915061445482615616565b604082019050919050565b600061446c602f83614b92565b915061447782615665565b604082019050919050565b600061448f603f83614b92565b915061449a826156b4565b604082019050919050565b60006144b2602183614b92565b91506144bd82615703565b604082019050919050565b60006144d5603383614b92565b91506144e082615752565b604082019050919050565b60006144f8603183614b92565b9150614503826157a1565b604082019050919050565b600061451b602c83614b92565b9150614526826157f0565b604082019050919050565b600061453e600183614ba3565b91506145498261583f565b600182019050919050565b6000614561602a83614b92565b915061456c82615868565b604082019050919050565b61458081614d37565b82525050565b60006145928284613fcc565b60148201915081905092915050565b60006145ad8285614001565b6020820191506145bd8284614001565b6020820191508190509392505050565b60006145d9828661408a565b91506145e482614531565b91506145f0828561408a565b91506145fc82846140bb565b9150819050949350505050565b600060208201905061461e6000830184613fbd565b92915050565b60006080820190506146396000830187613fbd565b6146466020830186613fbd565b6146536040830185614577565b81810360608301526146658184614018565b905095945050505050565b60006020820190506146856000830184613fe3565b92915050565b60006020820190506146a06000830184613ff2565b92915050565b600060208201905081810360008301526146c08184614051565b905092915050565b600060208201905081810360008301526146e18161413a565b9050919050565b600060208201905081810360008301526147018161415d565b9050919050565b6000602082019050818103600083015261472181614180565b9050919050565b60006020820190508181036000830152614741816141a3565b9050919050565b60006020820190508181036000830152614761816141c6565b9050919050565b60006020820190508181036000830152614781816141e9565b9050919050565b600060208201905081810360008301526147a18161420c565b9050919050565b600060208201905081810360008301526147c18161422f565b9050919050565b600060208201905081810360008301526147e181614252565b9050919050565b6000602082019050818103600083015261480181614275565b9050919050565b6000602082019050818103600083015261482181614298565b9050919050565b60006020820190508181036000830152614841816142bb565b9050919050565b60006020820190508181036000830152614861816142de565b9050919050565b6000602082019050818103600083015261488181614301565b9050919050565b600060208201905081810360008301526148a181614324565b9050919050565b600060208201905081810360008301526148c181614347565b9050919050565b600060208201905081810360008301526148e18161436a565b9050919050565b600060208201905081810360008301526149018161438d565b9050919050565b60006020820190508181036000830152614921816143b0565b9050919050565b60006020820190508181036000830152614941816143d3565b9050919050565b60006020820190508181036000830152614961816143f6565b9050919050565b6000602082019050818103600083015261498181614419565b9050919050565b600060208201905081810360008301526149a18161443c565b9050919050565b600060208201905081810360008301526149c18161445f565b9050919050565b600060208201905081810360008301526149e181614482565b9050919050565b60006020820190508181036000830152614a01816144a5565b9050919050565b60006020820190508181036000830152614a21816144c8565b9050919050565b60006020820190508181036000830152614a41816144eb565b9050919050565b60006020820190508181036000830152614a618161450e565b9050919050565b60006020820190508181036000830152614a8181614554565b9050919050565b6000602082019050614a9d6000830184614577565b92915050565b6000614aad614abe565b9050614ab98282614db5565b919050565b6000604051905090565b600067ffffffffffffffff821115614ae357614ae2614f79565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b0f57614b0e614f79565b5b614b1882614fc6565b9050602081019050919050565b600067ffffffffffffffff821115614b4057614b3f614f79565b5b614b4982614fc6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bb982614d37565b9150614bc483614d37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bf957614bf8614e8e565b5b828201905092915050565b6000614c0f82614d37565b9150614c1a83614d37565b925082614c2a57614c29614ebd565b5b828204905092915050565b6000614c4082614d37565b9150614c4b83614d37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c8457614c83614e8e565b5b828202905092915050565b6000614c9a82614d37565b9150614ca583614d37565b925082821015614cb857614cb7614e8e565b5b828203905092915050565b6000614cce82614d17565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d6e578082015181840152602081019050614d53565b83811115614d7d576000848401525b50505050565b60006002820490506001821680614d9b57607f821691505b60208210811415614daf57614dae614eec565b5b50919050565b614dbe82614fc6565b810181811067ffffffffffffffff82111715614ddd57614ddc614f79565b5b80604052505050565b6000614df182614d37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2457614e23614e8e565b5b600182019050919050565b6000614e3a82614e4b565b9050919050565b6000819050919050565b6000614e5682614fd7565b9050919050565b6000614e6882614d37565b9150614e7383614d37565b925082614e8357614e82614ebd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f596f75206d757374206d696e74206d6f7265207468616e203020486f646c652060008201527f426f617264732e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f486f646c6520426f617264206275726e696e672069732063757272656e746c7960008201527f2064697361626c65642e00000000000000000000000000000000000000000000602082015250565b7f546869732061646472657373206973206e6f74206f6e2074686520576f72644c60008201527f6973742e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520486f646c6520426f617264207075626c6963206d696e74206973206360008201527f757272656e746c79207061757365642e00000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f54686520486f646c6520426f617264207075626c6963206d696e74206973206360008201527f757272656e746c7920756e617661696c61626c652e0000000000000000000000602082015250565b7f54686520486f646c6520426f61726420576f72644c697374206d696e7420697360008201527f2063757272656e746c79207061757365642e0000000000000000000000000000602082015250565b7f546865207472616e73616374696f6e207265717569726573206d6f726520455460008201527f4820746f20576f72644c697374206d696e742e00000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f54686520486f646c6520426f61726420636f6c6c656374696f6e206973206d6960008201527f6e746564206f75742e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686520486f646c6520426f61726420576f72644c697374206d696e7420697360008201527f2063757272656e746c7920756e617661696c61626c652e000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620313020486f6460008201527f6c6520426f61726473206f6e2074686520576f72644c697374206d696e742e00602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468697320616464726573732068617320616c726561647920636c61696d656460008201527f20313020576f72644c697374206d696e74732e00000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4275726e2063616c6c6572206973206e6f7420617070726f766564206e6f722060008201527f746865206f776e65722e00000000000000000000000000000000000000000000602082015250565b6158c081614cc3565b81146158cb57600080fd5b50565b6158d781614cd5565b81146158e257600080fd5b50565b6158ee81614ce1565b81146158f957600080fd5b50565b61590581614ceb565b811461591057600080fd5b50565b61591c81614d37565b811461592757600080fd5b5056fea2646970667358221220ee2b9726b631ce51bfa0584064323fb29369f304b6277171bc003d5efa49b2a164736f6c63430008070033
Deployed Bytecode Sourcemap
55004:5584:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48790:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36284:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55594:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37843:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37366:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55989:94;;;;;;;;;;;;;:::i;:::-;;56187:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49430;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55494:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38593:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55452:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57848:846;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49098:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60420:165;;;;;;;;;;;;;:::i;:::-;;59513:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55278:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56091:88;;;;;;;;;;;;;:::i;:::-;;56620:1220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39003:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59849:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55534:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59625:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55563:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55136:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49620:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56417:80;;;;;;;;;;;;;:::i;:::-;;55894:87;;;;;;;;;;;;;:::i;:::-;;55332:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35978:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35708:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11259:103;;;;;;;;;;;;;:::i;:::-;;55634:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55370:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10608:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55244:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36453:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58702:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38136:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59738:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56505:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55407:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55737:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39259:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59070:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55168:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38362:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11517:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48790:224;48892:4;48931:35;48916:50;;;:11;:50;;;;:90;;;;48970:36;48994:11;48970:23;:36::i;:::-;48916:90;48909:97;;48790:224;;;:::o;36284:100::-;36338:13;36371:5;36364:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36284:100;:::o;55594:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37843:221::-;37919:7;37947:16;37955:7;37947;:16::i;:::-;37939:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38032:15;:24;38048:7;38032:24;;;;;;;;;;;;;;;;;;;;;38025:31;;37843:221;;;:::o;37366:411::-;37447:13;37463:23;37478:7;37463:14;:23::i;:::-;37447:39;;37511:5;37505:11;;:2;:11;;;;37497:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37605:5;37589:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37614:37;37631:5;37638:12;:10;:12::i;:::-;37614:16;:37::i;:::-;37589:62;37567:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;37748:21;37757:2;37761:7;37748:8;:21::i;:::-;37436:341;37366:411;;:::o;55989:94::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56063:12:::1;;;;;;;;;;;56062:13;56047:12;;:28;;;;;;;;;;;;;;;;;;55989:94::o:0;56187:113::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56281:11:::1;;56270:8;:22;;;;;;;:::i;:::-;;56187:113:::0;;:::o;49430:::-;49491:7;49518:10;:17;;;;49511:24;;49430:113;:::o;55494:33::-;;;;;;;;;;;;;:::o;38593:339::-;38788:41;38807:12;:10;:12::i;:::-;38821:7;38788:18;:41::i;:::-;38780:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;38896:28;38906:4;38912:2;38916:7;38896:9;:28::i;:::-;38593:339;;;:::o;55452:33::-;;;;:::o;57848:846::-;57922:10;;;;;;;;;;;57914:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;58010:10;;;;;;;;;;;58009:11;58001:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;58105:1;58094:8;:12;58086:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;58195:16;;58183:8;58169:11;;:22;;;;:::i;:::-;:42;;58161:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;58303:9;58291:8;58276:12;;:23;;;;:::i;:::-;:36;;58268:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;58381:21;58418:9;58430:1;58418:13;;58413:274;58437:8;58433:1;:12;58413:274;;;58467:21;:9;:19;:21::i;:::-;58519:19;:9;:17;:19::i;:::-;58503:35;;58553:36;58563:10;58575:13;58553:9;:36::i;:::-;58630:1;58617:10;;:14;;;;:::i;:::-;58604:10;:27;;;;58674:1;58660:11;;:15;;;;:::i;:::-;58646:11;:29;;;;58447:3;;;;;:::i;:::-;;;;58413:274;;;;57903:791;57848:846;:::o;49098:256::-;49195:7;49231:23;49248:5;49231:16;:23::i;:::-;49223:5;:31;49215:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;49320:12;:19;49333:5;49320:19;;;;;;;;;;;;;;;:26;49340:5;49320:26;;;;;;;;;;;;49313:33;;49098:256;;;;:::o;60420:165::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60479:22:::1;60504:21;60479:46;;60544:7;:5;:7::i;:::-;60536:25;;:41;60562:14;60536:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;60468:117;60420:165::o:0;59513:104::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59601:8:::1;59588:10;:21;;;;;;;;;;;;:::i;:::-;;59513:104:::0;:::o;55278:45::-;;;;;;;;;;;;;;;;;:::o;56091:88::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56161:10:::1;;;;;;;;;;;56160:11;56147:10;;:24;;;;;;;;;;;;;;;;;;56091:88::o:0;56620:1220::-;56728:12;;;;;;;;;;;56720:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;56820:10;;;;;;;;;;;56819:11;56811:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;56918:13;;56906:8;:25;;56898:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;57055:13;;57043:8;57018:10;:22;57029:10;57018:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;:50;;57010:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;57145:40;57159:10;57171:13;57145;:40::i;:::-;57137:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;57273:16;;57261:8;57247:11;;:22;;;;:::i;:::-;:42;;57239:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;57383:9;57371:8;57354:14;;:25;;;;:::i;:::-;:38;;57346:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;57461:21;57498:9;57510:1;57498:13;;57493:340;57517:8;57513:1;:12;57493:340;;;57547:21;:9;:19;:21::i;:::-;57599:19;:9;:17;:19::i;:::-;57583:35;;57633:36;57643:10;57655:13;57633:9;:36::i;:::-;57734:1;57709:10;:22;57720:10;57709:22;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;57684:10;:22;57695:10;57684:22;;;;;;;;;;;;;;;:51;;;;57776:1;57763:10;;:14;;;;:::i;:::-;57750:10;:27;;;;57820:1;57806:11;;:15;;;;:::i;:::-;57792:11;:29;;;;57527:3;;;;;:::i;:::-;;;;57493:340;;;;56709:1131;56620:1220;;:::o;39003:185::-;39141:39;39158:4;39164:2;39168:7;39141:39;;;;;;;;;;;;:16;:39::i;:::-;39003:185;;;:::o;59849:293::-;59908:11;;;;;;;;;;;59900:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;59985:39;60004:10;60016:7;59985:18;:39::i;:::-;59977:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;60082:14;60088:7;60082:5;:14::i;:::-;60133:1;60120:10;;:14;;;;:::i;:::-;60107:10;:27;;;;59849:293;:::o;55534:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59625:105::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59712:10:::1;59693:16;:29;;;;59625:105:::0;:::o;55563:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55136:25::-;;;;:::o;49620:233::-;49695:7;49731:30;:28;:30::i;:::-;49723:5;:38;49715:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;49828:10;49839:5;49828:17;;;;;;;;:::i;:::-;;;;;;;;;;49821:24;;49620:233;;;:::o;56417:80::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56485:4:::1;56469:13;;:20;;;;;;;;;;;;;;;;;;56417:80::o:0;55894:87::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55963:10:::1;;;;;;;;;;;55962:11;55949:10;;:24;;;;;;;;;;;;;;;;;;55894:87::o:0;55332:31::-;;;;;;;;;;;;;:::o;35978:239::-;36050:7;36070:13;36086:7;:16;36094:7;36086:16;;;;;;;;;;;;;;;;;;;;;36070:32;;36138:1;36121:19;;:5;:19;;;;36113:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36204:5;36197:12;;;35978:239;;;:::o;35708:208::-;35780:7;35825:1;35808:19;;:5;:19;;;;35800:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35892:9;:16;35902:5;35892:16;;;;;;;;;;;;;;;;35885:23;;35708:208;;;:::o;11259:103::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11324:30:::1;11351:1;11324:18;:30::i;:::-;11259:103::o:0;55634:32::-;;;;;;;;;;;;;:::o;55370:30::-;;;;;;;;;;;;;:::o;10608:87::-;10654:7;10681:6;;;;;;;;;;;10674:13;;10608:87;:::o;55244:27::-;;;;:::o;36453:104::-;36509:13;36542:7;36535:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36453:104;:::o;58702:360::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58772:21:::1;58807:9:::0;58819:1:::1;58807:13;;58802:253;58827:8;58822:1;:13;58802:253;;58853:21;:9;:19;:21::i;:::-;58901:19;:9;:17;:19::i;:::-;58885:35;;58931:36;58941:10;58953:13;58931:9;:36::i;:::-;59004:1;58991:10;;:14;;;;:::i;:::-;58978:10;:27;;;;59044:1;59030:11;;:15;;;;:::i;:::-;59016:11;:29;;;;58837:3;;;;;:::i;:::-;;;;58802:253;;;;58763:299;58702:360:::0;:::o;38136:155::-;38231:52;38250:12;:10;:12::i;:::-;38264:8;38274;38231:18;:52::i;:::-;38136:155;;:::o;59738:103::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59825:8:::1;59810:12;:23;;;;59738:103:::0;:::o;56505:107::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56593:11:::1;56579;;:25;;;;;;;;;;;;;;;;;;56505:107:::0;:::o;55407:38::-;;;;:::o;55737:30::-;;;;;;;;;;;;;:::o;39259:328::-;39434:41;39453:12;:10;:12::i;:::-;39467:7;39434:18;:41::i;:::-;39426:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;39540:39;39554:4;39560:2;39564:7;39573:5;39540:13;:39::i;:::-;39259:328;;;;:::o;59070:435::-;59143:13;59177:16;59185:7;59177;:16::i;:::-;59169:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;59279:5;59262:22;;:13;;;;;;;;;;;:22;;;59258:72;;;59308:10;59301:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59258:72;59342:22;59367:10;:8;:10::i;:::-;59342:35;;59420:1;59401:8;59395:22;:26;:102;;;;;;;;;;;;;;;;;59448:8;59463:18;:7;:16;:18::i;:::-;59483:7;59431:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59395:102;59388:109;;;59070:435;;;;:::o;55168:26::-;;;;:::o;38362:164::-;38459:4;38483:18;:25;38502:5;38483:25;;;;;;;;;;;;;;;:35;38509:8;38483:35;;;;;;;;;;;;;;;;;;;;;;;;;38476:42;;38362:164;;;;:::o;11517:201::-;10839:12;:10;:12::i;:::-;10828:23;;:7;:5;:7::i;:::-;:23;;;10820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11626:1:::1;11606:22;;:8;:22;;;;11598:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11682:28;11701:8;11682:18;:28::i;:::-;11517:201:::0;:::o;35339:305::-;35441:4;35493:25;35478:40;;;:11;:40;;;;:105;;;;35550:33;35535:48;;;:11;:48;;;;35478:105;:158;;;;35600:36;35624:11;35600:23;:36::i;:::-;35478:158;35458:178;;35339:305;;;:::o;41097:127::-;41162:4;41214:1;41186:30;;:7;:16;41194:7;41186:16;;;;;;;;;;;;;;;;;;;;;:30;;;;41179:37;;41097:127;;;:::o;9332:98::-;9385:7;9412:10;9405:17;;9332:98;:::o;45079:174::-;45181:2;45154:15;:24;45170:7;45154:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45237:7;45233:2;45199:46;;45208:23;45223:7;45208:14;:23::i;:::-;45199:46;;;;;;;;;;;;45079:174;;:::o;41391:348::-;41484:4;41509:16;41517:7;41509;:16::i;:::-;41501:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41585:13;41601:23;41616:7;41601:14;:23::i;:::-;41585:39;;41654:5;41643:16;;:7;:16;;;:51;;;;41687:7;41663:31;;:20;41675:7;41663:11;:20::i;:::-;:31;;;41643:51;:87;;;;41698:32;41715:5;41722:7;41698:16;:32::i;:::-;41643:87;41635:96;;;41391:348;;;;:::o;44383:578::-;44542:4;44515:31;;:23;44530:7;44515:14;:23::i;:::-;:31;;;44507:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44625:1;44611:16;;:2;:16;;;;44603:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44681:39;44702:4;44708:2;44712:7;44681:20;:39::i;:::-;44785:29;44802:1;44806:7;44785:8;:29::i;:::-;44846:1;44827:9;:15;44837:4;44827:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44875:1;44858:9;:13;44868:2;44858:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44906:2;44887:7;:16;44895:7;44887:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44945:7;44941:2;44926:27;;44935:4;44926:27;;;;;;;;;;;;44383:578;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;42081:110::-;42157:26;42167:2;42171:7;42157:26;;;;;;;;;;;;:9;:26::i;:::-;42081:110;;:::o;60150:262::-;60251:4;60268:16;60314:13;60297:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;60287:42;;;;;;60268:61;;60347:57;60366:13;60381:12;;60395:8;60347:18;:57::i;:::-;60340:64;;;60150:262;;;;:::o;43686:360::-;43746:13;43762:23;43777:7;43762:14;:23::i;:::-;43746:39;;43798:48;43819:5;43834:1;43838:7;43798:20;:48::i;:::-;43887:29;43904:1;43908:7;43887:8;:29::i;:::-;43949:1;43929:9;:16;43939:5;43929:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;43968:7;:16;43976:7;43968:16;;;;;;;;;;;;43961:23;;;;;;;;;;;44030:7;44026:1;44002:36;;44011:5;44002:36;;;;;;;;;;;;43735:311;43686:360;:::o;11878:191::-;11952:16;11971:6;;;;;;;;;;;11952:25;;11997:8;11988:6;;:17;;;;;;;;;;;;;;;;;;12052:8;12021:40;;12042:8;12021:40;;;;;;;;;;;;11941:128;11878:191;:::o;45395:315::-;45550:8;45541:17;;:5;:17;;;;45533:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45637:8;45599:18;:25;45618:5;45599:25;;;;;;;;;;;;;;;:35;45625:8;45599:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45683:8;45661:41;;45676:5;45661:41;;;45693:8;45661:41;;;;;;:::i;:::-;;;;;;;;45395:315;;;:::o;40469:::-;40626:28;40636:4;40642:2;40646:7;40626:9;:28::i;:::-;40673:48;40696:4;40702:2;40706:7;40715:5;40673:22;:48::i;:::-;40665:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;40469:315;;;;:::o;56308:101::-;56360:13;56393:8;56386:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56308:101;:::o;6894:723::-;6950:13;7180:1;7171:5;:10;7167:53;;;7198:10;;;;;;;;;;;;;;;;;;;;;7167:53;7230:12;7245:5;7230:20;;7261:14;7286:78;7301:1;7293:4;:9;7286:78;;7319:8;;;;;:::i;:::-;;;;7350:2;7342:10;;;;;:::i;:::-;;;7286:78;;;7374:19;7406:6;7396:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7374:39;;7424:154;7440:1;7431:5;:10;7424:154;;7468:1;7458:11;;;;;:::i;:::-;;;7535:2;7527:5;:10;;;;:::i;:::-;7514:2;:24;;;;:::i;:::-;7501:39;;7484:6;7491;7484:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7564:2;7555:11;;;;;:::i;:::-;;;7424:154;;;7602:6;7588:21;;;;;6894:723;;;;:::o;27035:157::-;27120:4;27159:25;27144:40;;;:11;:40;;;;27137:47;;27035:157;;;:::o;50466:589::-;50610:45;50637:4;50643:2;50647:7;50610:26;:45::i;:::-;50688:1;50672:18;;:4;:18;;;50668:187;;;50707:40;50739:7;50707:31;:40::i;:::-;50668:187;;;50777:2;50769:10;;:4;:10;;;50765:90;;50796:47;50829:4;50835:7;50796:32;:47::i;:::-;50765:90;50668:187;50883:1;50869:16;;:2;:16;;;50865:183;;;50902:45;50939:7;50902:36;:45::i;:::-;50865:183;;;50975:4;50969:10;;:2;:10;;;50965:83;;50996:40;51024:2;51028:7;50996:27;:40::i;:::-;50965:83;50865:183;50466:589;;;:::o;42418:321::-;42548:18;42554:2;42558:7;42548:5;:18::i;:::-;42599:54;42630:1;42634:2;42638:7;42647:5;42599:22;:54::i;:::-;42577:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;42418:321;;;:::o;5269:190::-;5394:4;5447;5418:25;5431:5;5438:4;5418:12;:25::i;:::-;:33;5411:40;;5269:190;;;;;:::o;46275:799::-;46430:4;46451:15;:2;:13;;;:15::i;:::-;46447:620;;;46503:2;46487:36;;;46524:12;:10;:12::i;:::-;46538:4;46544:7;46553:5;46487:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46483:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46746:1;46729:6;:13;:18;46725:272;;;46772:60;;;;;;;;;;:::i;:::-;;;;;;;;46725:272;46947:6;46941:13;46932:6;46928:2;46924:15;46917:38;46483:529;46620:41;;;46610:51;;;:6;:51;;;;46603:58;;;;;46447:620;47051:4;47044:11;;46275:799;;;;;;;:::o;47646:126::-;;;;:::o;51778:164::-;51882:10;:17;;;;51855:15;:24;51871:7;51855:24;;;;;;;;;;;:44;;;;51910:10;51926:7;51910:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51778:164;:::o;52569:988::-;52835:22;52885:1;52860:22;52877:4;52860:16;:22::i;:::-;:26;;;;:::i;:::-;52835:51;;52897:18;52918:17;:26;52936:7;52918:26;;;;;;;;;;;;52897:47;;53065:14;53051:10;:28;53047:328;;53096:19;53118:12;:18;53131:4;53118:18;;;;;;;;;;;;;;;:34;53137:14;53118:34;;;;;;;;;;;;53096:56;;53202:11;53169:12;:18;53182:4;53169:18;;;;;;;;;;;;;;;:30;53188:10;53169:30;;;;;;;;;;;:44;;;;53319:10;53286:17;:30;53304:11;53286:30;;;;;;;;;;;:43;;;;53081:294;53047:328;53471:17;:26;53489:7;53471:26;;;;;;;;;;;53464:33;;;53515:12;:18;53528:4;53515:18;;;;;;;;;;;;;;;:34;53534:14;53515:34;;;;;;;;;;;53508:41;;;52650:907;;52569:988;;:::o;53852:1079::-;54105:22;54150:1;54130:10;:17;;;;:21;;;;:::i;:::-;54105:46;;54162:18;54183:15;:24;54199:7;54183:24;;;;;;;;;;;;54162:45;;54534:19;54556:10;54567:14;54556:26;;;;;;;;:::i;:::-;;;;;;;;;;54534:48;;54620:11;54595:10;54606;54595:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;54731:10;54700:15;:28;54716:11;54700:28;;;;;;;;;;;:41;;;;54872:15;:24;54888:7;54872:24;;;;;;;;;;;54865:31;;;54907:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53923:1008;;;53852:1079;:::o;51356:221::-;51441:14;51458:20;51475:2;51458:16;:20::i;:::-;51441:37;;51516:7;51489:12;:16;51502:2;51489:16;;;;;;;;;;;;;;;:24;51506:6;51489:24;;;;;;;;;;;:34;;;;51563:6;51534:17;:26;51552:7;51534:26;;;;;;;;;;;:35;;;;51430:147;51356:221;;:::o;43075:382::-;43169:1;43155:16;;:2;:16;;;;43147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43228:16;43236:7;43228;:16::i;:::-;43227:17;43219:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43290:45;43319:1;43323:2;43327:7;43290:20;:45::i;:::-;43365:1;43348:9;:13;43358:2;43348:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;43396:2;43377:7;:16;43385:7;43377:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43441:7;43437:2;43416:33;;43433:1;43416:33;;;;;;;;;;;;43075:382;;:::o;5821:701::-;5904:7;5924:20;5947:4;5924:27;;5967:9;5962:523;5986:5;:12;5982:1;:16;5962:523;;;6020:20;6043:5;6049:1;6043:8;;;;;;;;:::i;:::-;;;;;;;;6020:31;;6086:12;6070;:28;6066:408;;6240:12;6254;6223:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6213:55;;;;;;6198:70;;6066:408;;;6430:12;6444;6413:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6403:55;;;;;;6388:70;;6066:408;6005:480;6000:3;;;;;:::i;:::-;;;;5962:523;;;;6502:12;6495:19;;;5821:701;;;;:::o;12896:387::-;12956:4;13164:12;13231:7;13219:20;13211:28;;13274:1;13267:4;:8;13260:15;;;12896:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;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:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:553::-;3127:8;3137:6;3187:3;3180:4;3172:6;3168:17;3164:27;3154:122;;3195:79;;:::i;:::-;3154:122;3308:6;3295:20;3285:30;;3338:18;3330:6;3327:30;3324:117;;;3360:79;;:::i;:::-;3324:117;3474:4;3466:6;3462:17;3450:29;;3528:3;3520:4;3512:6;3508:17;3498:8;3494:32;3491:41;3488:128;;;3535:79;;:::i;:::-;3488:128;3069:553;;;;;:::o;3642:340::-;3698:5;3747:3;3740:4;3732:6;3728:17;3724:27;3714:122;;3755:79;;:::i;:::-;3714:122;3872:6;3859:20;3897:79;3972:3;3964:6;3957:4;3949:6;3945:17;3897:79;:::i;:::-;3888:88;;3704:278;3642:340;;;;:::o;3988:139::-;4034:5;4072:6;4059:20;4050:29;;4088:33;4115:5;4088:33;:::i;:::-;3988:139;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:474::-;4536:6;4544;4593:2;4581:9;4572:7;4568:23;4564:32;4561:119;;;4599:79;;:::i;:::-;4561:119;4719:1;4744:53;4789:7;4780:6;4769:9;4765:22;4744:53;:::i;:::-;4734:63;;4690:117;4846:2;4872:53;4917:7;4908:6;4897:9;4893:22;4872:53;:::i;:::-;4862:63;;4817:118;4468:474;;;;;:::o;4948:619::-;5025:6;5033;5041;5090:2;5078:9;5069:7;5065:23;5061:32;5058:119;;;5096:79;;:::i;:::-;5058:119;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;5343:2;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5314:118;5471:2;5497:53;5542:7;5533:6;5522:9;5518:22;5497:53;:::i;:::-;5487:63;;5442:118;4948:619;;;;;:::o;5573:943::-;5668:6;5676;5684;5692;5741:3;5729:9;5720:7;5716:23;5712:33;5709:120;;;5748:79;;:::i;:::-;5709:120;5868:1;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5839:117;5995:2;6021:53;6066:7;6057:6;6046:9;6042:22;6021:53;:::i;:::-;6011:63;;5966:118;6123:2;6149:53;6194:7;6185:6;6174:9;6170:22;6149:53;:::i;:::-;6139:63;;6094:118;6279:2;6268:9;6264:18;6251:32;6310:18;6302:6;6299:30;6296:117;;;6332:79;;:::i;:::-;6296:117;6437:62;6491:7;6482:6;6471:9;6467:22;6437:62;:::i;:::-;6427:72;;6222:287;5573:943;;;;;;;:::o;6522:468::-;6587:6;6595;6644:2;6632:9;6623:7;6619:23;6615:32;6612:119;;;6650:79;;:::i;:::-;6612:119;6770:1;6795:53;6840:7;6831:6;6820:9;6816:22;6795:53;:::i;:::-;6785:63;;6741:117;6897:2;6923:50;6965:7;6956:6;6945:9;6941:22;6923:50;:::i;:::-;6913:60;;6868:115;6522:468;;;;;:::o;6996:474::-;7064:6;7072;7121:2;7109:9;7100:7;7096:23;7092:32;7089:119;;;7127:79;;:::i;:::-;7089:119;7247:1;7272:53;7317:7;7308:6;7297:9;7293:22;7272:53;:::i;:::-;7262:63;;7218:117;7374:2;7400:53;7445:7;7436:6;7425:9;7421:22;7400:53;:::i;:::-;7390:63;;7345:118;6996:474;;;;;:::o;7476:323::-;7532:6;7581:2;7569:9;7560:7;7556:23;7552:32;7549:119;;;7587:79;;:::i;:::-;7549:119;7707:1;7732:50;7774:7;7765:6;7754:9;7750:22;7732:50;:::i;:::-;7722:60;;7678:114;7476:323;;;;:::o;7805:329::-;7864:6;7913:2;7901:9;7892:7;7888:23;7884:32;7881:119;;;7919:79;;:::i;:::-;7881:119;8039:1;8064:53;8109:7;8100:6;8089:9;8085:22;8064:53;:::i;:::-;8054:63;;8010:117;7805:329;;;;:::o;8140:327::-;8198:6;8247:2;8235:9;8226:7;8222:23;8218:32;8215:119;;;8253:79;;:::i;:::-;8215:119;8373:1;8398:52;8442:7;8433:6;8422:9;8418:22;8398:52;:::i;:::-;8388:62;;8344:116;8140:327;;;;:::o;8473:349::-;8542:6;8591:2;8579:9;8570:7;8566:23;8562:32;8559:119;;;8597:79;;:::i;:::-;8559:119;8717:1;8742:63;8797:7;8788:6;8777:9;8773:22;8742:63;:::i;:::-;8732:73;;8688:127;8473:349;;;;:::o;8828:529::-;8899:6;8907;8956:2;8944:9;8935:7;8931:23;8927:32;8924:119;;;8962:79;;:::i;:::-;8924:119;9110:1;9099:9;9095:17;9082:31;9140:18;9132:6;9129:30;9126:117;;;9162:79;;:::i;:::-;9126:117;9275:65;9332:7;9323:6;9312:9;9308:22;9275:65;:::i;:::-;9257:83;;;;9053:297;8828:529;;;;;:::o;9363:509::-;9432:6;9481:2;9469:9;9460:7;9456:23;9452:32;9449:119;;;9487:79;;:::i;:::-;9449:119;9635:1;9624:9;9620:17;9607:31;9665:18;9657:6;9654:30;9651:117;;;9687:79;;:::i;:::-;9651:117;9792:63;9847:7;9838:6;9827:9;9823:22;9792:63;:::i;:::-;9782:73;;9578:287;9363:509;;;;:::o;9878:329::-;9937:6;9986:2;9974:9;9965:7;9961:23;9957:32;9954:119;;;9992:79;;:::i;:::-;9954:119;10112:1;10137:53;10182:7;10173:6;10162:9;10158:22;10137:53;:::i;:::-;10127:63;;10083:117;9878:329;;;;:::o;10213:684::-;10306:6;10314;10363:2;10351:9;10342:7;10338:23;10334:32;10331:119;;;10369:79;;:::i;:::-;10331:119;10489:1;10514:53;10559:7;10550:6;10539:9;10535:22;10514:53;:::i;:::-;10504:63;;10460:117;10644:2;10633:9;10629:18;10616:32;10675:18;10667:6;10664:30;10661:117;;;10697:79;;:::i;:::-;10661:117;10802:78;10872:7;10863:6;10852:9;10848:22;10802:78;:::i;:::-;10792:88;;10587:303;10213:684;;;;;:::o;10903:118::-;10990:24;11008:5;10990:24;:::i;:::-;10985:3;10978:37;10903:118;;:::o;11027:157::-;11132:45;11152:24;11170:5;11152:24;:::i;:::-;11132:45;:::i;:::-;11127:3;11120:58;11027:157;;:::o;11190:109::-;11271:21;11286:5;11271:21;:::i;:::-;11266:3;11259:34;11190:109;;:::o;11305:118::-;11392:24;11410:5;11392:24;:::i;:::-;11387:3;11380:37;11305:118;;:::o;11429:157::-;11534:45;11554:24;11572:5;11554:24;:::i;:::-;11534:45;:::i;:::-;11529:3;11522:58;11429:157;;:::o;11592:360::-;11678:3;11706:38;11738:5;11706:38;:::i;:::-;11760:70;11823:6;11818:3;11760:70;:::i;:::-;11753:77;;11839:52;11884:6;11879:3;11872:4;11865:5;11861:16;11839:52;:::i;:::-;11916:29;11938:6;11916:29;:::i;:::-;11911:3;11907:39;11900:46;;11682:270;11592:360;;;;:::o;11958:364::-;12046:3;12074:39;12107:5;12074:39;:::i;:::-;12129:71;12193:6;12188:3;12129:71;:::i;:::-;12122:78;;12209:52;12254:6;12249:3;12242:4;12235:5;12231:16;12209:52;:::i;:::-;12286:29;12308:6;12286:29;:::i;:::-;12281:3;12277:39;12270:46;;12050:272;11958:364;;;;:::o;12328:377::-;12434:3;12462:39;12495:5;12462:39;:::i;:::-;12517:89;12599:6;12594:3;12517:89;:::i;:::-;12510:96;;12615:52;12660:6;12655:3;12648:4;12641:5;12637:16;12615:52;:::i;:::-;12692:6;12687:3;12683:16;12676:23;;12438:267;12328:377;;;;:::o;12735:845::-;12838:3;12875:5;12869:12;12904:36;12930:9;12904:36;:::i;:::-;12956:89;13038:6;13033:3;12956:89;:::i;:::-;12949:96;;13076:1;13065:9;13061:17;13092:1;13087:137;;;;13238:1;13233:341;;;;13054:520;;13087:137;13171:4;13167:9;13156;13152:25;13147:3;13140:38;13207:6;13202:3;13198:16;13191:23;;13087:137;;13233:341;13300:38;13332:5;13300:38;:::i;:::-;13360:1;13374:154;13388:6;13385:1;13382:13;13374:154;;;13462:7;13456:14;13452:1;13447:3;13443:11;13436:35;13512:1;13503:7;13499:15;13488:26;;13410:4;13407:1;13403:12;13398:17;;13374:154;;;13557:6;13552:3;13548:16;13541:23;;13240:334;;13054:520;;12842:738;;12735:845;;;;:::o;13586:366::-;13728:3;13749:67;13813:2;13808:3;13749:67;:::i;:::-;13742:74;;13825:93;13914:3;13825:93;:::i;:::-;13943:2;13938:3;13934:12;13927:19;;13586:366;;;:::o;13958:::-;14100:3;14121:67;14185:2;14180:3;14121:67;:::i;:::-;14114:74;;14197:93;14286:3;14197:93;:::i;:::-;14315:2;14310:3;14306:12;14299:19;;13958:366;;;:::o;14330:::-;14472:3;14493:67;14557:2;14552:3;14493:67;:::i;:::-;14486:74;;14569:93;14658:3;14569:93;:::i;:::-;14687:2;14682:3;14678:12;14671:19;;14330:366;;;:::o;14702:::-;14844:3;14865:67;14929:2;14924:3;14865:67;:::i;:::-;14858:74;;14941:93;15030:3;14941:93;:::i;:::-;15059:2;15054:3;15050:12;15043:19;;14702:366;;;:::o;15074:::-;15216:3;15237:67;15301:2;15296:3;15237:67;:::i;:::-;15230:74;;15313:93;15402:3;15313:93;:::i;:::-;15431:2;15426:3;15422:12;15415:19;;15074:366;;;:::o;15446:::-;15588:3;15609:67;15673:2;15668:3;15609:67;:::i;:::-;15602:74;;15685:93;15774:3;15685:93;:::i;:::-;15803:2;15798:3;15794:12;15787:19;;15446:366;;;:::o;15818:::-;15960:3;15981:67;16045:2;16040:3;15981:67;:::i;:::-;15974:74;;16057:93;16146:3;16057:93;:::i;:::-;16175:2;16170:3;16166:12;16159:19;;15818:366;;;:::o;16190:::-;16332:3;16353:67;16417:2;16412:3;16353:67;:::i;:::-;16346:74;;16429:93;16518:3;16429:93;:::i;:::-;16547:2;16542:3;16538:12;16531:19;;16190:366;;;:::o;16562:::-;16704:3;16725:67;16789:2;16784:3;16725:67;:::i;:::-;16718:74;;16801:93;16890:3;16801:93;:::i;:::-;16919:2;16914:3;16910:12;16903:19;;16562:366;;;:::o;16934:::-;17076:3;17097:67;17161:2;17156:3;17097:67;:::i;:::-;17090:74;;17173:93;17262:3;17173:93;:::i;:::-;17291:2;17286:3;17282:12;17275:19;;16934:366;;;:::o;17306:::-;17448:3;17469:67;17533:2;17528:3;17469:67;:::i;:::-;17462:74;;17545:93;17634:3;17545:93;:::i;:::-;17663:2;17658:3;17654:12;17647:19;;17306:366;;;:::o;17678:::-;17820:3;17841:67;17905:2;17900:3;17841:67;:::i;:::-;17834:74;;17917:93;18006:3;17917:93;:::i;:::-;18035:2;18030:3;18026:12;18019:19;;17678:366;;;:::o;18050:::-;18192:3;18213:67;18277:2;18272:3;18213:67;:::i;:::-;18206:74;;18289:93;18378:3;18289:93;:::i;:::-;18407:2;18402:3;18398:12;18391:19;;18050:366;;;:::o;18422:::-;18564:3;18585:67;18649:2;18644:3;18585:67;:::i;:::-;18578:74;;18661:93;18750:3;18661:93;:::i;:::-;18779:2;18774:3;18770:12;18763:19;;18422:366;;;:::o;18794:::-;18936:3;18957:67;19021:2;19016:3;18957:67;:::i;:::-;18950:74;;19033:93;19122:3;19033:93;:::i;:::-;19151:2;19146:3;19142:12;19135:19;;18794:366;;;:::o;19166:::-;19308:3;19329:67;19393:2;19388:3;19329:67;:::i;:::-;19322:74;;19405:93;19494:3;19405:93;:::i;:::-;19523:2;19518:3;19514:12;19507:19;;19166:366;;;:::o;19538:::-;19680:3;19701:67;19765:2;19760:3;19701:67;:::i;:::-;19694:74;;19777:93;19866:3;19777:93;:::i;:::-;19895:2;19890:3;19886:12;19879:19;;19538:366;;;:::o;19910:::-;20052:3;20073:67;20137:2;20132:3;20073:67;:::i;:::-;20066:74;;20149:93;20238:3;20149:93;:::i;:::-;20267:2;20262:3;20258:12;20251:19;;19910:366;;;:::o;20282:::-;20424:3;20445:67;20509:2;20504:3;20445:67;:::i;:::-;20438:74;;20521:93;20610:3;20521:93;:::i;:::-;20639:2;20634:3;20630:12;20623:19;;20282:366;;;:::o;20654:::-;20796:3;20817:67;20881:2;20876:3;20817:67;:::i;:::-;20810:74;;20893:93;20982:3;20893:93;:::i;:::-;21011:2;21006:3;21002:12;20995:19;;20654:366;;;:::o;21026:::-;21168:3;21189:67;21253:2;21248:3;21189:67;:::i;:::-;21182:74;;21265:93;21354:3;21265:93;:::i;:::-;21383:2;21378:3;21374:12;21367:19;;21026:366;;;:::o;21398:::-;21540:3;21561:67;21625:2;21620:3;21561:67;:::i;:::-;21554:74;;21637:93;21726:3;21637:93;:::i;:::-;21755:2;21750:3;21746:12;21739:19;;21398:366;;;:::o;21770:::-;21912:3;21933:67;21997:2;21992:3;21933:67;:::i;:::-;21926:74;;22009:93;22098:3;22009:93;:::i;:::-;22127:2;22122:3;22118:12;22111:19;;21770:366;;;:::o;22142:::-;22284:3;22305:67;22369:2;22364:3;22305:67;:::i;:::-;22298:74;;22381:93;22470:3;22381:93;:::i;:::-;22499:2;22494:3;22490:12;22483:19;;22142:366;;;:::o;22514:::-;22656:3;22677:67;22741:2;22736:3;22677:67;:::i;:::-;22670:74;;22753:93;22842:3;22753:93;:::i;:::-;22871:2;22866:3;22862:12;22855:19;;22514:366;;;:::o;22886:::-;23028:3;23049:67;23113:2;23108:3;23049:67;:::i;:::-;23042:74;;23125:93;23214:3;23125:93;:::i;:::-;23243:2;23238:3;23234:12;23227:19;;22886:366;;;:::o;23258:::-;23400:3;23421:67;23485:2;23480:3;23421:67;:::i;:::-;23414:74;;23497:93;23586:3;23497:93;:::i;:::-;23615:2;23610:3;23606:12;23599:19;;23258:366;;;:::o;23630:::-;23772:3;23793:67;23857:2;23852:3;23793:67;:::i;:::-;23786:74;;23869:93;23958:3;23869:93;:::i;:::-;23987:2;23982:3;23978:12;23971:19;;23630:366;;;:::o;24002:::-;24144:3;24165:67;24229:2;24224:3;24165:67;:::i;:::-;24158:74;;24241:93;24330:3;24241:93;:::i;:::-;24359:2;24354:3;24350:12;24343:19;;24002:366;;;:::o;24374:400::-;24534:3;24555:84;24637:1;24632:3;24555:84;:::i;:::-;24548:91;;24648:93;24737:3;24648:93;:::i;:::-;24766:1;24761:3;24757:11;24750:18;;24374:400;;;:::o;24780:366::-;24922:3;24943:67;25007:2;25002:3;24943:67;:::i;:::-;24936:74;;25019:93;25108:3;25019:93;:::i;:::-;25137:2;25132:3;25128:12;25121:19;;24780:366;;;:::o;25152:118::-;25239:24;25257:5;25239:24;:::i;:::-;25234:3;25227:37;25152:118;;:::o;25276:256::-;25388:3;25403:75;25474:3;25465:6;25403:75;:::i;:::-;25503:2;25498:3;25494:12;25487:19;;25523:3;25516:10;;25276:256;;;;:::o;25538:397::-;25678:3;25693:75;25764:3;25755:6;25693:75;:::i;:::-;25793:2;25788:3;25784:12;25777:19;;25806:75;25877:3;25868:6;25806:75;:::i;:::-;25906:2;25901:3;25897:12;25890:19;;25926:3;25919:10;;25538:397;;;;;:::o;25941:855::-;26267:3;26289:95;26380:3;26371:6;26289:95;:::i;:::-;26282:102;;26401:148;26545:3;26401:148;:::i;:::-;26394:155;;26566:95;26657:3;26648:6;26566:95;:::i;:::-;26559:102;;26678:92;26766:3;26757:6;26678:92;:::i;:::-;26671:99;;26787:3;26780:10;;25941:855;;;;;;:::o;26802:222::-;26895:4;26933:2;26922:9;26918:18;26910:26;;26946:71;27014:1;27003:9;26999:17;26990:6;26946:71;:::i;:::-;26802:222;;;;:::o;27030:640::-;27225:4;27263:3;27252:9;27248:19;27240:27;;27277:71;27345:1;27334:9;27330:17;27321:6;27277:71;:::i;:::-;27358:72;27426:2;27415:9;27411:18;27402:6;27358:72;:::i;:::-;27440;27508:2;27497:9;27493:18;27484:6;27440:72;:::i;:::-;27559:9;27553:4;27549:20;27544:2;27533:9;27529:18;27522:48;27587:76;27658:4;27649:6;27587:76;:::i;:::-;27579:84;;27030:640;;;;;;;:::o;27676:210::-;27763:4;27801:2;27790:9;27786:18;27778:26;;27814:65;27876:1;27865:9;27861:17;27852:6;27814:65;:::i;:::-;27676:210;;;;:::o;27892:222::-;27985:4;28023:2;28012:9;28008:18;28000:26;;28036:71;28104:1;28093:9;28089:17;28080:6;28036:71;:::i;:::-;27892:222;;;;:::o;28120:313::-;28233:4;28271:2;28260:9;28256:18;28248:26;;28320:9;28314:4;28310:20;28306:1;28295:9;28291:17;28284:47;28348:78;28421:4;28412:6;28348:78;:::i;:::-;28340:86;;28120:313;;;;:::o;28439:419::-;28605:4;28643:2;28632:9;28628:18;28620:26;;28692:9;28686:4;28682:20;28678:1;28667:9;28663:17;28656:47;28720:131;28846:4;28720:131;:::i;:::-;28712:139;;28439:419;;;:::o;28864:::-;29030:4;29068:2;29057:9;29053:18;29045:26;;29117:9;29111:4;29107:20;29103:1;29092:9;29088:17;29081:47;29145:131;29271:4;29145:131;:::i;:::-;29137:139;;28864:419;;;:::o;29289:::-;29455:4;29493:2;29482:9;29478:18;29470:26;;29542:9;29536:4;29532:20;29528:1;29517:9;29513:17;29506:47;29570:131;29696:4;29570:131;:::i;:::-;29562:139;;29289:419;;;:::o;29714:::-;29880:4;29918:2;29907:9;29903:18;29895:26;;29967:9;29961:4;29957:20;29953:1;29942:9;29938:17;29931:47;29995:131;30121:4;29995:131;:::i;:::-;29987:139;;29714:419;;;:::o;30139:::-;30305:4;30343:2;30332:9;30328:18;30320:26;;30392:9;30386:4;30382:20;30378:1;30367:9;30363:17;30356:47;30420:131;30546:4;30420:131;:::i;:::-;30412:139;;30139:419;;;:::o;30564:::-;30730:4;30768:2;30757:9;30753:18;30745:26;;30817:9;30811:4;30807:20;30803:1;30792:9;30788:17;30781:47;30845:131;30971:4;30845:131;:::i;:::-;30837:139;;30564:419;;;:::o;30989:::-;31155:4;31193:2;31182:9;31178:18;31170:26;;31242:9;31236:4;31232:20;31228:1;31217:9;31213:17;31206:47;31270:131;31396:4;31270:131;:::i;:::-;31262:139;;30989:419;;;:::o;31414:::-;31580:4;31618:2;31607:9;31603:18;31595:26;;31667:9;31661:4;31657:20;31653:1;31642:9;31638:17;31631:47;31695:131;31821:4;31695:131;:::i;:::-;31687:139;;31414:419;;;:::o;31839:::-;32005:4;32043:2;32032:9;32028:18;32020:26;;32092:9;32086:4;32082:20;32078:1;32067:9;32063:17;32056:47;32120:131;32246:4;32120:131;:::i;:::-;32112:139;;31839:419;;;:::o;32264:::-;32430:4;32468:2;32457:9;32453:18;32445:26;;32517:9;32511:4;32507:20;32503:1;32492:9;32488:17;32481:47;32545:131;32671:4;32545:131;:::i;:::-;32537:139;;32264:419;;;:::o;32689:::-;32855:4;32893:2;32882:9;32878:18;32870:26;;32942:9;32936:4;32932:20;32928:1;32917:9;32913:17;32906:47;32970:131;33096:4;32970:131;:::i;:::-;32962:139;;32689:419;;;:::o;33114:::-;33280:4;33318:2;33307:9;33303:18;33295:26;;33367:9;33361:4;33357:20;33353:1;33342:9;33338:17;33331:47;33395:131;33521:4;33395:131;:::i;:::-;33387:139;;33114:419;;;:::o;33539:::-;33705:4;33743:2;33732:9;33728:18;33720:26;;33792:9;33786:4;33782:20;33778:1;33767:9;33763:17;33756:47;33820:131;33946:4;33820:131;:::i;:::-;33812:139;;33539:419;;;:::o;33964:::-;34130:4;34168:2;34157:9;34153:18;34145:26;;34217:9;34211:4;34207:20;34203:1;34192:9;34188:17;34181:47;34245:131;34371:4;34245:131;:::i;:::-;34237:139;;33964:419;;;:::o;34389:::-;34555:4;34593:2;34582:9;34578:18;34570:26;;34642:9;34636:4;34632:20;34628:1;34617:9;34613:17;34606:47;34670:131;34796:4;34670:131;:::i;:::-;34662:139;;34389:419;;;:::o;34814:::-;34980:4;35018:2;35007:9;35003:18;34995:26;;35067:9;35061:4;35057:20;35053:1;35042:9;35038:17;35031:47;35095:131;35221:4;35095:131;:::i;:::-;35087:139;;34814:419;;;:::o;35239:::-;35405:4;35443:2;35432:9;35428:18;35420:26;;35492:9;35486:4;35482:20;35478:1;35467:9;35463:17;35456:47;35520:131;35646:4;35520:131;:::i;:::-;35512:139;;35239:419;;;:::o;35664:::-;35830:4;35868:2;35857:9;35853:18;35845:26;;35917:9;35911:4;35907:20;35903:1;35892:9;35888:17;35881:47;35945:131;36071:4;35945:131;:::i;:::-;35937:139;;35664:419;;;:::o;36089:::-;36255:4;36293:2;36282:9;36278:18;36270:26;;36342:9;36336:4;36332:20;36328:1;36317:9;36313:17;36306:47;36370:131;36496:4;36370:131;:::i;:::-;36362:139;;36089:419;;;:::o;36514:::-;36680:4;36718:2;36707:9;36703:18;36695:26;;36767:9;36761:4;36757:20;36753:1;36742:9;36738:17;36731:47;36795:131;36921:4;36795:131;:::i;:::-;36787:139;;36514:419;;;:::o;36939:::-;37105:4;37143:2;37132:9;37128:18;37120:26;;37192:9;37186:4;37182:20;37178:1;37167:9;37163:17;37156:47;37220:131;37346:4;37220:131;:::i;:::-;37212:139;;36939:419;;;:::o;37364:::-;37530:4;37568:2;37557:9;37553:18;37545:26;;37617:9;37611:4;37607:20;37603:1;37592:9;37588:17;37581:47;37645:131;37771:4;37645:131;:::i;:::-;37637:139;;37364:419;;;:::o;37789:::-;37955:4;37993:2;37982:9;37978:18;37970:26;;38042:9;38036:4;38032:20;38028:1;38017:9;38013:17;38006:47;38070:131;38196:4;38070:131;:::i;:::-;38062:139;;37789:419;;;:::o;38214:::-;38380:4;38418:2;38407:9;38403:18;38395:26;;38467:9;38461:4;38457:20;38453:1;38442:9;38438:17;38431:47;38495:131;38621:4;38495:131;:::i;:::-;38487:139;;38214:419;;;:::o;38639:::-;38805:4;38843:2;38832:9;38828:18;38820:26;;38892:9;38886:4;38882:20;38878:1;38867:9;38863:17;38856:47;38920:131;39046:4;38920:131;:::i;:::-;38912:139;;38639:419;;;:::o;39064:::-;39230:4;39268:2;39257:9;39253:18;39245:26;;39317:9;39311:4;39307:20;39303:1;39292:9;39288:17;39281:47;39345:131;39471:4;39345:131;:::i;:::-;39337:139;;39064:419;;;:::o;39489:::-;39655:4;39693:2;39682:9;39678:18;39670:26;;39742:9;39736:4;39732:20;39728:1;39717:9;39713:17;39706:47;39770:131;39896:4;39770:131;:::i;:::-;39762:139;;39489:419;;;:::o;39914:::-;40080:4;40118:2;40107:9;40103:18;40095:26;;40167:9;40161:4;40157:20;40153:1;40142:9;40138:17;40131:47;40195:131;40321:4;40195:131;:::i;:::-;40187:139;;39914:419;;;:::o;40339:::-;40505:4;40543:2;40532:9;40528:18;40520:26;;40592:9;40586:4;40582:20;40578:1;40567:9;40563:17;40556:47;40620:131;40746:4;40620:131;:::i;:::-;40612:139;;40339:419;;;:::o;40764:::-;40930:4;40968:2;40957:9;40953:18;40945:26;;41017:9;41011:4;41007:20;41003:1;40992:9;40988:17;40981:47;41045:131;41171:4;41045:131;:::i;:::-;41037:139;;40764:419;;;:::o;41189:222::-;41282:4;41320:2;41309:9;41305:18;41297:26;;41333:71;41401:1;41390:9;41386:17;41377:6;41333:71;:::i;:::-;41189:222;;;;:::o;41417:129::-;41451:6;41478:20;;:::i;:::-;41468:30;;41507:33;41535:4;41527:6;41507:33;:::i;:::-;41417:129;;;:::o;41552:75::-;41585:6;41618:2;41612:9;41602:19;;41552:75;:::o;41633:311::-;41710:4;41800:18;41792:6;41789:30;41786:56;;;41822:18;;:::i;:::-;41786:56;41872:4;41864:6;41860:17;41852:25;;41932:4;41926;41922:15;41914:23;;41633:311;;;:::o;41950:307::-;42011:4;42101:18;42093:6;42090:30;42087:56;;;42123:18;;:::i;:::-;42087:56;42161:29;42183:6;42161:29;:::i;:::-;42153:37;;42245:4;42239;42235:15;42227:23;;41950:307;;;:::o;42263:308::-;42325:4;42415:18;42407:6;42404:30;42401:56;;;42437:18;;:::i;:::-;42401:56;42475:29;42497:6;42475:29;:::i;:::-;42467:37;;42559:4;42553;42549:15;42541:23;;42263:308;;;:::o;42577:141::-;42626:4;42649:3;42641:11;;42672:3;42669:1;42662:14;42706:4;42703:1;42693:18;42685:26;;42577:141;;;:::o;42724:98::-;42775:6;42809:5;42803:12;42793:22;;42724:98;;;:::o;42828:99::-;42880:6;42914:5;42908:12;42898:22;;42828:99;;;:::o;42933:168::-;43016:11;43050:6;43045:3;43038:19;43090:4;43085:3;43081:14;43066:29;;42933:168;;;;:::o;43107:169::-;43191:11;43225:6;43220:3;43213:19;43265:4;43260:3;43256:14;43241:29;;43107:169;;;;:::o;43282:148::-;43384:11;43421:3;43406:18;;43282:148;;;;:::o;43436:305::-;43476:3;43495:20;43513:1;43495:20;:::i;:::-;43490:25;;43529:20;43547:1;43529:20;:::i;:::-;43524:25;;43683:1;43615:66;43611:74;43608:1;43605:81;43602:107;;;43689:18;;:::i;:::-;43602:107;43733:1;43730;43726:9;43719:16;;43436:305;;;;:::o;43747:185::-;43787:1;43804:20;43822:1;43804:20;:::i;:::-;43799:25;;43838:20;43856:1;43838:20;:::i;:::-;43833:25;;43877:1;43867:35;;43882:18;;:::i;:::-;43867:35;43924:1;43921;43917:9;43912:14;;43747:185;;;;:::o;43938:348::-;43978:7;44001:20;44019:1;44001:20;:::i;:::-;43996:25;;44035:20;44053:1;44035:20;:::i;:::-;44030:25;;44223:1;44155:66;44151:74;44148:1;44145:81;44140:1;44133:9;44126:17;44122:105;44119:131;;;44230:18;;:::i;:::-;44119:131;44278:1;44275;44271:9;44260:20;;43938:348;;;;:::o;44292:191::-;44332:4;44352:20;44370:1;44352:20;:::i;:::-;44347:25;;44386:20;44404:1;44386:20;:::i;:::-;44381:25;;44425:1;44422;44419:8;44416:34;;;44430:18;;:::i;:::-;44416:34;44475:1;44472;44468:9;44460:17;;44292:191;;;;:::o;44489:96::-;44526:7;44555:24;44573:5;44555:24;:::i;:::-;44544:35;;44489:96;;;:::o;44591:90::-;44625:7;44668:5;44661:13;44654:21;44643:32;;44591:90;;;:::o;44687:77::-;44724:7;44753:5;44742:16;;44687:77;;;:::o;44770:149::-;44806:7;44846:66;44839:5;44835:78;44824:89;;44770:149;;;:::o;44925:126::-;44962:7;45002:42;44995:5;44991:54;44980:65;;44925:126;;;:::o;45057:77::-;45094:7;45123:5;45112:16;;45057:77;;;:::o;45140:154::-;45224:6;45219:3;45214;45201:30;45286:1;45277:6;45272:3;45268:16;45261:27;45140:154;;;:::o;45300:307::-;45368:1;45378:113;45392:6;45389:1;45386:13;45378:113;;;45477:1;45472:3;45468:11;45462:18;45458:1;45453:3;45449:11;45442:39;45414:2;45411:1;45407:10;45402:15;;45378:113;;;45509:6;45506:1;45503:13;45500:101;;;45589:1;45580:6;45575:3;45571:16;45564:27;45500:101;45349:258;45300:307;;;:::o;45613:320::-;45657:6;45694:1;45688:4;45684:12;45674:22;;45741:1;45735:4;45731:12;45762:18;45752:81;;45818:4;45810:6;45806:17;45796:27;;45752:81;45880:2;45872:6;45869:14;45849:18;45846:38;45843:84;;;45899:18;;:::i;:::-;45843:84;45664:269;45613:320;;;:::o;45939:281::-;46022:27;46044:4;46022:27;:::i;:::-;46014:6;46010:40;46152:6;46140:10;46137:22;46116:18;46104:10;46101:34;46098:62;46095:88;;;46163:18;;:::i;:::-;46095:88;46203:10;46199:2;46192:22;45982:238;45939:281;;:::o;46226:233::-;46265:3;46288:24;46306:5;46288:24;:::i;:::-;46279:33;;46334:66;46327:5;46324:77;46321:103;;;46404:18;;:::i;:::-;46321:103;46451:1;46444:5;46440:13;46433:20;;46226:233;;;:::o;46465:100::-;46504:7;46533:26;46553:5;46533:26;:::i;:::-;46522:37;;46465:100;;;:::o;46571:79::-;46610:7;46639:5;46628:16;;46571:79;;;:::o;46656:94::-;46695:7;46724:20;46738:5;46724:20;:::i;:::-;46713:31;;46656:94;;;:::o;46756:176::-;46788:1;46805:20;46823:1;46805:20;:::i;:::-;46800:25;;46839:20;46857:1;46839:20;:::i;:::-;46834:25;;46878:1;46868:35;;46883:18;;:::i;:::-;46868:35;46924:1;46921;46917:9;46912:14;;46756:176;;;;:::o;46938:180::-;46986:77;46983:1;46976:88;47083:4;47080:1;47073:15;47107:4;47104:1;47097:15;47124:180;47172:77;47169:1;47162:88;47269:4;47266:1;47259:15;47293:4;47290:1;47283:15;47310:180;47358:77;47355:1;47348:88;47455:4;47452:1;47445:15;47479:4;47476:1;47469:15;47496:180;47544:77;47541:1;47534:88;47641:4;47638:1;47631:15;47665:4;47662:1;47655:15;47682:180;47730:77;47727:1;47720:88;47827:4;47824:1;47817:15;47851:4;47848:1;47841:15;47868:180;47916:77;47913:1;47906:88;48013:4;48010:1;48003:15;48037:4;48034:1;48027:15;48054:117;48163:1;48160;48153:12;48177:117;48286:1;48283;48276:12;48300:117;48409:1;48406;48399:12;48423:117;48532:1;48529;48522:12;48546:117;48655:1;48652;48645:12;48669:117;48778:1;48775;48768:12;48792:102;48833:6;48884:2;48880:7;48875:2;48868:5;48864:14;48860:28;48850:38;;48792:102;;;:::o;48900:94::-;48933:8;48981:5;48977:2;48973:14;48952:35;;48900:94;;;:::o;49000:230::-;49140:34;49136:1;49128:6;49124:14;49117:58;49209:13;49204:2;49196:6;49192:15;49185:38;49000:230;:::o;49236:226::-;49376:34;49372:1;49364:6;49360:14;49353:58;49445:9;49440:2;49432:6;49428:15;49421:34;49236:226;:::o;49468:237::-;49608:34;49604:1;49596:6;49592:14;49585:58;49677:20;49672:2;49664:6;49660:15;49653:45;49468:237;:::o;49711:225::-;49851:34;49847:1;49839:6;49835:14;49828:58;49920:8;49915:2;49907:6;49903:15;49896:33;49711:225;:::o;49942:229::-;50082:34;50078:1;50070:6;50066:14;50059:58;50151:12;50146:2;50138:6;50134:15;50127:37;49942:229;:::o;50177:223::-;50317:34;50313:1;50305:6;50301:14;50294:58;50386:6;50381:2;50373:6;50369:15;50362:31;50177:223;:::o;50406:178::-;50546:30;50542:1;50534:6;50530:14;50523:54;50406:178;:::o;50590:235::-;50730:34;50726:1;50718:6;50714:14;50707:58;50799:18;50794:2;50786:6;50782:15;50775:43;50590:235;:::o;50831:223::-;50971:34;50967:1;50959:6;50955:14;50948:58;51040:6;51035:2;51027:6;51023:15;51016:31;50831:223;:::o;51060:175::-;51200:27;51196:1;51188:6;51184:14;51177:51;51060:175;:::o;51241:240::-;51381:34;51377:1;51369:6;51365:14;51358:58;51450:23;51445:2;51437:6;51433:15;51426:48;51241:240;:::o;51487:237::-;51627:34;51623:1;51615:6;51611:14;51604:58;51696:20;51691:2;51683:6;51679:15;51672:45;51487:237;:::o;51730:238::-;51870:34;51866:1;51858:6;51854:14;51847:58;51939:21;51934:2;51926:6;51922:15;51915:46;51730:238;:::o;51974:231::-;52114:34;52110:1;52102:6;52098:14;52091:58;52183:14;52178:2;52170:6;52166:15;52159:39;51974:231;:::o;52211:243::-;52351:34;52347:1;52339:6;52335:14;52328:58;52420:26;52415:2;52407:6;52403:15;52396:51;52211:243;:::o;52460:229::-;52600:34;52596:1;52588:6;52584:14;52577:58;52669:12;52664:2;52656:6;52652:15;52645:37;52460:229;:::o;52695:228::-;52835:34;52831:1;52823:6;52819:14;52812:58;52904:11;52899:2;52891:6;52887:15;52880:36;52695:228;:::o;52929:::-;53069:34;53065:1;53057:6;53053:14;53046:58;53138:11;53133:2;53125:6;53121:15;53114:36;52929:228;:::o;53163:182::-;53303:34;53299:1;53291:6;53287:14;53280:58;53163:182;:::o;53351:231::-;53491:34;53487:1;53479:6;53475:14;53468:58;53560:14;53555:2;53547:6;53543:15;53536:39;53351:231;:::o;53588:242::-;53728:34;53724:1;53716:6;53712:14;53705:58;53797:25;53792:2;53784:6;53780:15;53773:50;53588:242;:::o;53836:182::-;53976:34;53972:1;53964:6;53960:14;53953:58;53836:182;:::o;54024:228::-;54164:34;54160:1;54152:6;54148:14;54141:58;54233:11;54228:2;54220:6;54216:15;54209:36;54024:228;:::o;54258:234::-;54398:34;54394:1;54386:6;54382:14;54375:58;54467:17;54462:2;54454:6;54450:15;54443:42;54258:234;:::o;54498:250::-;54638:34;54634:1;54626:6;54622:14;54615:58;54707:33;54702:2;54694:6;54690:15;54683:58;54498:250;:::o;54754:220::-;54894:34;54890:1;54882:6;54878:14;54871:58;54963:3;54958:2;54950:6;54946:15;54939:28;54754:220;:::o;54980:238::-;55120:34;55116:1;55108:6;55104:14;55097:58;55189:21;55184:2;55176:6;55172:15;55165:46;54980:238;:::o;55224:236::-;55364:34;55360:1;55352:6;55348:14;55341:58;55433:19;55428:2;55420:6;55416:15;55409:44;55224:236;:::o;55466:231::-;55606:34;55602:1;55594:6;55590:14;55583:58;55675:14;55670:2;55662:6;55658:15;55651:39;55466:231;:::o;55703:151::-;55843:3;55839:1;55831:6;55827:14;55820:27;55703:151;:::o;55860:229::-;56000:34;55996:1;55988:6;55984:14;55977:58;56069:12;56064:2;56056:6;56052:15;56045:37;55860:229;:::o;56095:122::-;56168:24;56186:5;56168:24;:::i;:::-;56161:5;56158:35;56148:63;;56207:1;56204;56197:12;56148:63;56095:122;:::o;56223:116::-;56293:21;56308:5;56293:21;:::i;:::-;56286:5;56283:32;56273:60;;56329:1;56326;56319:12;56273:60;56223:116;:::o;56345:122::-;56418:24;56436:5;56418:24;:::i;:::-;56411:5;56408:35;56398:63;;56457:1;56454;56447:12;56398:63;56345:122;:::o;56473:120::-;56545:23;56562:5;56545:23;:::i;:::-;56538:5;56535:34;56525:62;;56583:1;56580;56573:12;56525:62;56473:120;:::o;56599:122::-;56672:24;56690:5;56672:24;:::i;:::-;56665:5;56662:35;56652:63;;56711:1;56708;56701:12;56652:63;56599:122;:::o
Swarm Source
ipfs://ee2b9726b631ce51bfa0584064323fb29369f304b6277171bc003d5efa49b2a1
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.