Token Cronos Ballerz
Overview CRC721
Total Supply:
2,929 Ballerz
Holders:
314 addresses
Contract:
Balance
10 Ballerz
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-04-09 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // 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 (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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/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 (last updated v4.5.0) (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); /** * @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: crnobay.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**128 - 1 (max value of uint128). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; } // Compiler will pack the following // _currentIndex and _burnCounter into a single 256bit word. // The tokenId of the next token to be minted. uint128 internal _currentIndex = 1; // The number of tokens burned. uint128 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex times unchecked { return (_currentIndex - 1 )- _burnCounter; } } /** * @dev See {IERC721Enumerable-tokenByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenByIndex(uint256 index) public view override returns (uint256) { uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (!ownership.burned) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert TokenIndexOutOfBounds(); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } // Execution should never reach this point. revert(); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (!_checkOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) { revert TransferToNonERC721ReceiverImplementer(); } updatedIndex++; } _currentIndex = uint128(updatedIndex); } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } interface StkBay{ function filPool(address col) external payable; } library FeeLibrary { using SafeMath for uint256; function calculateRoyalties( uint256 amount, uint256 royaltiesBips ) internal pure returns (uint256 royaltiesAmount) { royaltiesAmount = amount.mul(royaltiesBips).div(10000); } } contract NFT is ERC721A, Ownable { using SafeMath for uint256; using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost; uint256 public wcost; uint256 public ycost; uint256 public limMint; uint256 public maxSupply; uint256 public maxMintAmount; address public teamWal; address public bayWal; address public rugSurance; address public stkBay = 0x8631Ea3438b8701A68eaF4910B1bc72C0DB5Ccb2; address public yote = 0x1C07f47da4Cfc08f23ACdf4eC930476CF5E240B5; uint256 public timeStart; mapping(address => bool) public whiteList; mapping(address => uint256) public wMint; mapping(address => uint256) public yMint; constructor( ) ERC721A("Cronos Ballerz ", "Ballerz") { setBaseURI("ipfs://QmTwxHiqViJDzRjSoaWyzDMPDkMnxSH5eHfxj8TKgk3rAU"); maxSupply = 10000; cost = 65 ether; wcost = 30 ether; ycost = 50 ether; maxMintAmount = 100; limMint = 5; teamWal = 0x7CAE3ade68429d0DcBcBF6a8783FECccEe0fCA25; bayWal = 0xbfd0490F70E463A0c7F4afB4bcfAF7F8f76a1392; rugSurance = 0x5F7a05F253B8E92c8EEAE32aFC18427a0afA4b1F; timeStart = 1649527200; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _payout( address _recipient, uint256 _amount) internal{ // attempt to send the funds to the recipient (bool success, ) = payable(_recipient).call{ value: _amount, gas: 50000 }(""); // if it failed, update their credit balance so they can pull it later require(success); } function adminMint(uint256 _amount, address _recipient) public onlyOwner{ uint256 supply = totalSupply(); require(_amount > 0); require(supply + _amount <= maxSupply, "SoldOUT!"); _safeMint(_recipient, _amount); } function whiteMint(uint256 _mintAmount) public payable{ require(whiteList[msg.sender] == true, "!Wlist"); require(wMint[msg.sender] + _mintAmount <= limMint, "!lim"); uint256 supply = totalSupply(); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply, "SoldOUT!"); require(msg.value >= wcost * _mintAmount); wMint[msg.sender] += _mintAmount; uint256 team = FeeLibrary.calculateRoyalties(msg.value, 7000 ); uint256 stkFee = FeeLibrary.calculateRoyalties(msg.value, 2000 ); uint256 bayFee = FeeLibrary.calculateRoyalties(msg.value, 300 ); uint256 rugFee = FeeLibrary.calculateRoyalties(msg.value, 700); StkBay(stkBay).filPool{value: stkFee}(address(this)); _payout(rugSurance, rugFee); _payout(teamWal, team); _payout(bayWal, bayFee); _safeMint(msg.sender, _mintAmount); } function stWlist(address[] memory _lst) public onlyOwner{ for (uint256 i = 0; i < _lst.length; i++){ whiteList[_lst[i]] = true; } } function yoteMint(uint256 _mintAmount) public payable{ require(IERC721(yote).balanceOf(msg.sender) > 0, "!yote" ); require(yMint[msg.sender] + _mintAmount <= limMint, "!lim"); uint256 supply = totalSupply(); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply, "SoldOUT!"); require(msg.value >= ycost * _mintAmount); yMint[msg.sender] += _mintAmount; uint256 team = FeeLibrary.calculateRoyalties(msg.value, 7000 ); uint256 stkFee = FeeLibrary.calculateRoyalties(msg.value, 2000 ); uint256 bayFee = FeeLibrary.calculateRoyalties(msg.value, 300 ); uint256 rugFee = FeeLibrary.calculateRoyalties(msg.value, 700); StkBay(stkBay).filPool{value: stkFee}(address(this)); _payout(rugSurance, rugFee); _payout(teamWal, team); _payout(bayWal, bayFee); _safeMint(msg.sender, _mintAmount); } // public function mint(uint256 _mintAmount) public payable { require(timeStart <= block.timestamp, "!live"); uint256 supply = totalSupply(); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); require(msg.value >= cost * _mintAmount); uint256 team = FeeLibrary.calculateRoyalties(msg.value, 7000 ); uint256 stkFee = FeeLibrary.calculateRoyalties(msg.value, 2000 ); uint256 bayFee = FeeLibrary.calculateRoyalties(msg.value, 300 ); uint256 rugFee = FeeLibrary.calculateRoyalties(msg.value, 700); StkBay(stkBay).filPool{value: stkFee}(address(this)); _payout(rugSurance, rugFee); _payout(teamWal, team); _payout(bayWal, bayFee); _safeMint(msg.sender, _mintAmount); } function isCroyote() public view returns (bool){ if(IERC721(yote).balanceOf(msg.sender) > 0){ return true; } else{ return false; } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setwCost(uint256 _newCost) public onlyOwner { wcost = _newCost; } function setyCost(uint256 _newCost) public onlyOwner { ycost = _newCost; } function chngTeam(address _new) public onlyOwner{ teamWal = _new; } function calCost(uint256 _num) public view returns(uint256){ return _num * cost; } function calwCost(uint256 _num) public view returns(uint256){ return _num * wcost; } function calyCost(uint256 _num) public view returns(uint256){ return _num * ycost; } function setBay(address _adie) public onlyOwner{ stkBay = _adie; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function recoverToken(address _token) external onlyOwner { uint256 balance = IERC20(_token).balanceOf(address(this)); require(balance != 0, "Operations: Cannot recover zero balance"); IERC20(_token).transfer(address(msg.sender), balance); } function recoverNonFungibleToken(address _token, uint256 _tokenId) external onlyOwner { IERC721(_token).transferFrom(address(this), address(msg.sender), _tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bayWal","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"calCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"calwCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"calyCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"chngTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCroyote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","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":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"recoverNonFungibleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rugSurance","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adie","type":"address"}],"name":"setBay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setwCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setyCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_lst","type":"address[]"}],"name":"stWlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stkBay","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWal","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whiteMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"yMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ycost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"yoteMint","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
600080546001600160801b031916600117905560c06040526005608081905264173539b7b760d91b60a09081526200003b9160099190620002b8565b50601380546001600160a01b0319908116738631ea3438b8701a68eaf4910b1bc72c0db5ccb21790915560148054909116731c07f47da4cfc08f23acdf4ec930476cf5e240b51790553480156200009157600080fd5b50604080518082018252600f81526e021b937b737b9902130b63632b93d1608d1b6020808301918252835180850190945260078452662130b63632b93d60c91b908401528151919291620000e891600191620002b8565b508051620000fe906002906020840190620002b8565b5050506200011b62000115620001ea60201b60201c565b620001ee565b6200013f60405180606001604052806035815260200162002fb16035913962000240565b612710600e556803860e639d80640000600a556801a055690d9db80000600b556802b5e3af16b1880000600c556064600f556005600d55601080546001600160a01b0319908116737cae3ade68429d0dcbcbf6a8783fecccee0fca251790915560118054821673bfd0490f70e463a0c7f4afb4bcfaf7f8f76a139217905560128054909116735f7a05f253b8e92c8eeae32afc18427a0afa4b1f179055636251c9a06015556200039b565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6007546001600160a01b031633146200029f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620002b4906008906020840190620002b8565b5050565b828054620002c6906200035e565b90600052602060002090601f016020900481019282620002ea576000855562000335565b82601f106200030557805160ff191683800117855562000335565b8280016001018555821562000335579182015b828111156200033557825182559160200191906001019062000318565b506200034392915062000347565b5090565b5b8082111562000343576000815560010162000348565b600181811c908216806200037357607f821691505b602082108114156200039557634e487b7160e01b600052602260045260246000fd5b50919050565b612c0680620003ab6000396000f3fe60806040526004361061036b5760003560e01c80637f00c7a6116101c6578063c6682862116100f7578063e06d610b11610095578063f12578b91161006f578063f12578b9146109cd578063f2fde38b146109ed578063f579001614610a0d578063fd74d29414610a2357600080fd5b8063e06d610b1461094e578063e985e9c51461096e578063f08e2075146109b757600080fd5b8063cc094b7c116100d1578063cc094b7c146108e3578063d4164f6f146108f8578063d5abeb0114610918578063da3ef23f1461092e57600080fd5b8063c66828621461088e578063c6e3cd6f146108a3578063c87b56dd146108c357600080fd5b8063a0712d6811610164578063b86e852e1161013e578063b86e852e1461080e578063b88d4fde1461082e578063bb0fd1471461084e578063bbced2c61461086e57600080fd5b8063a0712d68146107ae578063a22cb465146107c1578063b1defec6146107e157600080fd5b80639307a2c1116101a05780639307a2c11461072c57806395d89b411461075957806398eceaf71461076e5780639be65a601461078e57600080fd5b80637f00c7a6146106d857806382da4b11146106f85780638da5cb5b1461070e57600080fd5b80633fb2cdcf116102a05780636352211e1161023e5780636d4f819c116102185780636d4f819c1461066357806370a0823114610683578063715018a6146106a35780637c598ebb146106b857600080fd5b80636352211e1461060e578063696925e31461062e5780636c0360eb1461064e57600080fd5b806344a0d68a1161027a57806344a0d68a1461059b57806347d6b593146105bb5780634f6ccce7146105ce57806355f804b3146105ee57600080fd5b80633fb2cdcf1461053b5780634091f25f1461055b57806342842e0e1461057b57600080fd5b806313faede61161030d57806323b872dd116102e757806323b872dd146104c35780632f745c59146104e3578063372c12b1146105035780633ccfd60b1461053357600080fd5b806313faede61461047457806318160ddd14610498578063239c70ae146104ad57600080fd5b8063095ea7b311610349578063095ea7b3146103ff5780630a6646b0146104215780630aa63b84146104415780630dc28efe1461045457600080fd5b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c7575b600080fd5b34801561037c57600080fd5b5061039061038b3660046127be565b610a39565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610aa6565b60405161039c91906129c2565b3480156103d357600080fd5b506103e76103e2366004612840565b610b38565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a3660046126c4565b610b7c565b005b34801561042d57600080fd5b5061041f61043c366004612588565b610c0a565b61041f61044f366004612840565b610c5f565b34801561046057600080fd5b5061041f61046f366004612872565b610edc565b34801561048057600080fd5b5061048a600a5481565b60405190815260200161039c565b3480156104a457600080fd5b5061048a610f54565b3480156104b957600080fd5b5061048a600f5481565b3480156104cf57600080fd5b5061041f6104de3660046125d6565b610f77565b3480156104ef57600080fd5b5061048a6104fe3660046126c4565b610f82565b34801561050f57600080fd5b5061039061051e366004612588565b60166020526000908152604090205460ff1681565b61041f61107e565b34801561054757600080fd5b5061041f610556366004612840565b61111c565b34801561056757600080fd5b506010546103e7906001600160a01b031681565b34801561058757600080fd5b5061041f6105963660046125d6565b61114b565b3480156105a757600080fd5b5061041f6105b6366004612840565b611166565b61041f6105c9366004612840565b611195565b3480156105da57600080fd5b5061048a6105e9366004612840565b6112b4565b3480156105fa57600080fd5b5061041f6106093660046127f8565b61135e565b34801561061a57600080fd5b506103e7610629366004612840565b61139f565b34801561063a57600080fd5b506011546103e7906001600160a01b031681565b34801561065a57600080fd5b506103ba6113b1565b34801561066f57600080fd5b5061048a61067e366004612840565b61143f565b34801561068f57600080fd5b5061048a61069e366004612588565b61144f565b3480156106af57600080fd5b5061041f61149d565b3480156106c457600080fd5b506012546103e7906001600160a01b031681565b3480156106e457600080fd5b5061041f6106f3366004612840565b6114d3565b34801561070457600080fd5b5061048a600b5481565b34801561071a57600080fd5b506007546001600160a01b03166103e7565b34801561073857600080fd5b5061048a610747366004612588565b60176020526000908152604090205481565b34801561076557600080fd5b506103ba611502565b34801561077a57600080fd5b506013546103e7906001600160a01b031681565b34801561079a57600080fd5b5061041f6107a9366004612588565b611511565b61041f6107bc366004612840565b611694565b3480156107cd57600080fd5b5061041f6107dc36600461268d565b611736565b3480156107ed57600080fd5b5061048a6107fc366004612588565b60186020526000908152604090205481565b34801561081a57600080fd5b5061041f610829366004612588565b6117cc565b34801561083a57600080fd5b5061041f610849366004612612565b611818565b34801561085a57600080fd5b5061041f6108693660046126c4565b611852565b34801561087a57600080fd5b5061048a610889366004612840565b6118de565b34801561089a57600080fd5b506103ba6118ee565b3480156108af57600080fd5b5061048a6108be366004612840565b6118fb565b3480156108cf57600080fd5b506103ba6108de366004612840565b61190b565b3480156108ef57600080fd5b506103906119d9565b34801561090457600080fd5b5061041f6109133660046126ee565b611a6b565b34801561092457600080fd5b5061048a600e5481565b34801561093a57600080fd5b5061041f6109493660046127f8565b611afd565b34801561095a57600080fd5b5061041f610969366004612840565b611b3a565b34801561097a57600080fd5b506103906109893660046125a3565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156109c357600080fd5b5061048a600d5481565b3480156109d957600080fd5b506014546103e7906001600160a01b031681565b3480156109f957600080fd5b5061041f610a08366004612588565b611b69565b348015610a1957600080fd5b5061048a600c5481565b348015610a2f57600080fd5b5061048a60155481565b60006001600160e01b031982166380ac58cd60e01b1480610a6a57506001600160e01b03198216635b5e139f60e01b145b80610a8557506001600160e01b0319821663780e9d6360e01b145b80610aa057506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610ab590612aea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae190612aea565b8015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050905090565b6000610b4382611c01565b610b60576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610b878261139f565b9050806001600160a01b0316836001600160a01b03161415610bbc5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610bdc5750610bda8133610989565b155b15610bfa576040516367d9dca160e11b815260040160405180910390fd5b610c05838383611c35565b505050565b6007546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610c34906129d5565b60405180910390fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610ca357600080fd5b505afa158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190612859565b11610d105760405162461bcd60e51b815260206004820152600560248201526421796f746560d81b6044820152606401610c34565b600d5433600090815260186020526040902054610d2e908390612a5c565b1115610d655760405162461bcd60e51b8152600401610c3490602080825260049082015263216c696d60e01b604082015260600190565b6000610d6f610f54565b905060008211610d7e57600080fd5b600e54610d8b8383612a5c565b1115610da95760405162461bcd60e51b8152600401610c3490612a0a565b81600c54610db79190612a88565b341015610dc357600080fd5b3360009081526018602052604081208054849290610de2908490612a5c565b9091555060009050610df634611b58611c91565b90506000610e06346107d0611c91565b90506000610e163461012c611c91565b90506000610e26346102bc611c91565b601354604051631688d01360e11b81523060048201529192506001600160a01b031690632d11a0269085906024016000604051808303818588803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b5050601254610e9e93506001600160a01b03169150839050611ca9565b601054610eb4906001600160a01b031685611ca9565b601154610eca906001600160a01b031683611ca9565b610ed43387611d0e565b505050505050565b6007546001600160a01b03163314610f065760405162461bcd60e51b8152600401610c34906129d5565b6000610f10610f54565b905060008311610f1f57600080fd5b600e54610f2c8483612a5c565b1115610f4a5760405162461bcd60e51b8152600401610c3490612a0a565b610c058284611d0e565b6000546001600160801b03600160801b8204811691811691909103600019011690565b610c05838383611d28565b6000610f8d8361144f565b8210610fac576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b8381101561107857600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252906110245750611070565b80516001600160a01b03161561103957805192505b876001600160a01b0316836001600160a01b0316141561106e578684141561106757509350610aa092505050565b6001909301925b505b600101610fbd565b50600080fd5b6007546001600160a01b031633146110a85760405162461bcd60e51b8152600401610c34906129d5565b60006110bc6007546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611106576040519150601f19603f3d011682016040523d82523d6000602084013e61110b565b606091505b505090508061111957600080fd5b50565b6007546001600160a01b031633146111465760405162461bcd60e51b8152600401610c34906129d5565b600c55565b610c0583838360405180602001604052806000815250611818565b6007546001600160a01b031633146111905760405162461bcd60e51b8152600401610c34906129d5565b600a55565b3360009081526016602052604090205460ff1615156001146111e25760405162461bcd60e51b81526020600482015260066024820152650855db1a5cdd60d21b6044820152606401610c34565b600d5433600090815260176020526040902054611200908390612a5c565b11156112375760405162461bcd60e51b8152600401610c3490602080825260049082015263216c696d60e01b604082015260600190565b6000611241610f54565b90506000821161125057600080fd5b600e5461125d8383612a5c565b111561127b5760405162461bcd60e51b8152600401610c3490612a0a565b81600b546112899190612a88565b34101561129557600080fd5b3360009081526017602052604081208054849290610de2908490612a5c565b600080546001600160801b031681805b8281101561134457600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061133b57858314156113345750949350505050565b6001909201915b506001016112c4565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b031633146113885760405162461bcd60e51b8152600401610c34906129d5565b805161139b90600890602084019061247c565b5050565b60006113aa82611f45565b5192915050565b600880546113be90612aea565b80601f01602080910402602001604051908101604052809291908181526020018280546113ea90612aea565b80156114375780601f1061140c57610100808354040283529160200191611437565b820191906000526020600020905b81548152906001019060200180831161141a57829003601f168201915b505050505081565b6000600b5482610aa09190612a88565b60006001600160a01b038216611478576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160401b031690565b6007546001600160a01b031633146114c75760405162461bcd60e51b8152600401610c34906129d5565b6114d16000612067565b565b6007546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610c34906129d5565b600f55565b606060028054610ab590612aea565b6007546001600160a01b0316331461153b5760405162461bcd60e51b8152600401610c34906129d5565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561157d57600080fd5b505afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b59190612859565b9050806116145760405162461bcd60e51b815260206004820152602760248201527f4f7065726174696f6e733a2043616e6e6f74207265636f766572207a65726f2060448201526662616c616e636560c81b6064820152608401610c34565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561165c57600080fd5b505af1158015611670573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0591906127a1565b4260155411156116ce5760405162461bcd60e51b8152602060048201526005602482015264216c69766560d81b6044820152606401610c34565b60006116d8610f54565b9050600082116116e757600080fd5b600f548211156116f657600080fd5b600e546117038383612a5c565b111561170e57600080fd5b81600a5461171c9190612a88565b34101561172857600080fd5b6000610df634611b58611c91565b6001600160a01b0382163314156117605760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146117f65760405162461bcd60e51b8152600401610c34906129d5565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b611823848484611d28565b61182f848484846120b9565b61184c576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b0316331461187c5760405162461bcd60e51b8152600401610c34906129d5565b6040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038316906323b872dd90606401600060405180830381600087803b1580156118ca57600080fd5b505af1158015610ed4573d6000803e3d6000fd5b6000600a5482610aa09190612a88565b600980546113be90612aea565b6000600c5482610aa09190612a88565b606061191682611c01565b61197a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c34565b60006119846121c8565b905060008151116119a457604051806020016040528060008152506119d2565b806119ae846121d7565b60096040516020016119c2939291906128c1565b6040516020818303038152906040525b9392505050565b6014546040516370a0823160e01b815233600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b158015611a2157600080fd5b505afa158015611a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a599190612859565b1115611a655750600190565b50600090565b6007546001600160a01b03163314611a955760405162461bcd60e51b8152600401610c34906129d5565b60005b815181101561139b57600160166000848481518110611ab957611ab9612b80565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611af581612b25565b915050611a98565b6007546001600160a01b03163314611b275760405162461bcd60e51b8152600401610c34906129d5565b805161139b90600990602084019061247c565b6007546001600160a01b03163314611b645760405162461bcd60e51b8152600401610c34906129d5565b600b55565b6007546001600160a01b03163314611b935760405162461bcd60e51b8152600401610c34906129d5565b6001600160a01b038116611bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c34565b61111981612067565b600080546001600160801b031682108015610aa0575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006119d2612710611ca385856122d4565b906122e0565b6000826001600160a01b03168261c35090604051600060405180830381858888f193505050503d8060008114611cfb576040519150601f19603f3d011682016040523d82523d6000602084013e611d00565b606091505b5050905080610c0557600080fd5b61139b8282604051806020016040528060008152506122ec565b6000611d3382611f45565b80519091506000906001600160a01b0316336001600160a01b03161480611d6157508151611d619033610989565b80611d7c575033611d7184610b38565b6001600160a01b0316145b905080611d9c57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614611dd15760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416611df857604051633a954ecd60e21b815260040160405180910390fd5b611e086000848460000151611c35565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116611efb576000546001600160801b0316811015611efb57825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101829052905482906001600160801b031681101561204e57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061204c5780516001600160a01b031615611fe3579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612047579392505050565b611fe3565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b156121bc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120fd903390899088908890600401612985565b602060405180830381600087803b15801561211757600080fd5b505af1925050508015612147575060408051601f3d908101601f19168201909252612144918101906127db565b60015b6121a2573d808015612175576040519150601f19603f3d011682016040523d82523d6000602084013e61217a565b606091505b50805161219a576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121c0565b5060015b949350505050565b606060088054610ab590612aea565b6060816121fb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612225578061220f81612b25565b915061221e9050600a83612a74565b91506121ff565b6000816001600160401b0381111561223f5761223f612b96565b6040519080825280601f01601f191660200182016040528015612269576020820181803683370190505b5090505b84156121c05761227e600183612aa7565b915061228b600a86612b40565b612296906030612a5c565b60f81b8183815181106122ab576122ab612b80565b60200101906001600160f81b031916908160001a9053506122cd600a86612a74565b945061226d565b60006119d28284612a88565b60006119d28284612a74565b610c0583838360016000546001600160801b03166001600160a01b03851661232657604051622e076360e81b815260040160405180910390fd5b836123445760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b031981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b858110156124565760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a483801561242c575061242a60008884886120b9565b155b1561244a576040516368d2bf6b60e11b815260040160405180910390fd5b600191820191016123d5565b50600080546001600160801b0319166001600160801b0392909216919091179055611f3e565b82805461248890612aea565b90600052602060002090601f0160209004810192826124aa57600085556124f0565b82601f106124c357805160ff19168380011785556124f0565b828001600101855582156124f0579182015b828111156124f05782518255916020019190600101906124d5565b506124fc929150612500565b5090565b5b808211156124fc5760008155600101612501565b60006001600160401b0383111561252e5761252e612b96565b612541601f8401601f1916602001612a2c565b905082815283838301111561255557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461258357600080fd5b919050565b60006020828403121561259a57600080fd5b6119d28261256c565b600080604083850312156125b657600080fd5b6125bf8361256c565b91506125cd6020840161256c565b90509250929050565b6000806000606084860312156125eb57600080fd5b6125f48461256c565b92506126026020850161256c565b9150604084013590509250925092565b6000806000806080858703121561262857600080fd5b6126318561256c565b935061263f6020860161256c565b92506040850135915060608501356001600160401b0381111561266157600080fd5b8501601f8101871361267257600080fd5b61268187823560208401612515565b91505092959194509250565b600080604083850312156126a057600080fd5b6126a98361256c565b915060208301356126b981612bac565b809150509250929050565b600080604083850312156126d757600080fd5b6126e08361256c565b946020939093013593505050565b6000602080838503121561270157600080fd5b82356001600160401b038082111561271857600080fd5b818501915085601f83011261272c57600080fd5b81358181111561273e5761273e612b96565b8060051b915061274f848301612a2c565b8181528481019084860184860187018a101561276a57600080fd5b600095505b83861015612794576127808161256c565b83526001959095019491860191860161276f565b5098975050505050505050565b6000602082840312156127b357600080fd5b81516119d281612bac565b6000602082840312156127d057600080fd5b81356119d281612bba565b6000602082840312156127ed57600080fd5b81516119d281612bba565b60006020828403121561280a57600080fd5b81356001600160401b0381111561282057600080fd5b8201601f8101841361283157600080fd5b6121c084823560208401612515565b60006020828403121561285257600080fd5b5035919050565b60006020828403121561286b57600080fd5b5051919050565b6000806040838503121561288557600080fd5b823591506125cd6020840161256c565b600081518084526128ad816020860160208601612abe565b601f01601f19169290920160200192915050565b6000845160206128d48285838a01612abe565b8551918401916128e78184848a01612abe565b8554920191600090600181811c908083168061290457607f831692505b85831081141561292257634e487b7160e01b85526022600452602485fd5b808015612936576001811461294757612974565b60ff19851688528388019550612974565b60008b81526020902060005b8581101561296c5781548a820152908401908801612953565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129b890830184612895565b9695505050505050565b6020815260006119d26020830184612895565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267536f6c644f55542160c01b604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715612a5457612a54612b96565b604052919050565b60008219821115612a6f57612a6f612b54565b500190565b600082612a8357612a83612b6a565b500490565b6000816000190483118215151615612aa257612aa2612b54565b500290565b600082821015612ab957612ab9612b54565b500390565b60005b83811015612ad9578181015183820152602001612ac1565b8381111561184c5750506000910152565b600181811c90821680612afe57607f821691505b60208210811415612b1f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b3957612b39612b54565b5060010190565b600082612b4f57612b4f612b6a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461111957600080fd5b6001600160e01b03198116811461111957600080fdfea26469706673582212209841c4cb82bec19b36297985ea2e91776f5f6d655b8a1fe54e18c76290ab42ea64736f6c63430008070033697066733a2f2f516d54777848697156694a447a526a536f6157797a444d50446b4d6e78534835654866786a38544b676b33724155
Deployed Bytecode
0x60806040526004361061036b5760003560e01c80637f00c7a6116101c6578063c6682862116100f7578063e06d610b11610095578063f12578b91161006f578063f12578b9146109cd578063f2fde38b146109ed578063f579001614610a0d578063fd74d29414610a2357600080fd5b8063e06d610b1461094e578063e985e9c51461096e578063f08e2075146109b757600080fd5b8063cc094b7c116100d1578063cc094b7c146108e3578063d4164f6f146108f8578063d5abeb0114610918578063da3ef23f1461092e57600080fd5b8063c66828621461088e578063c6e3cd6f146108a3578063c87b56dd146108c357600080fd5b8063a0712d6811610164578063b86e852e1161013e578063b86e852e1461080e578063b88d4fde1461082e578063bb0fd1471461084e578063bbced2c61461086e57600080fd5b8063a0712d68146107ae578063a22cb465146107c1578063b1defec6146107e157600080fd5b80639307a2c1116101a05780639307a2c11461072c57806395d89b411461075957806398eceaf71461076e5780639be65a601461078e57600080fd5b80637f00c7a6146106d857806382da4b11146106f85780638da5cb5b1461070e57600080fd5b80633fb2cdcf116102a05780636352211e1161023e5780636d4f819c116102185780636d4f819c1461066357806370a0823114610683578063715018a6146106a35780637c598ebb146106b857600080fd5b80636352211e1461060e578063696925e31461062e5780636c0360eb1461064e57600080fd5b806344a0d68a1161027a57806344a0d68a1461059b57806347d6b593146105bb5780634f6ccce7146105ce57806355f804b3146105ee57600080fd5b80633fb2cdcf1461053b5780634091f25f1461055b57806342842e0e1461057b57600080fd5b806313faede61161030d57806323b872dd116102e757806323b872dd146104c35780632f745c59146104e3578063372c12b1146105035780633ccfd60b1461053357600080fd5b806313faede61461047457806318160ddd14610498578063239c70ae146104ad57600080fd5b8063095ea7b311610349578063095ea7b3146103ff5780630a6646b0146104215780630aa63b84146104415780630dc28efe1461045457600080fd5b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c7575b600080fd5b34801561037c57600080fd5b5061039061038b3660046127be565b610a39565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610aa6565b60405161039c91906129c2565b3480156103d357600080fd5b506103e76103e2366004612840565b610b38565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a3660046126c4565b610b7c565b005b34801561042d57600080fd5b5061041f61043c366004612588565b610c0a565b61041f61044f366004612840565b610c5f565b34801561046057600080fd5b5061041f61046f366004612872565b610edc565b34801561048057600080fd5b5061048a600a5481565b60405190815260200161039c565b3480156104a457600080fd5b5061048a610f54565b3480156104b957600080fd5b5061048a600f5481565b3480156104cf57600080fd5b5061041f6104de3660046125d6565b610f77565b3480156104ef57600080fd5b5061048a6104fe3660046126c4565b610f82565b34801561050f57600080fd5b5061039061051e366004612588565b60166020526000908152604090205460ff1681565b61041f61107e565b34801561054757600080fd5b5061041f610556366004612840565b61111c565b34801561056757600080fd5b506010546103e7906001600160a01b031681565b34801561058757600080fd5b5061041f6105963660046125d6565b61114b565b3480156105a757600080fd5b5061041f6105b6366004612840565b611166565b61041f6105c9366004612840565b611195565b3480156105da57600080fd5b5061048a6105e9366004612840565b6112b4565b3480156105fa57600080fd5b5061041f6106093660046127f8565b61135e565b34801561061a57600080fd5b506103e7610629366004612840565b61139f565b34801561063a57600080fd5b506011546103e7906001600160a01b031681565b34801561065a57600080fd5b506103ba6113b1565b34801561066f57600080fd5b5061048a61067e366004612840565b61143f565b34801561068f57600080fd5b5061048a61069e366004612588565b61144f565b3480156106af57600080fd5b5061041f61149d565b3480156106c457600080fd5b506012546103e7906001600160a01b031681565b3480156106e457600080fd5b5061041f6106f3366004612840565b6114d3565b34801561070457600080fd5b5061048a600b5481565b34801561071a57600080fd5b506007546001600160a01b03166103e7565b34801561073857600080fd5b5061048a610747366004612588565b60176020526000908152604090205481565b34801561076557600080fd5b506103ba611502565b34801561077a57600080fd5b506013546103e7906001600160a01b031681565b34801561079a57600080fd5b5061041f6107a9366004612588565b611511565b61041f6107bc366004612840565b611694565b3480156107cd57600080fd5b5061041f6107dc36600461268d565b611736565b3480156107ed57600080fd5b5061048a6107fc366004612588565b60186020526000908152604090205481565b34801561081a57600080fd5b5061041f610829366004612588565b6117cc565b34801561083a57600080fd5b5061041f610849366004612612565b611818565b34801561085a57600080fd5b5061041f6108693660046126c4565b611852565b34801561087a57600080fd5b5061048a610889366004612840565b6118de565b34801561089a57600080fd5b506103ba6118ee565b3480156108af57600080fd5b5061048a6108be366004612840565b6118fb565b3480156108cf57600080fd5b506103ba6108de366004612840565b61190b565b3480156108ef57600080fd5b506103906119d9565b34801561090457600080fd5b5061041f6109133660046126ee565b611a6b565b34801561092457600080fd5b5061048a600e5481565b34801561093a57600080fd5b5061041f6109493660046127f8565b611afd565b34801561095a57600080fd5b5061041f610969366004612840565b611b3a565b34801561097a57600080fd5b506103906109893660046125a3565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156109c357600080fd5b5061048a600d5481565b3480156109d957600080fd5b506014546103e7906001600160a01b031681565b3480156109f957600080fd5b5061041f610a08366004612588565b611b69565b348015610a1957600080fd5b5061048a600c5481565b348015610a2f57600080fd5b5061048a60155481565b60006001600160e01b031982166380ac58cd60e01b1480610a6a57506001600160e01b03198216635b5e139f60e01b145b80610a8557506001600160e01b0319821663780e9d6360e01b145b80610aa057506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610ab590612aea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae190612aea565b8015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050905090565b6000610b4382611c01565b610b60576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610b878261139f565b9050806001600160a01b0316836001600160a01b03161415610bbc5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610bdc5750610bda8133610989565b155b15610bfa576040516367d9dca160e11b815260040160405180910390fd5b610c05838383611c35565b505050565b6007546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610c34906129d5565b60405180910390fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610ca357600080fd5b505afa158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190612859565b11610d105760405162461bcd60e51b815260206004820152600560248201526421796f746560d81b6044820152606401610c34565b600d5433600090815260186020526040902054610d2e908390612a5c565b1115610d655760405162461bcd60e51b8152600401610c3490602080825260049082015263216c696d60e01b604082015260600190565b6000610d6f610f54565b905060008211610d7e57600080fd5b600e54610d8b8383612a5c565b1115610da95760405162461bcd60e51b8152600401610c3490612a0a565b81600c54610db79190612a88565b341015610dc357600080fd5b3360009081526018602052604081208054849290610de2908490612a5c565b9091555060009050610df634611b58611c91565b90506000610e06346107d0611c91565b90506000610e163461012c611c91565b90506000610e26346102bc611c91565b601354604051631688d01360e11b81523060048201529192506001600160a01b031690632d11a0269085906024016000604051808303818588803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b5050601254610e9e93506001600160a01b03169150839050611ca9565b601054610eb4906001600160a01b031685611ca9565b601154610eca906001600160a01b031683611ca9565b610ed43387611d0e565b505050505050565b6007546001600160a01b03163314610f065760405162461bcd60e51b8152600401610c34906129d5565b6000610f10610f54565b905060008311610f1f57600080fd5b600e54610f2c8483612a5c565b1115610f4a5760405162461bcd60e51b8152600401610c3490612a0a565b610c058284611d0e565b6000546001600160801b03600160801b8204811691811691909103600019011690565b610c05838383611d28565b6000610f8d8361144f565b8210610fac576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b8381101561107857600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615801592820192909252906110245750611070565b80516001600160a01b03161561103957805192505b876001600160a01b0316836001600160a01b0316141561106e578684141561106757509350610aa092505050565b6001909301925b505b600101610fbd565b50600080fd5b6007546001600160a01b031633146110a85760405162461bcd60e51b8152600401610c34906129d5565b60006110bc6007546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611106576040519150601f19603f3d011682016040523d82523d6000602084013e61110b565b606091505b505090508061111957600080fd5b50565b6007546001600160a01b031633146111465760405162461bcd60e51b8152600401610c34906129d5565b600c55565b610c0583838360405180602001604052806000815250611818565b6007546001600160a01b031633146111905760405162461bcd60e51b8152600401610c34906129d5565b600a55565b3360009081526016602052604090205460ff1615156001146111e25760405162461bcd60e51b81526020600482015260066024820152650855db1a5cdd60d21b6044820152606401610c34565b600d5433600090815260176020526040902054611200908390612a5c565b11156112375760405162461bcd60e51b8152600401610c3490602080825260049082015263216c696d60e01b604082015260600190565b6000611241610f54565b90506000821161125057600080fd5b600e5461125d8383612a5c565b111561127b5760405162461bcd60e51b8152600401610c3490612a0a565b81600b546112899190612a88565b34101561129557600080fd5b3360009081526017602052604081208054849290610de2908490612a5c565b600080546001600160801b031681805b8281101561134457600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061133b57858314156113345750949350505050565b6001909201915b506001016112c4565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b031633146113885760405162461bcd60e51b8152600401610c34906129d5565b805161139b90600890602084019061247c565b5050565b60006113aa82611f45565b5192915050565b600880546113be90612aea565b80601f01602080910402602001604051908101604052809291908181526020018280546113ea90612aea565b80156114375780601f1061140c57610100808354040283529160200191611437565b820191906000526020600020905b81548152906001019060200180831161141a57829003601f168201915b505050505081565b6000600b5482610aa09190612a88565b60006001600160a01b038216611478576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160401b031690565b6007546001600160a01b031633146114c75760405162461bcd60e51b8152600401610c34906129d5565b6114d16000612067565b565b6007546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610c34906129d5565b600f55565b606060028054610ab590612aea565b6007546001600160a01b0316331461153b5760405162461bcd60e51b8152600401610c34906129d5565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561157d57600080fd5b505afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b59190612859565b9050806116145760405162461bcd60e51b815260206004820152602760248201527f4f7065726174696f6e733a2043616e6e6f74207265636f766572207a65726f2060448201526662616c616e636560c81b6064820152608401610c34565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561165c57600080fd5b505af1158015611670573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0591906127a1565b4260155411156116ce5760405162461bcd60e51b8152602060048201526005602482015264216c69766560d81b6044820152606401610c34565b60006116d8610f54565b9050600082116116e757600080fd5b600f548211156116f657600080fd5b600e546117038383612a5c565b111561170e57600080fd5b81600a5461171c9190612a88565b34101561172857600080fd5b6000610df634611b58611c91565b6001600160a01b0382163314156117605760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146117f65760405162461bcd60e51b8152600401610c34906129d5565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b611823848484611d28565b61182f848484846120b9565b61184c576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b0316331461187c5760405162461bcd60e51b8152600401610c34906129d5565b6040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038316906323b872dd90606401600060405180830381600087803b1580156118ca57600080fd5b505af1158015610ed4573d6000803e3d6000fd5b6000600a5482610aa09190612a88565b600980546113be90612aea565b6000600c5482610aa09190612a88565b606061191682611c01565b61197a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c34565b60006119846121c8565b905060008151116119a457604051806020016040528060008152506119d2565b806119ae846121d7565b60096040516020016119c2939291906128c1565b6040516020818303038152906040525b9392505050565b6014546040516370a0823160e01b815233600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b158015611a2157600080fd5b505afa158015611a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a599190612859565b1115611a655750600190565b50600090565b6007546001600160a01b03163314611a955760405162461bcd60e51b8152600401610c34906129d5565b60005b815181101561139b57600160166000848481518110611ab957611ab9612b80565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611af581612b25565b915050611a98565b6007546001600160a01b03163314611b275760405162461bcd60e51b8152600401610c34906129d5565b805161139b90600990602084019061247c565b6007546001600160a01b03163314611b645760405162461bcd60e51b8152600401610c34906129d5565b600b55565b6007546001600160a01b03163314611b935760405162461bcd60e51b8152600401610c34906129d5565b6001600160a01b038116611bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c34565b61111981612067565b600080546001600160801b031682108015610aa0575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006119d2612710611ca385856122d4565b906122e0565b6000826001600160a01b03168261c35090604051600060405180830381858888f193505050503d8060008114611cfb576040519150601f19603f3d011682016040523d82523d6000602084013e611d00565b606091505b5050905080610c0557600080fd5b61139b8282604051806020016040528060008152506122ec565b6000611d3382611f45565b80519091506000906001600160a01b0316336001600160a01b03161480611d6157508151611d619033610989565b80611d7c575033611d7184610b38565b6001600160a01b0316145b905080611d9c57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614611dd15760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416611df857604051633a954ecd60e21b815260040160405180910390fd5b611e086000848460000151611c35565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116611efb576000546001600160801b0316811015611efb57825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101829052905482906001600160801b031681101561204e57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061204c5780516001600160a01b031615611fe3579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612047579392505050565b611fe3565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b156121bc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120fd903390899088908890600401612985565b602060405180830381600087803b15801561211757600080fd5b505af1925050508015612147575060408051601f3d908101601f19168201909252612144918101906127db565b60015b6121a2573d808015612175576040519150601f19603f3d011682016040523d82523d6000602084013e61217a565b606091505b50805161219a576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121c0565b5060015b949350505050565b606060088054610ab590612aea565b6060816121fb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612225578061220f81612b25565b915061221e9050600a83612a74565b91506121ff565b6000816001600160401b0381111561223f5761223f612b96565b6040519080825280601f01601f191660200182016040528015612269576020820181803683370190505b5090505b84156121c05761227e600183612aa7565b915061228b600a86612b40565b612296906030612a5c565b60f81b8183815181106122ab576122ab612b80565b60200101906001600160f81b031916908160001a9053506122cd600a86612a74565b945061226d565b60006119d28284612a88565b60006119d28284612a74565b610c0583838360016000546001600160801b03166001600160a01b03851661232657604051622e076360e81b815260040160405180910390fd5b836123445760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b031981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b858110156124565760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a483801561242c575061242a60008884886120b9565b155b1561244a576040516368d2bf6b60e11b815260040160405180910390fd5b600191820191016123d5565b50600080546001600160801b0319166001600160801b0392909216919091179055611f3e565b82805461248890612aea565b90600052602060002090601f0160209004810192826124aa57600085556124f0565b82601f106124c357805160ff19168380011785556124f0565b828001600101855582156124f0579182015b828111156124f05782518255916020019190600101906124d5565b506124fc929150612500565b5090565b5b808211156124fc5760008155600101612501565b60006001600160401b0383111561252e5761252e612b96565b612541601f8401601f1916602001612a2c565b905082815283838301111561255557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461258357600080fd5b919050565b60006020828403121561259a57600080fd5b6119d28261256c565b600080604083850312156125b657600080fd5b6125bf8361256c565b91506125cd6020840161256c565b90509250929050565b6000806000606084860312156125eb57600080fd5b6125f48461256c565b92506126026020850161256c565b9150604084013590509250925092565b6000806000806080858703121561262857600080fd5b6126318561256c565b935061263f6020860161256c565b92506040850135915060608501356001600160401b0381111561266157600080fd5b8501601f8101871361267257600080fd5b61268187823560208401612515565b91505092959194509250565b600080604083850312156126a057600080fd5b6126a98361256c565b915060208301356126b981612bac565b809150509250929050565b600080604083850312156126d757600080fd5b6126e08361256c565b946020939093013593505050565b6000602080838503121561270157600080fd5b82356001600160401b038082111561271857600080fd5b818501915085601f83011261272c57600080fd5b81358181111561273e5761273e612b96565b8060051b915061274f848301612a2c565b8181528481019084860184860187018a101561276a57600080fd5b600095505b83861015612794576127808161256c565b83526001959095019491860191860161276f565b5098975050505050505050565b6000602082840312156127b357600080fd5b81516119d281612bac565b6000602082840312156127d057600080fd5b81356119d281612bba565b6000602082840312156127ed57600080fd5b81516119d281612bba565b60006020828403121561280a57600080fd5b81356001600160401b0381111561282057600080fd5b8201601f8101841361283157600080fd5b6121c084823560208401612515565b60006020828403121561285257600080fd5b5035919050565b60006020828403121561286b57600080fd5b5051919050565b6000806040838503121561288557600080fd5b823591506125cd6020840161256c565b600081518084526128ad816020860160208601612abe565b601f01601f19169290920160200192915050565b6000845160206128d48285838a01612abe565b8551918401916128e78184848a01612abe565b8554920191600090600181811c908083168061290457607f831692505b85831081141561292257634e487b7160e01b85526022600452602485fd5b808015612936576001811461294757612974565b60ff19851688528388019550612974565b60008b81526020902060005b8581101561296c5781548a820152908401908801612953565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129b890830184612895565b9695505050505050565b6020815260006119d26020830184612895565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267536f6c644f55542160c01b604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715612a5457612a54612b96565b604052919050565b60008219821115612a6f57612a6f612b54565b500190565b600082612a8357612a83612b6a565b500490565b6000816000190483118215151615612aa257612aa2612b54565b500290565b600082821015612ab957612ab9612b54565b500390565b60005b83811015612ad9578181015183820152602001612ac1565b8381111561184c5750506000910152565b600181811c90821680612afe57607f821691505b60208210811415612b1f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b3957612b39612b54565b5060010190565b600082612b4f57612b4f612b6a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461111957600080fd5b6001600160e01b03198116811461111957600080fdfea26469706673582212209841c4cb82bec19b36297985ea2e91776f5f6d655b8a1fe54e18c76290ab42ea64736f6c63430008070033
Deployed ByteCode Sourcemap
56607:7337:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39732:372;;;;;;;;;;-1:-1:-1;39732:372:0;;;;;:::i;:::-;;:::i;:::-;;;8981:14:1;;8974:22;8956:41;;8944:2;8929:18;39732:372:0;;;;;;;;42347:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43858:205::-;;;;;;;;;;-1:-1:-1;43858:205:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7620:32:1;;;7602:51;;7590:2;7575:18;43858:205:0;7456:203:1;43418:373:0;;;;;;;;;;-1:-1:-1;43418:373:0;;;;;:::i;:::-;;:::i;:::-;;62421:77;;;;;;;;;;-1:-1:-1;62421:77:0;;;;;:::i;:::-;;:::i;59688:948::-;;;;;;:::i;:::-;;:::i;58314:247::-;;;;;;;;;;-1:-1:-1;58314:247:0;;;;;:::i;:::-;;:::i;56774:19::-;;;;;;;;;;;;;;;;;;;12638:25:1;;;12626:2;12611:18;56774:19:0;12492:177:1;36957:286:0;;;;;;;;;;;;;:::i;56904:28::-;;;;;;;;;;;;;;;;44720:170;;;;;;;;;;-1:-1:-1;44720:170:0;;;;;:::i;:::-;;:::i;38552:1107::-;;;;;;;;;;-1:-1:-1;38552:1107:0;;;;;:::i;:::-;;:::i;57189:41::-;;;;;;;;;;-1:-1:-1;57189:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;63239:231;;;:::i;62332:82::-;;;;;;;;;;-1:-1:-1;62332:82:0;;;;;:::i;:::-;;:::i;56937:22::-;;;;;;;;;;-1:-1:-1;56937:22:0;;;;-1:-1:-1;;;;;56937:22:0;;;44962:185;;;;;;;;;;-1:-1:-1;44962:185:0;;;;;:::i;:::-;;:::i;62156:80::-;;;;;;;;;;-1:-1:-1;62156:80:0;;;;;:::i;:::-;;:::i;58571:939::-;;;;;;:::i;:::-;;:::i;37537:714::-;;;;;;;;;;-1:-1:-1;37537:714:0;;;;;:::i;:::-;;:::i;63002:98::-;;;;;;;;;;-1:-1:-1;63002:98:0;;;;;:::i;:::-;;:::i;42155:124::-;;;;;;;;;;-1:-1:-1;42155:124:0;;;;;:::i;:::-;;:::i;56964:21::-;;;;;;;;;;-1:-1:-1;56964:21:0;;;;-1:-1:-1;;;;;56964:21:0;;;56706;;;;;;;;;;;;;:::i;62598:94::-;;;;;;;;;;-1:-1:-1;62598:94:0;;;;;:::i;:::-;;:::i;40169:206::-;;;;;;;;;;-1:-1:-1;40169:206:0;;;;;:::i;:::-;;:::i;14636:103::-;;;;;;;;;;;;;:::i;56990:25::-;;;;;;;;;;-1:-1:-1;56990:25:0;;;;-1:-1:-1;;;;;56990:25:0;;;62882:116;;;;;;;;;;-1:-1:-1;62882:116:0;;;;;:::i;:::-;;:::i;56798:20::-;;;;;;;;;;;;;;;;13985:87;;;;;;;;;;-1:-1:-1;14058:6:0;;-1:-1:-1;;;;;14058:6:0;13985:87;;57235:40;;;;;;;;;;-1:-1:-1;57235:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;42517:104;;;;;;;;;;;;;:::i;57020:66::-;;;;;;;;;;-1:-1:-1;57020:66:0;;;;-1:-1:-1;;;;;57020:66:0;;;63476:272;;;;;;;;;;-1:-1:-1;63476:272:0;;;;;:::i;:::-;;:::i;60653:861::-;;;;;;:::i;:::-;;:::i;44136:280::-;;;;;;;;;;-1:-1:-1;44136:280:0;;;;;:::i;:::-;;:::i;57280:40::-;;;;;;;;;;-1:-1:-1;57280:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;62797:76;;;;;;;;;;-1:-1:-1;62797:76:0;;;;;:::i;:::-;;:::i;45219:342::-;;;;;;;;;;-1:-1:-1;45219:342:0;;;;;:::i;:::-;;:::i;63759:179::-;;;;;;;;;;-1:-1:-1;63759:179:0;;;;;:::i;:::-;;:::i;62502:92::-;;;;;;;;;;-1:-1:-1;62502:92:0;;;;;:::i;:::-;;:::i;56732:37::-;;;;;;;;;;;;;:::i;62696:94::-;;;;;;;;;;-1:-1:-1;62696:94:0;;;;;:::i;:::-;;:::i;61719:424::-;;;;;;;;;;-1:-1:-1;61719:424:0;;;;;:::i;:::-;;:::i;61521:185::-;;;;;;;;;;;;;:::i;59517:164::-;;;;;;;;;;-1:-1:-1;59517:164:0;;;;;:::i;:::-;;:::i;56875:24::-;;;;;;;;;;;;;;;;63104:122;;;;;;;;;;-1:-1:-1;63104:122:0;;;;;:::i;:::-;;:::i;62243:82::-;;;;;;;;;;-1:-1:-1;62243:82:0;;;;;:::i;:::-;;:::i;44488:164::-;;;;;;;;;;-1:-1:-1;44488:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;44609:25:0;;;44585:4;44609:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;44488:164;56848:22;;;;;;;;;;;;;;;;57091:64;;;;;;;;;;-1:-1:-1;57091:64:0;;;;-1:-1:-1;;;;;57091:64:0;;;14894:201;;;;;;;;;;-1:-1:-1;14894:201:0;;;;;:::i;:::-;;:::i;56823:20::-;;;;;;;;;;;;;;;;57160:24;;;;;;;;;;;;;;;;39732:372;39834:4;-1:-1:-1;;;;;;39871:40:0;;-1:-1:-1;;;39871:40:0;;:105;;-1:-1:-1;;;;;;;39928:48:0;;-1:-1:-1;;;39928:48:0;39871:105;:172;;;-1:-1:-1;;;;;;;39993:50:0;;-1:-1:-1;;;39993:50:0;39871:172;:225;;;-1:-1:-1;;;;;;;;;;26878:40:0;;;40060:36;39851:245;39732:372;-1:-1:-1;;39732:372:0:o;42347:100::-;42401:13;42434:5;42427:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42347:100;:::o;43858:205::-;43926:7;43951:16;43959:7;43951;:16::i;:::-;43946:64;;43976:34;;-1:-1:-1;;;43976:34:0;;;;;;;;;;;43946:64;-1:-1:-1;44031:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;44031:24:0;;43858:205::o;43418:373::-;43491:13;43507:24;43523:7;43507:15;:24::i;:::-;43491:40;;43552:5;-1:-1:-1;;;;;43546:11:0;:2;-1:-1:-1;;;;;43546:11:0;;43542:48;;;43566:24;;-1:-1:-1;;;43566:24:0;;;;;;;;;;;43542:48;12789:10;-1:-1:-1;;;;;43608:21:0;;;;;;:63;;-1:-1:-1;43634:37:0;43651:5;12789:10;44488:164;:::i;43634:37::-;43633:38;43608:63;43604:138;;;43695:35;;-1:-1:-1;;;43695:35:0;;;;;;;;;;;43604:138;43755:28;43764:2;43768:7;43777:5;43755:8;:28::i;:::-;43480:311;43418:373;;:::o;62421:77::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;;;;;;;;;62478:7:::1;:14:::0;;-1:-1:-1;;;;;;62478:14:0::1;-1:-1:-1::0;;;;;62478:14:0;;;::::1;::::0;;;::::1;::::0;;62421:77::o;59688:948::-;59768:4;;59760:35;;-1:-1:-1;;;59760:35:0;;59784:10;59760:35;;;7602:51:1;59798:1:0;;-1:-1:-1;;;;;59768:4:0;;59760:23;;7575:18:1;;59760:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;59752:58;;;;-1:-1:-1;;;59752:58:0;;12361:2:1;59752:58:0;;;12343:21:1;12400:1;12380:18;;;12373:29;-1:-1:-1;;;12418:18:1;;;12411:35;12463:18;;59752:58:0;12159:328:1;59752:58:0;59864:7;;59835:10;59829:17;;;;:5;:17;;;;;;:31;;59849:11;;59829:31;:::i;:::-;:42;;59821:59;;;;-1:-1:-1;;;59821:59:0;;;;;;12029:2:1;12011:21;;;12068:1;12048:18;;;12041:29;-1:-1:-1;;;12101:2:1;12086:18;;12079:34;12145:2;12130:18;;11827:327;59821:59:0;59891:14;59908:13;:11;:13::i;:::-;59891:30;;59954:1;59940:11;:15;59932:24;;;;;;59999:9;;59975:20;59984:11;59975:6;:20;:::i;:::-;:33;;59967:54;;;;-1:-1:-1;;;59967:54:0;;;;;;;:::i;:::-;60061:11;60053:5;;:19;;;;:::i;:::-;60040:9;:32;;60032:41;;;;;;60093:10;60087:17;;;;:5;:17;;;;;:32;;60108:11;;60087:17;:32;;60108:11;;60087:32;:::i;:::-;;;;-1:-1:-1;60130:12:0;;-1:-1:-1;60145:47:0;60175:9;60186:4;60145:29;:47::i;:::-;60130:62;;60203:14;60220:47;60250:9;60261:4;60220:29;:47::i;:::-;60203:64;;60278:14;60295:46;60325:9;60336:3;60295:29;:46::i;:::-;60278:63;;60352:14;60369:45;60399:9;60410:3;60369:29;:45::i;:::-;60435:6;;60428:52;;-1:-1:-1;;;60428:52:0;;60474:4;60428:52;;;7602:51:1;60352:62:0;;-1:-1:-1;;;;;;60435:6:0;;60428:22;;60458:6;;7575:18:1;;60428:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;60499:10:0;;60491:27;;-1:-1:-1;;;;;;60499:10:0;;-1:-1:-1;60511:6:0;;-1:-1:-1;60491:7:0;:27::i;:::-;60537:7;;60529:22;;-1:-1:-1;;;;;60537:7:0;60546:4;60529:7;:22::i;:::-;60570:6;;60562:23;;-1:-1:-1;;;;;60570:6:0;60578;60562:7;:23::i;:::-;60596:34;60606:10;60618:11;60596:9;:34::i;:::-;59741:895;;;;;59688:948;:::o;58314:247::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;58395:14:::1;58412:13;:11;:13::i;:::-;58395:30;;58452:1;58442:7;:11;58434:20;;;::::0;::::1;;58491:9;::::0;58471:16:::1;58480:7:::0;58471:6;:16:::1;:::i;:::-;:29;;58463:50;;;;-1:-1:-1::0;;;58463:50:0::1;;;;;;;:::i;:::-;58522:30;58532:10;58544:7;58522:9;:30::i;36957:286::-:0;37010:7;37208:12;-1:-1:-1;;;;;;;;37208:12:0;;;;37187:13;;;37186:34;;;;-1:-1:-1;;37186:34:0;37179:41;;36957:286::o;44720:170::-;44854:28;44864:4;44870:2;44874:7;44854:9;:28::i;38552:1107::-;38641:7;38674:16;38684:5;38674:9;:16::i;:::-;38665:5;:25;38661:61;;38699:23;;-1:-1:-1;;;38699:23:0;;;;;;;;;;;38661:61;38733:22;38758:13;;-1:-1:-1;;;;;38758:13:0;;38733:22;;39009:557;39029:14;39025:1;:18;39009:557;;;39069:31;39103:14;;;:11;:14;;;;;;;;;39069:48;;;;;;;;;-1:-1:-1;;;;;39069:48:0;;;;-1:-1:-1;;;39069:48:0;;-1:-1:-1;;;;;39069:48:0;;;;;;;;-1:-1:-1;;;39069:48:0;;;;;;;;;;;;;;;;39136:73;;39181:8;;;39136:73;39231:14;;-1:-1:-1;;;;;39231:28:0;;39227:111;;39304:14;;;-1:-1:-1;39227:111:0;39381:5;-1:-1:-1;;;;;39360:26:0;:17;-1:-1:-1;;;;;39360:26:0;;39356:195;;;39430:5;39415:11;:20;39411:85;;;-1:-1:-1;39471:1:0;-1:-1:-1;39464:8:0;;-1:-1:-1;;;39464:8:0;39411:85;39518:13;;;;;39356:195;39050:516;39009:557;39045:3;;39009:557;;;;39643:8;;;63239:231;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;63292:7:::1;63313;14058:6:::0;;-1:-1:-1;;;;;14058:6:0;;13985:87;63313:7:::1;-1:-1:-1::0;;;;;63305:21:0::1;63334;63305:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63291:69;;;63375:2;63367:11;;;::::0;::::1;;63284:186;63239:231::o:0;62332:82::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;62392:5:::1;:16:::0;62332:82::o;44962:185::-;45100:39;45117:4;45123:2;45127:7;45100:39;;;;;;;;;;;;:16;:39::i;62156:80::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;62215:4:::1;:15:::0;62156:80::o;58571:939::-;58654:10;58644:21;;;;:9;:21;;;;;;;;:29;;:21;:29;58636:48;;;;-1:-1:-1;;;58636:48:0;;9434:2:1;58636:48:0;;;9416:21:1;9473:1;9453:18;;;9446:29;-1:-1:-1;;;9491:18:1;;;9484:36;9537:18;;58636:48:0;9232:329:1;58636:48:0;58738:7;;58709:10;58703:17;;;;:5;:17;;;;;;:31;;58723:11;;58703:31;:::i;:::-;:42;;58695:59;;;;-1:-1:-1;;;58695:59:0;;;;;;12029:2:1;12011:21;;;12068:1;12048:18;;;12041:29;-1:-1:-1;;;12101:2:1;12086:18;;12079:34;12145:2;12130:18;;11827:327;58695:59:0;58765:14;58782:13;:11;:13::i;:::-;58765:30;;58828:1;58814:11;:15;58806:24;;;;;;58873:9;;58849:20;58858:11;58849:6;:20;:::i;:::-;:33;;58841:54;;;;-1:-1:-1;;;58841:54:0;;;;;;;:::i;:::-;58935:11;58927:5;;:19;;;;:::i;:::-;58914:9;:32;;58906:41;;;;;;58967:10;58961:17;;;;:5;:17;;;;;:32;;58982:11;;58961:17;:32;;58982:11;;58961:32;:::i;37537:714::-;37604:7;37649:13;;-1:-1:-1;;;;;37649:13:0;37604:7;;37864:328;37884:14;37880:1;:18;37864:328;;;37924:31;37958:14;;;:11;:14;;;;;;;;;37924:48;;;;;;;;;-1:-1:-1;;;;;37924:48:0;;;;-1:-1:-1;;;37924:48:0;;-1:-1:-1;;;;;37924:48:0;;;;;;;;-1:-1:-1;;;37924:48:0;;;;;;;;;;;;;;37991:186;;38056:5;38041:11;:20;38037:85;;;-1:-1:-1;38097:1:0;37537:714;-1:-1:-1;;;;37537:714:0:o;38037:85::-;38144:13;;;;;37991:186;-1:-1:-1;37900:3:0;;37864:328;;;;38220:23;;-1:-1:-1;;;38220:23:0;;;;;;;;;;;63002:98;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;63073:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;63002:98:::0;:::o;42155:124::-;42219:7;42246:20;42258:7;42246:11;:20::i;:::-;:25;;42155:124;-1:-1:-1;;42155:124:0:o;56706:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;62598:94::-;62650:7;62681:5;;62674:4;:12;;;;:::i;40169:206::-;40233:7;-1:-1:-1;;;;;40257:19:0;;40253:60;;40285:28;;-1:-1:-1;;;40285:28:0;;;;;;;;;;;40253:60;-1:-1:-1;;;;;;40339:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;40339:27:0;;40169:206::o;14636:103::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;14701:30:::1;14728:1;14701:18;:30::i;:::-;14636:103::o:0;62882:116::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;62959:13:::1;:33:::0;62882:116::o;42517:104::-;42573:13;42606:7;42599:14;;;;;:::i;63476:272::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;63562:39:::1;::::0;-1:-1:-1;;;63562:39:0;;63595:4:::1;63562:39;::::0;::::1;7602:51:1::0;63544:15:0::1;::::0;-1:-1:-1;;;;;63562:24:0;::::1;::::0;::::1;::::0;7575:18:1;;63562:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63544:57:::0;-1:-1:-1;63620:12:0;63612:64:::1;;;::::0;-1:-1:-1;;;63612:64:0;;9768:2:1;63612:64:0::1;::::0;::::1;9750:21:1::0;9807:2;9787:18;;;9780:30;9846:34;9826:18;;;9819:62;-1:-1:-1;;;9897:18:1;;;9890:37;9944:19;;63612:64:0::1;9566:403:1::0;63612:64:0::1;63687:53;::::0;-1:-1:-1;;;63687:53:0;;63719:10:::1;63687:53;::::0;::::1;8711:51:1::0;8778:18;;;8771:34;;;-1:-1:-1;;;;;63687:23:0;::::1;::::0;::::1;::::0;8684:18:1;;63687:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;60653:861::-:0;60735:15;60722:9;;:28;;60714:46;;;;-1:-1:-1;;;60714:46:0;;10583:2:1;60714:46:0;;;10565:21:1;10622:1;10602:18;;;10595:29;-1:-1:-1;;;10640:18:1;;;10633:35;10685:18;;60714:46:0;10381:328:1;60714:46:0;60771:14;60788:13;:11;:13::i;:::-;60771:30;;60834:1;60820:11;:15;60812:24;;;;;;60870:13;;60855:11;:28;;60847:37;;;;;;60930:9;;60906:20;60915:11;60906:6;:20;:::i;:::-;:33;;60898:42;;;;;;60979:11;60972:4;;:18;;;;:::i;:::-;60959:9;:31;;60951:40;;;;;;61005:12;61020:47;61050:9;61061:4;61020:29;:47::i;44136:280::-;-1:-1:-1;;;;;44227:24:0;;12789:10;44227:24;44223:54;;;44260:17;;-1:-1:-1;;;44260:17:0;;;;;;;;;;;44223:54;12789:10;44291:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;44291:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;44291:53:0;;;;;;;;;;44360:48;;8956:41:1;;;44291:42:0;;12789:10;44360:48;;8929:18:1;44360:48:0;;;;;;;44136:280;;:::o;62797:76::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;62853:6:::1;:14:::0;;-1:-1:-1;;;;;;62853:14:0::1;-1:-1:-1::0;;;;;62853:14:0;;;::::1;::::0;;;::::1;::::0;;62797:76::o;45219:342::-;45386:28;45396:4;45402:2;45406:7;45386:9;:28::i;:::-;45430:48;45453:4;45459:2;45463:7;45472:5;45430:22;:48::i;:::-;45425:129;;45502:40;;-1:-1:-1;;;45502:40:0;;;;;;;;;;;45425:129;45219:342;;;;:::o;63759:179::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;63856:74:::1;::::0;-1:-1:-1;;;63856:74:0;;63893:4:::1;63856:74;::::0;::::1;7904:34:1::0;63908:10:0::1;7954:18:1::0;;;7947:43;8006:18;;;7999:34;;;-1:-1:-1;;;;;63856:28:0;::::1;::::0;::::1;::::0;7839:18:1;;63856:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;62502:92:::0;62553:7;62584:4;;62577;:11;;;;:::i;56732:37::-;;;;;;;:::i;62696:94::-;62748:7;62779:5;;62772:4;:12;;;;:::i;61719:424::-;61817:13;61858:16;61866:7;61858;:16::i;:::-;61842:97;;;;-1:-1:-1;;;61842:97:0;;11613:2:1;61842:97:0;;;11595:21:1;11652:2;11632:18;;;11625:30;11691:34;11671:18;;;11664:62;-1:-1:-1;;;11742:18:1;;;11735:45;11797:19;;61842:97:0;11411:411:1;61842:97:0;61949:28;61980:10;:8;:10::i;:::-;61949:41;;62035:1;62010:14;62004:28;:32;:133;;;;;;;;;;;;;;;;;62072:14;62088:18;:7;:16;:18::i;:::-;62108:13;62055:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62004:133;61997:140;61719:424;-1:-1:-1;;;61719:424:0:o;61521:185::-;61588:4;;61580:35;;-1:-1:-1;;;61580:35:0;;61604:10;61580:35;;;7602:51:1;61563:4:0;;;;-1:-1:-1;;;;;61588:4:0;;;;61580:23;;7575:18:1;;61580:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;61577:124;;;-1:-1:-1;61640:4:0;;61521:185::o;61577:124::-;-1:-1:-1;61686:5:0;;61521:185::o;59517:164::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;59588:9:::1;59583:93;59607:4;:11;59603:1;:15;59583:93;;;59660:4;59639:9;:18;59649:4;59654:1;59649:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;59639:18:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;59639:18:0;:25;;-1:-1:-1;;59639:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59620:3;::::1;::::0;::::1;:::i;:::-;;;;59583:93;;63104:122:::0;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;63187:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;62243:82::-:0;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;62303:5:::1;:16:::0;62243:82::o;14894:201::-;14058:6;;-1:-1:-1;;;;;14058:6:0;12789:10;14205:23;14197:68;;;;-1:-1:-1;;;14197:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14983:22:0;::::1;14975:73;;;::::0;-1:-1:-1;;;14975:73:0;;10176:2:1;14975:73:0::1;::::0;::::1;10158:21:1::0;10215:2;10195:18;;;10188:30;10254:34;10234:18;;;10227:62;-1:-1:-1;;;10305:18:1;;;10298:36;10351:19;;14975:73:0::1;9974:402:1::0;14975:73:0::1;15059:28;15078:8;15059:18;:28::i;45817:144::-:0;45874:4;45908:13;;-1:-1:-1;;;;;45908:13:0;45898:23;;:55;;;;-1:-1:-1;;45926:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;45926:27:0;;;;45925:28;;45817:144::o;53059:196::-;53174:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;53174:29:0;-1:-1:-1;;;;;53174:29:0;;;;;;;;;53219:28;;53174:24;;53219:28;;;;;;;53059:196;;;:::o;56383:213::-;56498:23;56552:36;56582:5;56552:25;:6;56563:13;56552:10;:25::i;:::-;:29;;:36::i;57945:362::-;58080:12;58106:10;-1:-1:-1;;;;;58098:24:0;58144:7;58171:5;58098:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58079:112;;;58290:7;58282:16;;;;;45970:104;46039:27;46049:2;46053:8;46039:27;;;;;;;;;;;;:9;:27::i;48544:2120::-;48659:35;48697:20;48709:7;48697:11;:20::i;:::-;48773:18;;48659:58;;-1:-1:-1;48731:22:0;;-1:-1:-1;;;;;48757:34:0;12789:10;-1:-1:-1;;;;;48757:34:0;;:101;;;-1:-1:-1;48825:18:0;;48808:50;;12789:10;44488:164;:::i;48808:50::-;48757:154;;;-1:-1:-1;12789:10:0;48875:20;48887:7;48875:11;:20::i;:::-;-1:-1:-1;;;;;48875:36:0;;48757:154;48731:181;;48931:17;48926:66;;48957:35;;-1:-1:-1;;;48957:35:0;;;;;;;;;;;48926:66;49029:4;-1:-1:-1;;;;;49007:26:0;:13;:18;;;-1:-1:-1;;;;;49007:26:0;;49003:67;;49042:28;;-1:-1:-1;;;49042:28:0;;;;;;;;;;;49003:67;-1:-1:-1;;;;;49085:16:0;;49081:52;;49110:23;;-1:-1:-1;;;49110:23:0;;;;;;;;;;;49081:52;49256:49;49273:1;49277:7;49286:13;:18;;;49256:8;:49::i;:::-;-1:-1:-1;;;;;49602:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;49602:31:0;;;-1:-1:-1;;;;;49602:31:0;;;-1:-1:-1;;49602:31:0;;;;;;;49648:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;49648:29:0;;;;;;;;;;;49695:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;49740:61:0;;;;-1:-1:-1;;;49785:15:0;49740:61;;;;;;;;;;;50076:11;;;50106:24;;;;;:29;50076:11;;50106:29;50102:445;;50331:13;;-1:-1:-1;;;;;50331:13:0;50317:27;;50313:219;;;50401:18;;;50369:24;;;:11;:24;;;;;;;;:50;;50484:28;;;;-1:-1:-1;;;;;50442:70:0;-1:-1:-1;;;50442:70:0;-1:-1:-1;;;;;;50442:70:0;;;-1:-1:-1;;;;;50369:50:0;;;50442:70;;;;;;;50313:219;49577:981;50595:7;50591:2;-1:-1:-1;;;;;50576:27:0;50585:4;-1:-1:-1;;;;;50576:27:0;;;;;;;;;;;50614:42;48648:2016;;48544:2120;;;:::o;41010:1082::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;41177:13:0;;41120:7;;-1:-1:-1;;;;;41177:13:0;41170:20;;41166:859;;;41211:31;41245:17;;;:11;:17;;;;;;;;;41211:51;;;;;;;;;-1:-1:-1;;;;;41211:51:0;;;;-1:-1:-1;;;41211:51:0;;-1:-1:-1;;;;;41211:51:0;;;;;;;;-1:-1:-1;;;41211:51:0;;;;;;;;;;;;;;41281:729;;41331:14;;-1:-1:-1;;;;;41331:28:0;;41327:101;;41395:9;41010:1082;-1:-1:-1;;;41010:1082:0:o;41327:101::-;-1:-1:-1;;;41770:6:0;41815:17;;;;:11;:17;;;;;;;;;41803:29;;;;;;;;;-1:-1:-1;;;;;41803:29:0;;;;;-1:-1:-1;;;41803:29:0;;-1:-1:-1;;;;;41803:29:0;;;;;;;;-1:-1:-1;;;41803:29:0;;;;;;;;;;;;;41863:28;41859:109;;41931:9;41010:1082;-1:-1:-1;;;41010:1082:0:o;41859:109::-;41730:261;;;41192:833;41166:859;42053:31;;-1:-1:-1;;;42053:31:0;;;;;;;;;;;15255:191;15348:6;;;-1:-1:-1;;;;;15365:17:0;;;-1:-1:-1;;;;;;15365:17:0;;;;;;;15398:40;;15348:6;;;15365:17;15348:6;;15398:40;;15329:16;;15398:40;15318:128;15255:191;:::o;53821:790::-;53976:4;-1:-1:-1;;;;;53997:13:0;;16981:19;:23;53993:611;;54033:72;;-1:-1:-1;;;54033:72:0;;-1:-1:-1;;;;;54033:36:0;;;;;:72;;12789:10;;54084:4;;54090:7;;54099:5;;54033:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54033:72:0;;;;;;;;-1:-1:-1;;54033:72:0;;;;;;;;;;;;:::i;:::-;;;54029:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54279:13:0;;54275:259;;54329:40;;-1:-1:-1;;;54329:40:0;;;;;;;;;;;54275:259;54484:6;54478:13;54469:6;54465:2;54461:15;54454:38;54029:520;-1:-1:-1;;;;;;54156:55:0;-1:-1:-1;;;54156:55:0;;-1:-1:-1;54149:62:0;;53993:611;-1:-1:-1;54588:4:0;53993:611;53821:790;;;;;;:::o;57836:102::-;57896:13;57925:7;57918:14;;;;;:::i;10271:723::-;10327:13;10548:10;10544:53;;-1:-1:-1;;10575:10:0;;;;;;;;;;;;-1:-1:-1;;;10575:10:0;;;;;10271:723::o;10544:53::-;10622:5;10607:12;10663:78;10670:9;;10663:78;;10696:8;;;;:::i;:::-;;-1:-1:-1;10719:10:0;;-1:-1:-1;10727:2:0;10719:10;;:::i;:::-;;;10663:78;;;10751:19;10783:6;-1:-1:-1;;;;;10773:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10773:17:0;;10751:39;;10801:154;10808:10;;10801:154;;10835:11;10845:1;10835:11;;:::i;:::-;;-1:-1:-1;10904:10:0;10912:2;10904:5;:10;:::i;:::-;10891:24;;:2;:24;:::i;:::-;10878:39;;10861:6;10868;10861:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;10861:56:0;;;;;;;;-1:-1:-1;10932:11:0;10941:2;10932:11;;:::i;:::-;;;10801:154;;6479:98;6537:7;6564:5;6568:1;6564;:5;:::i;6878:98::-;6936:7;6963:5;6967:1;6963;:5;:::i;46438:163::-;46561:32;46567:2;46571:8;46581:5;46588:4;47000:20;47023:13;-1:-1:-1;;;;;47023:13:0;-1:-1:-1;;;;;47051:16:0;;47047:48;;47076:19;;-1:-1:-1;;;47076:19:0;;;;;;;;;;;47047:48;47110:13;47106:44;;47132:18;;-1:-1:-1;;;47132:18:0;;;;;;;;;;;47106:44;-1:-1:-1;;;;;47504:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;;;;;47563:49:0;;-1:-1:-1;;;;;47504:44:0;;;;;;;47563:49;;;;-1:-1:-1;;47504:44:0;;;;;;47563:49;;;;;;;;;;;;;;;;47630:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;47680:66:0;;;;-1:-1:-1;;;47730:15:0;47680:66;;;;;;;;;;;47630:25;;47817:328;47837:8;47833:1;:12;47817:328;;;47876:38;;47901:12;;-1:-1:-1;;;;;47876:38:0;;;47893:1;;47876:38;;47893:1;;47876:38;47937:4;:68;;;;;47946:59;47977:1;47981:2;47985:12;47999:5;47946:22;:59::i;:::-;47945:60;47937:68;47933:164;;;48037:40;;-1:-1:-1;;;48037:40:0;;;;;;;;;;;47933:164;48115:14;;;;;47847:3;47817:328;;;-1:-1:-1;48162:13:0;:37;;-1:-1:-1;;;;;;48162:37:0;-1:-1:-1;;;;;48162:37:0;;;;;;;;;;48221:60;45219:342;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:186::-;662:6;715:2;703:9;694:7;690:23;686:32;683:52;;;731:1;728;721:12;683:52;754:29;773:9;754:29;:::i;794:260::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;;1010:38;1044:2;1033:9;1029:18;1010:38;:::i;:::-;1000:48;;794:260;;;;;:::o;1059:328::-;1136:6;1144;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1244:29;1263:9;1244:29;:::i;:::-;1234:39;;1292:38;1326:2;1315:9;1311:18;1292:38;:::i;:::-;1282:48;;1377:2;1366:9;1362:18;1349:32;1339:42;;1059:328;;;;;:::o;1392:666::-;1487:6;1495;1503;1511;1564:3;1552:9;1543:7;1539:23;1535:33;1532:53;;;1581:1;1578;1571:12;1532:53;1604:29;1623:9;1604:29;:::i;:::-;1594:39;;1652:38;1686:2;1675:9;1671:18;1652:38;:::i;:::-;1642:48;;1737:2;1726:9;1722:18;1709:32;1699:42;;1792:2;1781:9;1777:18;1764:32;-1:-1:-1;;;;;1811:6:1;1808:30;1805:50;;;1851:1;1848;1841:12;1805:50;1874:22;;1927:4;1919:13;;1915:27;-1:-1:-1;1905:55:1;;1956:1;1953;1946:12;1905:55;1979:73;2044:7;2039:2;2026:16;2021:2;2017;2013:11;1979:73;:::i;:::-;1969:83;;;1392:666;;;;;;;:::o;2063:315::-;2128:6;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2228:29;2247:9;2228:29;:::i;:::-;2218:39;;2307:2;2296:9;2292:18;2279:32;2320:28;2342:5;2320:28;:::i;:::-;2367:5;2357:15;;;2063:315;;;;;:::o;2383:254::-;2451:6;2459;2512:2;2500:9;2491:7;2487:23;2483:32;2480:52;;;2528:1;2525;2518:12;2480:52;2551:29;2570:9;2551:29;:::i;:::-;2541:39;2627:2;2612:18;;;;2599:32;;-1:-1:-1;;;2383:254:1:o;2642:963::-;2726:6;2757:2;2800;2788:9;2779:7;2775:23;2771:32;2768:52;;;2816:1;2813;2806:12;2768:52;2856:9;2843:23;-1:-1:-1;;;;;2926:2:1;2918:6;2915:14;2912:34;;;2942:1;2939;2932:12;2912:34;2980:6;2969:9;2965:22;2955:32;;3025:7;3018:4;3014:2;3010:13;3006:27;2996:55;;3047:1;3044;3037:12;2996:55;3083:2;3070:16;3105:2;3101;3098:10;3095:36;;;3111:18;;:::i;:::-;3157:2;3154:1;3150:10;3140:20;;3180:28;3204:2;3200;3196:11;3180:28;:::i;:::-;3242:15;;;3273:12;;;;3305:11;;;3335;;;3331:20;;3328:33;-1:-1:-1;3325:53:1;;;3374:1;3371;3364:12;3325:53;3396:1;3387:10;;3406:169;3420:2;3417:1;3414:9;3406:169;;;3477:23;3496:3;3477:23;:::i;:::-;3465:36;;3438:1;3431:9;;;;;3521:12;;;;3553;;3406:169;;;-1:-1:-1;3594:5:1;2642:963;-1:-1:-1;;;;;;;;2642:963:1:o;3610:245::-;3677:6;3730:2;3718:9;3709:7;3705:23;3701:32;3698:52;;;3746:1;3743;3736:12;3698:52;3778:9;3772:16;3797:28;3819:5;3797:28;:::i;3860:245::-;3918:6;3971:2;3959:9;3950:7;3946:23;3942:32;3939:52;;;3987:1;3984;3977:12;3939:52;4026:9;4013:23;4045:30;4069:5;4045:30;:::i;4110:249::-;4179:6;4232:2;4220:9;4211:7;4207:23;4203:32;4200:52;;;4248:1;4245;4238:12;4200:52;4280:9;4274:16;4299:30;4323:5;4299:30;:::i;4364:450::-;4433:6;4486:2;4474:9;4465:7;4461:23;4457:32;4454:52;;;4502:1;4499;4492:12;4454:52;4542:9;4529:23;-1:-1:-1;;;;;4567:6:1;4564:30;4561:50;;;4607:1;4604;4597:12;4561:50;4630:22;;4683:4;4675:13;;4671:27;-1:-1:-1;4661:55:1;;4712:1;4709;4702:12;4661:55;4735:73;4800:7;4795:2;4782:16;4777:2;4773;4769:11;4735:73;:::i;4819:180::-;4878:6;4931:2;4919:9;4910:7;4906:23;4902:32;4899:52;;;4947:1;4944;4937:12;4899:52;-1:-1:-1;4970:23:1;;4819:180;-1:-1:-1;4819:180:1:o;5004:184::-;5074:6;5127:2;5115:9;5106:7;5102:23;5098:32;5095:52;;;5143:1;5140;5133:12;5095:52;-1:-1:-1;5166:16:1;;5004:184;-1:-1:-1;5004:184:1:o;5193:254::-;5261:6;5269;5322:2;5310:9;5301:7;5297:23;5293:32;5290:52;;;5338:1;5335;5328:12;5290:52;5374:9;5361:23;5351:33;;5403:38;5437:2;5426:9;5422:18;5403:38;:::i;5452:257::-;5493:3;5531:5;5525:12;5558:6;5553:3;5546:19;5574:63;5630:6;5623:4;5618:3;5614:14;5607:4;5600:5;5596:16;5574:63;:::i;:::-;5691:2;5670:15;-1:-1:-1;;5666:29:1;5657:39;;;;5698:4;5653:50;;5452:257;-1:-1:-1;;5452:257:1:o;5714:1527::-;5938:3;5976:6;5970:13;6002:4;6015:51;6059:6;6054:3;6049:2;6041:6;6037:15;6015:51;:::i;:::-;6129:13;;6088:16;;;;6151:55;6129:13;6088:16;6173:15;;;6151:55;:::i;:::-;6295:13;;6228:20;;;6268:1;;6355;6377:18;;;;6430;;;;6457:93;;6535:4;6525:8;6521:19;6509:31;;6457:93;6598:2;6588:8;6585:16;6565:18;6562:40;6559:167;;;-1:-1:-1;;;6625:33:1;;6681:4;6678:1;6671:15;6711:4;6632:3;6699:17;6559:167;6742:18;6769:110;;;;6893:1;6888:328;;;;6735:481;;6769:110;-1:-1:-1;;6804:24:1;;6790:39;;6849:20;;;;-1:-1:-1;6769:110:1;;6888:328;13027:1;13020:14;;;13064:4;13051:18;;6983:1;6997:169;7011:8;7008:1;7005:15;6997:169;;;7093:14;;7078:13;;;7071:37;7136:16;;;;7028:10;;6997:169;;;7001:3;;7197:8;7190:5;7186:20;7179:27;;6735:481;-1:-1:-1;7232:3:1;;5714:1527;-1:-1:-1;;;;;;;;;;;5714:1527:1:o;8044:488::-;-1:-1:-1;;;;;8313:15:1;;;8295:34;;8365:15;;8360:2;8345:18;;8338:43;8412:2;8397:18;;8390:34;;;8460:3;8455:2;8440:18;;8433:31;;;8238:4;;8481:45;;8506:19;;8498:6;8481:45;:::i;:::-;8473:53;8044:488;-1:-1:-1;;;;;;8044:488:1:o;9008:219::-;9157:2;9146:9;9139:21;9120:4;9177:44;9217:2;9206:9;9202:18;9194:6;9177:44;:::i;10714:356::-;10916:2;10898:21;;;10935:18;;;10928:30;10994:34;10989:2;10974:18;;10967:62;11061:2;11046:18;;10714:356::o;11075:331::-;11277:2;11259:21;;;11316:1;11296:18;;;11289:29;-1:-1:-1;;;11349:2:1;11334:18;;11327:38;11397:2;11382:18;;11075:331::o;12674:275::-;12745:2;12739:9;12810:2;12791:13;;-1:-1:-1;;12787:27:1;12775:40;;-1:-1:-1;;;;;12830:34:1;;12866:22;;;12827:62;12824:88;;;12892:18;;:::i;:::-;12928:2;12921:22;12674:275;;-1:-1:-1;12674:275:1:o;13080:128::-;13120:3;13151:1;13147:6;13144:1;13141:13;13138:39;;;13157:18;;:::i;:::-;-1:-1:-1;13193:9:1;;13080:128::o;13213:120::-;13253:1;13279;13269:35;;13284:18;;:::i;:::-;-1:-1:-1;13318:9:1;;13213:120::o;13338:168::-;13378:7;13444:1;13440;13436:6;13432:14;13429:1;13426:21;13421:1;13414:9;13407:17;13403:45;13400:71;;;13451:18;;:::i;:::-;-1:-1:-1;13491:9:1;;13338:168::o;13511:125::-;13551:4;13579:1;13576;13573:8;13570:34;;;13584:18;;:::i;:::-;-1:-1:-1;13621:9:1;;13511:125::o;13641:258::-;13713:1;13723:113;13737:6;13734:1;13731:13;13723:113;;;13813:11;;;13807:18;13794:11;;;13787:39;13759:2;13752:10;13723:113;;;13854:6;13851:1;13848:13;13845:48;;;-1:-1:-1;;13889:1:1;13871:16;;13864:27;13641:258::o;13904:380::-;13983:1;13979:12;;;;14026;;;14047:61;;14101:4;14093:6;14089:17;14079:27;;14047:61;14154:2;14146:6;14143:14;14123:18;14120:38;14117:161;;;14200:10;14195:3;14191:20;14188:1;14181:31;14235:4;14232:1;14225:15;14263:4;14260:1;14253:15;14117:161;;13904:380;;;:::o;14289:135::-;14328:3;-1:-1:-1;;14349:17:1;;14346:43;;;14369:18;;:::i;:::-;-1:-1:-1;14416:1:1;14405:13;;14289:135::o;14429:112::-;14461:1;14487;14477:35;;14492:18;;:::i;:::-;-1:-1:-1;14526:9:1;;14429:112::o;14546:127::-;14607:10;14602:3;14598:20;14595:1;14588:31;14638:4;14635:1;14628:15;14662:4;14659:1;14652:15;14678:127;14739:10;14734:3;14730:20;14727:1;14720:31;14770:4;14767:1;14760:15;14794:4;14791:1;14784:15;14810:127;14871:10;14866:3;14862:20;14859:1;14852:31;14902:4;14899:1;14892:15;14926:4;14923:1;14916:15;14942:127;15003:10;14998:3;14994:20;14991:1;14984:31;15034:4;15031:1;15024:15;15058:4;15055:1;15048:15;15074:118;15160:5;15153:13;15146:21;15139:5;15136:32;15126:60;;15182:1;15179;15172:12;15197:131;-1:-1:-1;;;;;;15271:32:1;;15261:43;;15251:71;;15318:1;15315;15308:12
Swarm Source
ipfs://9841c4cb82bec19b36297985ea2e91776f5f6d655b8a1fe54e18c76290ab42ea