ERC-721
Overview
Max Total Supply
500 ANYA
Holders
123
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 ANYALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PixelAnya
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-25 */ // File: contracts/Anya.sol /** *Submitted for verification at Etherscan.io on 2022-05-24 */ // 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/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (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); } // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @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..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // 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) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @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) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); 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.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert("ERC721A: unable to get token of owner by index"); } /** * @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) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), "ERC721A: number minted query for the zero address"); return uint256(_addressData[owner].numberMinted); } /** * 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) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert("ERC721A: unable to determine the owner of token"); } /** * @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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; } /** * @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); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _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 override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } 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 + 1; require(to != address(0), "ERC721A: mint to the zero address"); require(quantity != 0, "ERC721A: quantity must be greater than 0"); _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 > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(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) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved"); require(prevOwnership.addr == from, "ERC721A: transfer from incorrect owner"); require(to != address(0), "ERC721A: transfer to the zero address"); _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**256. 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)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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("ERC721A: transfer to non ERC721Receiver implementer"); } 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. * * 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`. */ 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. * * 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` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract PixelAnya is ERC721A, Ownable, ReentrancyGuard { string public baseURI; uint public price = 0.002 ether; uint public maxPerTx = 10; uint public maxPerWallet = 10; uint public maxPerTxFree = 2; uint public totalFree = 100; uint public maxSupply = 500; uint public nextOwnerToExplicitlySet; bool public mintEnabled; constructor() ERC721A("Pixel Anya", "ANYA"){} function mint(uint256 amt) external payable { uint cost = price; if(totalSupply() + amt < totalFree + 1) { cost = 0; } require(msg.sender == tx.origin,"waku waku"); require(msg.value == amt * cost,"Please send the exact amount."); require(totalSupply() + amt < maxSupply + 1,"No more NFTs"); require(mintEnabled, "Minting is not live yet."); require(numberMinted(msg.sender) + amt <= maxPerWallet,"Too many per wallet!"); require(amt < maxPerTx + 1, "Max per TX reached."); if(totalFree >= totalSupply()){ require(maxPerTxFree >= amt , "Excess max per free tx"); }else{ require(maxPerTx >= amt , "Excess max per paid tx"); require(amt * price == msg.value, "Invalid funds provided"); } _safeMint(msg.sender, amt); } function ownerBatchMint(uint256 amt) external onlyOwner { require(totalSupply() + amt < maxSupply + 1,"too many!"); _safeMint(msg.sender, amt); } function toggleMinting() external onlyOwner { mintEnabled = !mintEnabled; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function setBaseURI(string calldata baseURI_) external onlyOwner { baseURI = baseURI_; } function setPrice(uint256 price_) external onlyOwner { price = price_; } function setTotalFree(uint256 totalFree_) external onlyOwner { totalFree = totalFree_; } function setMaxPerTx(uint256 maxPerTx_) external onlyOwner { maxPerTx = maxPerTx_; } function setMaxPerWallet(uint256 maxPerWallet_) external onlyOwner { maxPerWallet = maxPerWallet_; } function setmaxSupply(uint256 maxSupply_) external onlyOwner { maxSupply = maxSupply_; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function withdraw() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { require(quantity != 0, "quantity must be nonzero"); require(currentIndex != 0, "no tokens minted yet"); uint256 _nextOwnerToExplicitlySet = nextOwnerToExplicitlySet; require(_nextOwnerToExplicitlySet < currentIndex, "all ownerships have been set"); // Index underflow is impossible. // Counter or index overflow is incredibly unrealistic. unchecked { uint256 endIndex = _nextOwnerToExplicitlySet + quantity - 1; // Set the end index to be the last token index if (endIndex + 1 > currentIndex) { endIndex = currentIndex - 1; } for (uint256 i = _nextOwnerToExplicitlySet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i].addr = ownership.addr; _ownerships[i].startTimestamp = ownership.startTimestamp; } } nextOwnerToExplicitlySet = endIndex + 1; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","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":"amt","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"ownerBatchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerTx_","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerWallet_","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalFree_","type":"uint256"}],"name":"setTotalFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266071afd498d0000600a55600a600b55600a600c556002600d556064600e556101f4600f553480156200003657600080fd5b506040518060400160405280600a81526020017f506978656c20416e7961000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f414e5941000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000bb929190620001d3565b508060029080519060200190620000d4929190620001d3565b505050620000f7620000eb6200010560201b60201c565b6200010d60201b60201c565b6001600881905550620002e8565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001e19062000283565b90600052602060002090601f01602090048101928262000205576000855562000251565b82601f106200022057805160ff191683800117855562000251565b8280016001018555821562000251579182015b828111156200025057825182559160200191906001019062000233565b5b50905062000260919062000264565b5090565b5b808211156200027f57600081600090555060010162000265565b5090565b600060028204905060018216806200029c57607f821691505b60208210811415620002b357620002b2620002b9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61524f80620002f86000396000f3fe6080604052600436106102465760003560e01c80637d55094d11610139578063b88d4fde116100b6578063d7224ba01161007a578063d7224ba014610859578063dc33e68114610884578063e268e4d3146108c1578063e985e9c5146108ea578063f2fde38b14610927578063f968adbe1461095057610246565b8063b88d4fde14610774578063c6f6f2161461079d578063c87b56dd146107c6578063d123973014610803578063d5abeb011461082e57610246565b806395d89b41116100fd57806395d89b41146106ae578063980a70d2146106d9578063a035b1fe14610704578063a0712d681461072f578063a22cb4651461074b57610246565b80637d55094d146105dd5780638da5cb5b146105f45780638db89f071461061f57806391b7f5ed146106485780639231ab2a1461067157610246565b80633ccfd60b116101c7578063563aaf111161018b578063563aaf11146104f85780636352211e146105215780636c0360eb1461055e57806370a0823114610589578063715018a6146105c657610246565b80633ccfd60b1461042757806342842e0e1461043e578063453c2310146104675780634f6ccce71461049257806355f804b3146104cf57610246565b8063228025e81161020e578063228025e81461034457806323b872dd1461036d5780632d20fb60146103965780632f745c59146103bf578063333e44e6146103fc57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806318160ddd14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613852565b61097b565b60405161027f9190613ffd565b60405180910390f35b34801561029457600080fd5b5061029d610ac5565b6040516102aa9190614018565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906138f9565b610b57565b6040516102e79190613f96565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613812565b610bdc565b005b34801561032557600080fd5b5061032e610cf5565b60405161033b91906144b5565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906138f9565b610cfe565b005b34801561037957600080fd5b50610394600480360381019061038f91906136fc565b610d84565b005b3480156103a257600080fd5b506103bd60048036038101906103b891906138f9565b610d94565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190613812565b610e72565b6040516103f391906144b5565b60405180910390f35b34801561040857600080fd5b50610411611064565b60405161041e91906144b5565b60405180910390f35b34801561043357600080fd5b5061043c61106a565b005b34801561044a57600080fd5b50610465600480360381019061046091906136fc565b6111eb565b005b34801561047357600080fd5b5061047c61120b565b60405161048991906144b5565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b491906138f9565b611211565b6040516104c691906144b5565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906138ac565b611264565b005b34801561050457600080fd5b5061051f600480360381019061051a91906138f9565b6112f6565b005b34801561052d57600080fd5b50610548600480360381019061054391906138f9565b61137c565b6040516105559190613f96565b60405180910390f35b34801561056a57600080fd5b50610573611392565b6040516105809190614018565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab919061368f565b611420565b6040516105bd91906144b5565b60405180910390f35b3480156105d257600080fd5b506105db611509565b005b3480156105e957600080fd5b506105f2611591565b005b34801561060057600080fd5b50610609611639565b6040516106169190613f96565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906138f9565b611663565b005b34801561065457600080fd5b5061066f600480360381019061066a91906138f9565b61174e565b005b34801561067d57600080fd5b50610698600480360381019061069391906138f9565b6117d4565b6040516106a5919061449a565b60405180910390f35b3480156106ba57600080fd5b506106c36117ec565b6040516106d09190614018565b60405180910390f35b3480156106e557600080fd5b506106ee61187e565b6040516106fb91906144b5565b60405180910390f35b34801561071057600080fd5b50610719611884565b60405161072691906144b5565b60405180910390f35b610749600480360381019061074491906138f9565b61188a565b005b34801561075757600080fd5b50610772600480360381019061076d91906137d2565b611bcf565b005b34801561078057600080fd5b5061079b6004803603810190610796919061374f565b611d50565b005b3480156107a957600080fd5b506107c460048036038101906107bf91906138f9565b611dac565b005b3480156107d257600080fd5b506107ed60048036038101906107e891906138f9565b611e32565b6040516107fa9190614018565b60405180910390f35b34801561080f57600080fd5b50610818611eda565b6040516108259190613ffd565b60405180910390f35b34801561083a57600080fd5b50610843611eed565b60405161085091906144b5565b60405180910390f35b34801561086557600080fd5b5061086e611ef3565b60405161087b91906144b5565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061368f565b611ef9565b6040516108b891906144b5565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e391906138f9565b611f0b565b005b3480156108f657600080fd5b50610911600480360381019061090c91906136bc565b611f91565b60405161091e9190613ffd565b60405180910390f35b34801561093357600080fd5b5061094e6004803603810190610949919061368f565b612025565b005b34801561095c57600080fd5b5061096561211d565b60405161097291906144b5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aae57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abe5750610abd82612123565b5b9050919050565b606060018054610ad490614753565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090614753565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b628261218d565b610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b989061447a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be78261137c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f9061435a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7761219a565b73ffffffffffffffffffffffffffffffffffffffff161480610ca65750610ca581610ca061219a565b611f91565b5b610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc906141da565b60405180910390fd5b610cf08383836121a2565b505050565b60008054905090565b610d0661219a565b73ffffffffffffffffffffffffffffffffffffffff16610d24611639565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d719061425a565b60405180910390fd5b80600f8190555050565b610d8f838383612254565b505050565b610d9c61219a565b73ffffffffffffffffffffffffffffffffffffffff16610dba611639565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061425a565b60405180910390fd5b60026008541415610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d9061443a565b60405180910390fd5b6002600881905550610e6781612794565b600160088190555050565b6000610e7d83611420565b8210610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb59061403a565b60405180910390fd5b6000610ec8610cf5565b905060008060005b83811015611022576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fc257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611014578684141561100b57819550505050505061105e565b83806001019450505b508080600101915050610ed0565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110559061441a565b60405180910390fd5b92915050565b600e5481565b61107261219a565b73ffffffffffffffffffffffffffffffffffffffff16611090611639565b73ffffffffffffffffffffffffffffffffffffffff16146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd9061425a565b60405180910390fd5b6002600854141561112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111239061443a565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161115a90613f81565b60006040518083038185875af1925050503d8060008114611197576040519150601f19603f3d011682016040523d82523d6000602084013e61119c565b606091505b50509050806111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061437a565b60405180910390fd5b506001600881905550565b61120683838360405180602001604052806000815250611d50565b505050565b600c5481565b600061121b610cf5565b821061125c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611253906140fa565b60405180910390fd5b819050919050565b61126c61219a565b73ffffffffffffffffffffffffffffffffffffffff1661128a611639565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d79061425a565b60405180910390fd5b8181600991906112f1929190613483565b505050565b6112fe61219a565b73ffffffffffffffffffffffffffffffffffffffff1661131c611639565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113699061425a565b60405180910390fd5b80600e8190555050565b6000611387826129c6565b600001519050919050565b6009805461139f90614753565b80601f01602080910402602001604051908101604052809291908181526020018280546113cb90614753565b80156114185780601f106113ed57610100808354040283529160200191611418565b820191906000526020600020905b8154815290600101906020018083116113fb57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114889061421a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61151161219a565b73ffffffffffffffffffffffffffffffffffffffff1661152f611639565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c9061425a565b60405180910390fd5b61158f6000612b60565b565b61159961219a565b73ffffffffffffffffffffffffffffffffffffffff166115b7611639565b73ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116049061425a565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166b61219a565b73ffffffffffffffffffffffffffffffffffffffff16611689611639565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d69061425a565b60405180910390fd5b6001600f546116ee9190614574565b816116f7610cf5565b6117019190614574565b10611741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117389061419a565b60405180910390fd5b61174b3382612c26565b50565b61175661219a565b73ffffffffffffffffffffffffffffffffffffffff16611774611639565b73ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c19061425a565b60405180910390fd5b80600a8190555050565b6117dc613509565b6117e5826129c6565b9050919050565b6060600280546117fb90614753565b80601f016020809104026020016040519081016040528092919081815260200182805461182790614753565b80156118745780601f1061184957610100808354040283529160200191611874565b820191906000526020600020905b81548152906001019060200180831161185757829003601f168201915b5050505050905090565b600d5481565b600a5481565b6000600a5490506001600e546118a09190614574565b826118a9610cf5565b6118b39190614574565b10156118be57600090505b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611923906141ba565b60405180910390fd5b808261193891906145fb565b3414611979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119709061433a565b60405180910390fd5b6001600f546119889190614574565b82611991610cf5565b61199b9190614574565b106119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d29061431a565b60405180910390fd5b601160009054906101000a900460ff16611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a219061427a565b60405180910390fd5b600c5482611a3733611ef9565b611a419190614574565b1115611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a79906140da565b60405180910390fd5b6001600b54611a919190614574565b8210611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac9906143fa565b60405180910390fd5b611ada610cf5565b600e5410611b2c5781600d541015611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e9061417a565b60405180910390fd5b611bc1565b81600b541015611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906140ba565b60405180910390fd5b34600a5483611b8091906145fb565b14611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb7906142fa565b60405180910390fd5b5b611bcb3383612c26565b5050565b611bd761219a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c906142ba565b60405180910390fd5b8060066000611c5261219a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cff61219a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d449190613ffd565b60405180910390a35050565b611d5b848484612254565b611d6784848484612c44565b611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d9061439a565b60405180910390fd5b50505050565b611db461219a565b73ffffffffffffffffffffffffffffffffffffffff16611dd2611639565b73ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f9061425a565b60405180910390fd5b80600b8190555050565b6060611e3d8261218d565b611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e739061429a565b60405180910390fd5b6000611e86612ddb565b9050600081511415611ea75760405180602001604052806000815250611ed2565b80611eb184612e6d565b604051602001611ec2929190613f52565b6040516020818303038152906040525b915050919050565b601160009054906101000a900460ff1681565b600f5481565b60105481565b6000611f0482612fce565b9050919050565b611f1361219a565b73ffffffffffffffffffffffffffffffffffffffff16611f31611639565b73ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e9061425a565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61202d61219a565b73ffffffffffffffffffffffffffffffffffffffff1661204b611639565b73ffffffffffffffffffffffffffffffffffffffff16146120a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120989061425a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121089061405a565b60405180910390fd5b61211a81612b60565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061225f826129c6565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661228661219a565b73ffffffffffffffffffffffffffffffffffffffff1614806122e257506122ab61219a565b73ffffffffffffffffffffffffffffffffffffffff166122ca84610b57565b73ffffffffffffffffffffffffffffffffffffffff16145b806122fe57506122fd82600001516122f861219a565b611f91565b5b905080612340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612337906142da565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061423a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612422576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124199061411a565b60405180910390fd5b61242f85858560016130b7565b61243f60008484600001516121a2565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612724576126838161218d565b156127235782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461278d85858560016130bd565b5050505050565b60008114156127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906141fa565b60405180910390fd5b60008054141561281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061409a565b60405180910390fd5b600060105490506000548110612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f9061415a565b60405180910390fd5b600060018383010390506000546001820111156128885760016000540390505b60008290505b8181116129b657600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129a957600061290b826129c6565b905080600001516003600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602001516003600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b808060010191505061288e565b5060018101601081905550505050565b6129ce613509565b6129d78261218d565b612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d9061407a565b60405180910390fd5b60008290505b60008110612b1f576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b10578092505050612b5b565b50808060019003915050612a1c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529061445a565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c408282604051806020016040528060008152506130c3565b5050565b6000612c658473ffffffffffffffffffffffffffffffffffffffff166130d5565b15612dce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8e61219a565b8786866040518563ffffffff1660e01b8152600401612cb09493929190613fb1565b602060405180830381600087803b158015612cca57600080fd5b505af1925050508015612cfb57506040513d601f19601f82011682018060405250810190612cf8919061387f565b60015b612d7e573d8060008114612d2b576040519150601f19603f3d011682016040523d82523d6000602084013e612d30565b606091505b50600081511415612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d9061439a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd3565b600190505b949350505050565b606060098054612dea90614753565b80601f0160208091040260200160405190810160405280929190818152602001828054612e1690614753565b8015612e635780601f10612e3857610100808354040283529160200191612e63565b820191906000526020600020905b815481529060010190602001808311612e4657829003601f168201915b5050505050905090565b60606000821415612eb5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc9565b600082905060005b60008214612ee7578080612ed0906147b6565b915050600a82612ee091906145ca565b9150612ebd565b60008167ffffffffffffffff811115612f0357612f026148ec565b5b6040519080825280601f01601f191660200182016040528015612f355781602001600182028036833780820191505090505b5090505b60008514612fc257600182612f4e9190614655565b9150600a85612f5d91906147ff565b6030612f699190614574565b60f81b818381518110612f7f57612f7e6148bd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fbb91906145ca565b9450612f39565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561303f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130369061413a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b6130d083838360016130f8565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060016000546131099190614574565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561317b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613172906143ba565b60405180910390fd5b60008414156131bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b6906143da565b60405180910390fd5b6131cc60008683876130b7565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561346657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613451576134116000888488612c44565b613450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134479061439a565b60405180910390fd5b5b8180600101925050808060010191505061339a565b50806000819055505061347c60008683876130bd565b5050505050565b82805461348f90614753565b90600052602060002090601f0160209004810192826134b157600085556134f8565b82601f106134ca57803560ff19168380011785556134f8565b828001600101855582156134f8579182015b828111156134f75782358255916020019190600101906134dc565b5b5090506135059190613543565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561355c576000816000905550600101613544565b5090565b600061357361356e846144f5565b6144d0565b90508281526020810184848401111561358f5761358e61492a565b5b61359a848285614711565b509392505050565b6000813590506135b1816151bd565b92915050565b6000813590506135c6816151d4565b92915050565b6000813590506135db816151eb565b92915050565b6000815190506135f0816151eb565b92915050565b600082601f83011261360b5761360a614920565b5b813561361b848260208601613560565b91505092915050565b60008083601f84011261363a57613639614920565b5b8235905067ffffffffffffffff8111156136575761365661491b565b5b60208301915083600182028301111561367357613672614925565b5b9250929050565b60008135905061368981615202565b92915050565b6000602082840312156136a5576136a4614934565b5b60006136b3848285016135a2565b91505092915050565b600080604083850312156136d3576136d2614934565b5b60006136e1858286016135a2565b92505060206136f2858286016135a2565b9150509250929050565b60008060006060848603121561371557613714614934565b5b6000613723868287016135a2565b9350506020613734868287016135a2565b92505060406137458682870161367a565b9150509250925092565b6000806000806080858703121561376957613768614934565b5b6000613777878288016135a2565b9450506020613788878288016135a2565b93505060406137998782880161367a565b925050606085013567ffffffffffffffff8111156137ba576137b961492f565b5b6137c6878288016135f6565b91505092959194509250565b600080604083850312156137e9576137e8614934565b5b60006137f7858286016135a2565b9250506020613808858286016135b7565b9150509250929050565b6000806040838503121561382957613828614934565b5b6000613837858286016135a2565b92505060206138488582860161367a565b9150509250929050565b60006020828403121561386857613867614934565b5b6000613876848285016135cc565b91505092915050565b60006020828403121561389557613894614934565b5b60006138a3848285016135e1565b91505092915050565b600080602083850312156138c3576138c2614934565b5b600083013567ffffffffffffffff8111156138e1576138e061492f565b5b6138ed85828601613624565b92509250509250929050565b60006020828403121561390f5761390e614934565b5b600061391d8482850161367a565b91505092915050565b61392f81614689565b82525050565b61393e81614689565b82525050565b61394d8161469b565b82525050565b600061395e82614526565b613968818561453c565b9350613978818560208601614720565b61398181614939565b840191505092915050565b600061399782614531565b6139a18185614558565b93506139b1818560208601614720565b6139ba81614939565b840191505092915050565b60006139d082614531565b6139da8185614569565b93506139ea818560208601614720565b80840191505092915050565b6000613a03602283614558565b9150613a0e8261494a565b604082019050919050565b6000613a26602683614558565b9150613a3182614999565b604082019050919050565b6000613a49602a83614558565b9150613a54826149e8565b604082019050919050565b6000613a6c601483614558565b9150613a7782614a37565b602082019050919050565b6000613a8f601683614558565b9150613a9a82614a60565b602082019050919050565b6000613ab2601483614558565b9150613abd82614a89565b602082019050919050565b6000613ad5602383614558565b9150613ae082614ab2565b604082019050919050565b6000613af8602583614558565b9150613b0382614b01565b604082019050919050565b6000613b1b603183614558565b9150613b2682614b50565b604082019050919050565b6000613b3e601c83614558565b9150613b4982614b9f565b602082019050919050565b6000613b61601683614558565b9150613b6c82614bc8565b602082019050919050565b6000613b84600983614558565b9150613b8f82614bf1565b602082019050919050565b6000613ba7600983614558565b9150613bb282614c1a565b602082019050919050565b6000613bca603983614558565b9150613bd582614c43565b604082019050919050565b6000613bed601883614558565b9150613bf882614c92565b602082019050919050565b6000613c10602b83614558565b9150613c1b82614cbb565b604082019050919050565b6000613c33602683614558565b9150613c3e82614d0a565b604082019050919050565b6000613c56600583614569565b9150613c6182614d59565b600582019050919050565b6000613c79602083614558565b9150613c8482614d82565b602082019050919050565b6000613c9c601883614558565b9150613ca782614dab565b602082019050919050565b6000613cbf602f83614558565b9150613cca82614dd4565b604082019050919050565b6000613ce2601a83614558565b9150613ced82614e23565b602082019050919050565b6000613d05603283614558565b9150613d1082614e4c565b604082019050919050565b6000613d28601683614558565b9150613d3382614e9b565b602082019050919050565b6000613d4b600c83614558565b9150613d5682614ec4565b602082019050919050565b6000613d6e601d83614558565b9150613d7982614eed565b602082019050919050565b6000613d91602283614558565b9150613d9c82614f16565b604082019050919050565b6000613db460008361454d565b9150613dbf82614f65565b600082019050919050565b6000613dd7601083614558565b9150613de282614f68565b602082019050919050565b6000613dfa603383614558565b9150613e0582614f91565b604082019050919050565b6000613e1d602183614558565b9150613e2882614fe0565b604082019050919050565b6000613e40602883614558565b9150613e4b8261502f565b604082019050919050565b6000613e63601383614558565b9150613e6e8261507e565b602082019050919050565b6000613e86602e83614558565b9150613e91826150a7565b604082019050919050565b6000613ea9601f83614558565b9150613eb4826150f6565b602082019050919050565b6000613ecc602f83614558565b9150613ed78261511f565b604082019050919050565b6000613eef602d83614558565b9150613efa8261516e565b604082019050919050565b604082016000820151613f1b6000850182613926565b506020820151613f2e6020850182613f43565b50505050565b613f3d816146f3565b82525050565b613f4c816146fd565b82525050565b6000613f5e82856139c5565b9150613f6a82846139c5565b9150613f7582613c49565b91508190509392505050565b6000613f8c82613da7565b9150819050919050565b6000602082019050613fab6000830184613935565b92915050565b6000608082019050613fc66000830187613935565b613fd36020830186613935565b613fe06040830185613f34565b8181036060830152613ff28184613953565b905095945050505050565b60006020820190506140126000830184613944565b92915050565b60006020820190508181036000830152614032818461398c565b905092915050565b60006020820190508181036000830152614053816139f6565b9050919050565b6000602082019050818103600083015261407381613a19565b9050919050565b6000602082019050818103600083015261409381613a3c565b9050919050565b600060208201905081810360008301526140b381613a5f565b9050919050565b600060208201905081810360008301526140d381613a82565b9050919050565b600060208201905081810360008301526140f381613aa5565b9050919050565b6000602082019050818103600083015261411381613ac8565b9050919050565b6000602082019050818103600083015261413381613aeb565b9050919050565b6000602082019050818103600083015261415381613b0e565b9050919050565b6000602082019050818103600083015261417381613b31565b9050919050565b6000602082019050818103600083015261419381613b54565b9050919050565b600060208201905081810360008301526141b381613b77565b9050919050565b600060208201905081810360008301526141d381613b9a565b9050919050565b600060208201905081810360008301526141f381613bbd565b9050919050565b6000602082019050818103600083015261421381613be0565b9050919050565b6000602082019050818103600083015261423381613c03565b9050919050565b6000602082019050818103600083015261425381613c26565b9050919050565b6000602082019050818103600083015261427381613c6c565b9050919050565b6000602082019050818103600083015261429381613c8f565b9050919050565b600060208201905081810360008301526142b381613cb2565b9050919050565b600060208201905081810360008301526142d381613cd5565b9050919050565b600060208201905081810360008301526142f381613cf8565b9050919050565b6000602082019050818103600083015261431381613d1b565b9050919050565b6000602082019050818103600083015261433381613d3e565b9050919050565b6000602082019050818103600083015261435381613d61565b9050919050565b6000602082019050818103600083015261437381613d84565b9050919050565b6000602082019050818103600083015261439381613dca565b9050919050565b600060208201905081810360008301526143b381613ded565b9050919050565b600060208201905081810360008301526143d381613e10565b9050919050565b600060208201905081810360008301526143f381613e33565b9050919050565b6000602082019050818103600083015261441381613e56565b9050919050565b6000602082019050818103600083015261443381613e79565b9050919050565b6000602082019050818103600083015261445381613e9c565b9050919050565b6000602082019050818103600083015261447381613ebf565b9050919050565b6000602082019050818103600083015261449381613ee2565b9050919050565b60006040820190506144af6000830184613f05565b92915050565b60006020820190506144ca6000830184613f34565b92915050565b60006144da6144eb565b90506144e68282614785565b919050565b6000604051905090565b600067ffffffffffffffff8211156145105761450f6148ec565b5b61451982614939565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061457f826146f3565b915061458a836146f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145bf576145be614830565b5b828201905092915050565b60006145d5826146f3565b91506145e0836146f3565b9250826145f0576145ef61485f565b5b828204905092915050565b6000614606826146f3565b9150614611836146f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464a57614649614830565b5b828202905092915050565b6000614660826146f3565b915061466b836146f3565b92508282101561467e5761467d614830565b5b828203905092915050565b6000614694826146d3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561473e578082015181840152602081019050614723565b8381111561474d576000848401525b50505050565b6000600282049050600182168061476b57607f821691505b6020821081141561477f5761477e61488e565b5b50919050565b61478e82614939565b810181811067ffffffffffffffff821117156147ad576147ac6148ec565b5b80604052505050565b60006147c1826146f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147f4576147f3614830565b5b600182019050919050565b600061480a826146f3565b9150614815836146f3565b9250826148255761482461485f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f20746f6b656e73206d696e74656420796574000000000000000000000000600082015250565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c206f776e657273686970732068617665206265656e2073657400000000600082015250565b7f457863657373206d617820706572206672656520747800000000000000000000600082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f77616b752077616b750000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b7f4e6f206d6f7265204e4654730000000000000000000000000000000000000000600082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6151c681614689565b81146151d157600080fd5b50565b6151dd8161469b565b81146151e857600080fd5b50565b6151f4816146a7565b81146151ff57600080fd5b50565b61520b816146f3565b811461521657600080fd5b5056fea2646970667358221220ef2a32a91eb70b7b9e3783149ed3f2fbe46f3d5dd8030ff3d41d009744fd97f264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102465760003560e01c80637d55094d11610139578063b88d4fde116100b6578063d7224ba01161007a578063d7224ba014610859578063dc33e68114610884578063e268e4d3146108c1578063e985e9c5146108ea578063f2fde38b14610927578063f968adbe1461095057610246565b8063b88d4fde14610774578063c6f6f2161461079d578063c87b56dd146107c6578063d123973014610803578063d5abeb011461082e57610246565b806395d89b41116100fd57806395d89b41146106ae578063980a70d2146106d9578063a035b1fe14610704578063a0712d681461072f578063a22cb4651461074b57610246565b80637d55094d146105dd5780638da5cb5b146105f45780638db89f071461061f57806391b7f5ed146106485780639231ab2a1461067157610246565b80633ccfd60b116101c7578063563aaf111161018b578063563aaf11146104f85780636352211e146105215780636c0360eb1461055e57806370a0823114610589578063715018a6146105c657610246565b80633ccfd60b1461042757806342842e0e1461043e578063453c2310146104675780634f6ccce71461049257806355f804b3146104cf57610246565b8063228025e81161020e578063228025e81461034457806323b872dd1461036d5780632d20fb60146103965780632f745c59146103bf578063333e44e6146103fc57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806318160ddd14610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613852565b61097b565b60405161027f9190613ffd565b60405180910390f35b34801561029457600080fd5b5061029d610ac5565b6040516102aa9190614018565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906138f9565b610b57565b6040516102e79190613f96565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613812565b610bdc565b005b34801561032557600080fd5b5061032e610cf5565b60405161033b91906144b5565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906138f9565b610cfe565b005b34801561037957600080fd5b50610394600480360381019061038f91906136fc565b610d84565b005b3480156103a257600080fd5b506103bd60048036038101906103b891906138f9565b610d94565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190613812565b610e72565b6040516103f391906144b5565b60405180910390f35b34801561040857600080fd5b50610411611064565b60405161041e91906144b5565b60405180910390f35b34801561043357600080fd5b5061043c61106a565b005b34801561044a57600080fd5b50610465600480360381019061046091906136fc565b6111eb565b005b34801561047357600080fd5b5061047c61120b565b60405161048991906144b5565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b491906138f9565b611211565b6040516104c691906144b5565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906138ac565b611264565b005b34801561050457600080fd5b5061051f600480360381019061051a91906138f9565b6112f6565b005b34801561052d57600080fd5b50610548600480360381019061054391906138f9565b61137c565b6040516105559190613f96565b60405180910390f35b34801561056a57600080fd5b50610573611392565b6040516105809190614018565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab919061368f565b611420565b6040516105bd91906144b5565b60405180910390f35b3480156105d257600080fd5b506105db611509565b005b3480156105e957600080fd5b506105f2611591565b005b34801561060057600080fd5b50610609611639565b6040516106169190613f96565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906138f9565b611663565b005b34801561065457600080fd5b5061066f600480360381019061066a91906138f9565b61174e565b005b34801561067d57600080fd5b50610698600480360381019061069391906138f9565b6117d4565b6040516106a5919061449a565b60405180910390f35b3480156106ba57600080fd5b506106c36117ec565b6040516106d09190614018565b60405180910390f35b3480156106e557600080fd5b506106ee61187e565b6040516106fb91906144b5565b60405180910390f35b34801561071057600080fd5b50610719611884565b60405161072691906144b5565b60405180910390f35b610749600480360381019061074491906138f9565b61188a565b005b34801561075757600080fd5b50610772600480360381019061076d91906137d2565b611bcf565b005b34801561078057600080fd5b5061079b6004803603810190610796919061374f565b611d50565b005b3480156107a957600080fd5b506107c460048036038101906107bf91906138f9565b611dac565b005b3480156107d257600080fd5b506107ed60048036038101906107e891906138f9565b611e32565b6040516107fa9190614018565b60405180910390f35b34801561080f57600080fd5b50610818611eda565b6040516108259190613ffd565b60405180910390f35b34801561083a57600080fd5b50610843611eed565b60405161085091906144b5565b60405180910390f35b34801561086557600080fd5b5061086e611ef3565b60405161087b91906144b5565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061368f565b611ef9565b6040516108b891906144b5565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e391906138f9565b611f0b565b005b3480156108f657600080fd5b50610911600480360381019061090c91906136bc565b611f91565b60405161091e9190613ffd565b60405180910390f35b34801561093357600080fd5b5061094e6004803603810190610949919061368f565b612025565b005b34801561095c57600080fd5b5061096561211d565b60405161097291906144b5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aae57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abe5750610abd82612123565b5b9050919050565b606060018054610ad490614753565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0090614753565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b628261218d565b610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b989061447a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be78261137c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f9061435a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7761219a565b73ffffffffffffffffffffffffffffffffffffffff161480610ca65750610ca581610ca061219a565b611f91565b5b610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc906141da565b60405180910390fd5b610cf08383836121a2565b505050565b60008054905090565b610d0661219a565b73ffffffffffffffffffffffffffffffffffffffff16610d24611639565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d719061425a565b60405180910390fd5b80600f8190555050565b610d8f838383612254565b505050565b610d9c61219a565b73ffffffffffffffffffffffffffffffffffffffff16610dba611639565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061425a565b60405180910390fd5b60026008541415610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d9061443a565b60405180910390fd5b6002600881905550610e6781612794565b600160088190555050565b6000610e7d83611420565b8210610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb59061403a565b60405180910390fd5b6000610ec8610cf5565b905060008060005b83811015611022576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fc257806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611014578684141561100b57819550505050505061105e565b83806001019450505b508080600101915050610ed0565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110559061441a565b60405180910390fd5b92915050565b600e5481565b61107261219a565b73ffffffffffffffffffffffffffffffffffffffff16611090611639565b73ffffffffffffffffffffffffffffffffffffffff16146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd9061425a565b60405180910390fd5b6002600854141561112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111239061443a565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161115a90613f81565b60006040518083038185875af1925050503d8060008114611197576040519150601f19603f3d011682016040523d82523d6000602084013e61119c565b606091505b50509050806111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061437a565b60405180910390fd5b506001600881905550565b61120683838360405180602001604052806000815250611d50565b505050565b600c5481565b600061121b610cf5565b821061125c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611253906140fa565b60405180910390fd5b819050919050565b61126c61219a565b73ffffffffffffffffffffffffffffffffffffffff1661128a611639565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d79061425a565b60405180910390fd5b8181600991906112f1929190613483565b505050565b6112fe61219a565b73ffffffffffffffffffffffffffffffffffffffff1661131c611639565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113699061425a565b60405180910390fd5b80600e8190555050565b6000611387826129c6565b600001519050919050565b6009805461139f90614753565b80601f01602080910402602001604051908101604052809291908181526020018280546113cb90614753565b80156114185780601f106113ed57610100808354040283529160200191611418565b820191906000526020600020905b8154815290600101906020018083116113fb57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114889061421a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61151161219a565b73ffffffffffffffffffffffffffffffffffffffff1661152f611639565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c9061425a565b60405180910390fd5b61158f6000612b60565b565b61159961219a565b73ffffffffffffffffffffffffffffffffffffffff166115b7611639565b73ffffffffffffffffffffffffffffffffffffffff161461160d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116049061425a565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166b61219a565b73ffffffffffffffffffffffffffffffffffffffff16611689611639565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d69061425a565b60405180910390fd5b6001600f546116ee9190614574565b816116f7610cf5565b6117019190614574565b10611741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117389061419a565b60405180910390fd5b61174b3382612c26565b50565b61175661219a565b73ffffffffffffffffffffffffffffffffffffffff16611774611639565b73ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c19061425a565b60405180910390fd5b80600a8190555050565b6117dc613509565b6117e5826129c6565b9050919050565b6060600280546117fb90614753565b80601f016020809104026020016040519081016040528092919081815260200182805461182790614753565b80156118745780601f1061184957610100808354040283529160200191611874565b820191906000526020600020905b81548152906001019060200180831161185757829003601f168201915b5050505050905090565b600d5481565b600a5481565b6000600a5490506001600e546118a09190614574565b826118a9610cf5565b6118b39190614574565b10156118be57600090505b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611923906141ba565b60405180910390fd5b808261193891906145fb565b3414611979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119709061433a565b60405180910390fd5b6001600f546119889190614574565b82611991610cf5565b61199b9190614574565b106119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d29061431a565b60405180910390fd5b601160009054906101000a900460ff16611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a219061427a565b60405180910390fd5b600c5482611a3733611ef9565b611a419190614574565b1115611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a79906140da565b60405180910390fd5b6001600b54611a919190614574565b8210611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac9906143fa565b60405180910390fd5b611ada610cf5565b600e5410611b2c5781600d541015611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e9061417a565b60405180910390fd5b611bc1565b81600b541015611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906140ba565b60405180910390fd5b34600a5483611b8091906145fb565b14611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb7906142fa565b60405180910390fd5b5b611bcb3383612c26565b5050565b611bd761219a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c906142ba565b60405180910390fd5b8060066000611c5261219a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cff61219a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d449190613ffd565b60405180910390a35050565b611d5b848484612254565b611d6784848484612c44565b611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d9061439a565b60405180910390fd5b50505050565b611db461219a565b73ffffffffffffffffffffffffffffffffffffffff16611dd2611639565b73ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f9061425a565b60405180910390fd5b80600b8190555050565b6060611e3d8261218d565b611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e739061429a565b60405180910390fd5b6000611e86612ddb565b9050600081511415611ea75760405180602001604052806000815250611ed2565b80611eb184612e6d565b604051602001611ec2929190613f52565b6040516020818303038152906040525b915050919050565b601160009054906101000a900460ff1681565b600f5481565b60105481565b6000611f0482612fce565b9050919050565b611f1361219a565b73ffffffffffffffffffffffffffffffffffffffff16611f31611639565b73ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e9061425a565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61202d61219a565b73ffffffffffffffffffffffffffffffffffffffff1661204b611639565b73ffffffffffffffffffffffffffffffffffffffff16146120a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120989061425a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121089061405a565b60405180910390fd5b61211a81612b60565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061225f826129c6565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661228661219a565b73ffffffffffffffffffffffffffffffffffffffff1614806122e257506122ab61219a565b73ffffffffffffffffffffffffffffffffffffffff166122ca84610b57565b73ffffffffffffffffffffffffffffffffffffffff16145b806122fe57506122fd82600001516122f861219a565b611f91565b5b905080612340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612337906142da565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061423a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612422576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124199061411a565b60405180910390fd5b61242f85858560016130b7565b61243f60008484600001516121a2565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612724576126838161218d565b156127235782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461278d85858560016130bd565b5050505050565b60008114156127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906141fa565b60405180910390fd5b60008054141561281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061409a565b60405180910390fd5b600060105490506000548110612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f9061415a565b60405180910390fd5b600060018383010390506000546001820111156128885760016000540390505b60008290505b8181116129b657600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129a957600061290b826129c6565b905080600001516003600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602001516003600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b808060010191505061288e565b5060018101601081905550505050565b6129ce613509565b6129d78261218d565b612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d9061407a565b60405180910390fd5b60008290505b60008110612b1f576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b10578092505050612b5b565b50808060019003915050612a1c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529061445a565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c408282604051806020016040528060008152506130c3565b5050565b6000612c658473ffffffffffffffffffffffffffffffffffffffff166130d5565b15612dce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8e61219a565b8786866040518563ffffffff1660e01b8152600401612cb09493929190613fb1565b602060405180830381600087803b158015612cca57600080fd5b505af1925050508015612cfb57506040513d601f19601f82011682018060405250810190612cf8919061387f565b60015b612d7e573d8060008114612d2b576040519150601f19603f3d011682016040523d82523d6000602084013e612d30565b606091505b50600081511415612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d9061439a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd3565b600190505b949350505050565b606060098054612dea90614753565b80601f0160208091040260200160405190810160405280929190818152602001828054612e1690614753565b8015612e635780601f10612e3857610100808354040283529160200191612e63565b820191906000526020600020905b815481529060010190602001808311612e4657829003601f168201915b5050505050905090565b60606000821415612eb5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc9565b600082905060005b60008214612ee7578080612ed0906147b6565b915050600a82612ee091906145ca565b9150612ebd565b60008167ffffffffffffffff811115612f0357612f026148ec565b5b6040519080825280601f01601f191660200182016040528015612f355781602001600182028036833780820191505090505b5090505b60008514612fc257600182612f4e9190614655565b9150600a85612f5d91906147ff565b6030612f699190614574565b60f81b818381518110612f7f57612f7e6148bd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fbb91906145ca565b9450612f39565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561303f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130369061413a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b6130d083838360016130f8565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060016000546131099190614574565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561317b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613172906143ba565b60405180910390fd5b60008414156131bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b6906143da565b60405180910390fd5b6131cc60008683876130b7565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561346657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613451576134116000888488612c44565b613450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134479061439a565b60405180910390fd5b5b8180600101925050808060010191505061339a565b50806000819055505061347c60008683876130bd565b5050505050565b82805461348f90614753565b90600052602060002090601f0160209004810192826134b157600085556134f8565b82601f106134ca57803560ff19168380011785556134f8565b828001600101855582156134f8579182015b828111156134f75782358255916020019190600101906134dc565b5b5090506135059190613543565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561355c576000816000905550600101613544565b5090565b600061357361356e846144f5565b6144d0565b90508281526020810184848401111561358f5761358e61492a565b5b61359a848285614711565b509392505050565b6000813590506135b1816151bd565b92915050565b6000813590506135c6816151d4565b92915050565b6000813590506135db816151eb565b92915050565b6000815190506135f0816151eb565b92915050565b600082601f83011261360b5761360a614920565b5b813561361b848260208601613560565b91505092915050565b60008083601f84011261363a57613639614920565b5b8235905067ffffffffffffffff8111156136575761365661491b565b5b60208301915083600182028301111561367357613672614925565b5b9250929050565b60008135905061368981615202565b92915050565b6000602082840312156136a5576136a4614934565b5b60006136b3848285016135a2565b91505092915050565b600080604083850312156136d3576136d2614934565b5b60006136e1858286016135a2565b92505060206136f2858286016135a2565b9150509250929050565b60008060006060848603121561371557613714614934565b5b6000613723868287016135a2565b9350506020613734868287016135a2565b92505060406137458682870161367a565b9150509250925092565b6000806000806080858703121561376957613768614934565b5b6000613777878288016135a2565b9450506020613788878288016135a2565b93505060406137998782880161367a565b925050606085013567ffffffffffffffff8111156137ba576137b961492f565b5b6137c6878288016135f6565b91505092959194509250565b600080604083850312156137e9576137e8614934565b5b60006137f7858286016135a2565b9250506020613808858286016135b7565b9150509250929050565b6000806040838503121561382957613828614934565b5b6000613837858286016135a2565b92505060206138488582860161367a565b9150509250929050565b60006020828403121561386857613867614934565b5b6000613876848285016135cc565b91505092915050565b60006020828403121561389557613894614934565b5b60006138a3848285016135e1565b91505092915050565b600080602083850312156138c3576138c2614934565b5b600083013567ffffffffffffffff8111156138e1576138e061492f565b5b6138ed85828601613624565b92509250509250929050565b60006020828403121561390f5761390e614934565b5b600061391d8482850161367a565b91505092915050565b61392f81614689565b82525050565b61393e81614689565b82525050565b61394d8161469b565b82525050565b600061395e82614526565b613968818561453c565b9350613978818560208601614720565b61398181614939565b840191505092915050565b600061399782614531565b6139a18185614558565b93506139b1818560208601614720565b6139ba81614939565b840191505092915050565b60006139d082614531565b6139da8185614569565b93506139ea818560208601614720565b80840191505092915050565b6000613a03602283614558565b9150613a0e8261494a565b604082019050919050565b6000613a26602683614558565b9150613a3182614999565b604082019050919050565b6000613a49602a83614558565b9150613a54826149e8565b604082019050919050565b6000613a6c601483614558565b9150613a7782614a37565b602082019050919050565b6000613a8f601683614558565b9150613a9a82614a60565b602082019050919050565b6000613ab2601483614558565b9150613abd82614a89565b602082019050919050565b6000613ad5602383614558565b9150613ae082614ab2565b604082019050919050565b6000613af8602583614558565b9150613b0382614b01565b604082019050919050565b6000613b1b603183614558565b9150613b2682614b50565b604082019050919050565b6000613b3e601c83614558565b9150613b4982614b9f565b602082019050919050565b6000613b61601683614558565b9150613b6c82614bc8565b602082019050919050565b6000613b84600983614558565b9150613b8f82614bf1565b602082019050919050565b6000613ba7600983614558565b9150613bb282614c1a565b602082019050919050565b6000613bca603983614558565b9150613bd582614c43565b604082019050919050565b6000613bed601883614558565b9150613bf882614c92565b602082019050919050565b6000613c10602b83614558565b9150613c1b82614cbb565b604082019050919050565b6000613c33602683614558565b9150613c3e82614d0a565b604082019050919050565b6000613c56600583614569565b9150613c6182614d59565b600582019050919050565b6000613c79602083614558565b9150613c8482614d82565b602082019050919050565b6000613c9c601883614558565b9150613ca782614dab565b602082019050919050565b6000613cbf602f83614558565b9150613cca82614dd4565b604082019050919050565b6000613ce2601a83614558565b9150613ced82614e23565b602082019050919050565b6000613d05603283614558565b9150613d1082614e4c565b604082019050919050565b6000613d28601683614558565b9150613d3382614e9b565b602082019050919050565b6000613d4b600c83614558565b9150613d5682614ec4565b602082019050919050565b6000613d6e601d83614558565b9150613d7982614eed565b602082019050919050565b6000613d91602283614558565b9150613d9c82614f16565b604082019050919050565b6000613db460008361454d565b9150613dbf82614f65565b600082019050919050565b6000613dd7601083614558565b9150613de282614f68565b602082019050919050565b6000613dfa603383614558565b9150613e0582614f91565b604082019050919050565b6000613e1d602183614558565b9150613e2882614fe0565b604082019050919050565b6000613e40602883614558565b9150613e4b8261502f565b604082019050919050565b6000613e63601383614558565b9150613e6e8261507e565b602082019050919050565b6000613e86602e83614558565b9150613e91826150a7565b604082019050919050565b6000613ea9601f83614558565b9150613eb4826150f6565b602082019050919050565b6000613ecc602f83614558565b9150613ed78261511f565b604082019050919050565b6000613eef602d83614558565b9150613efa8261516e565b604082019050919050565b604082016000820151613f1b6000850182613926565b506020820151613f2e6020850182613f43565b50505050565b613f3d816146f3565b82525050565b613f4c816146fd565b82525050565b6000613f5e82856139c5565b9150613f6a82846139c5565b9150613f7582613c49565b91508190509392505050565b6000613f8c82613da7565b9150819050919050565b6000602082019050613fab6000830184613935565b92915050565b6000608082019050613fc66000830187613935565b613fd36020830186613935565b613fe06040830185613f34565b8181036060830152613ff28184613953565b905095945050505050565b60006020820190506140126000830184613944565b92915050565b60006020820190508181036000830152614032818461398c565b905092915050565b60006020820190508181036000830152614053816139f6565b9050919050565b6000602082019050818103600083015261407381613a19565b9050919050565b6000602082019050818103600083015261409381613a3c565b9050919050565b600060208201905081810360008301526140b381613a5f565b9050919050565b600060208201905081810360008301526140d381613a82565b9050919050565b600060208201905081810360008301526140f381613aa5565b9050919050565b6000602082019050818103600083015261411381613ac8565b9050919050565b6000602082019050818103600083015261413381613aeb565b9050919050565b6000602082019050818103600083015261415381613b0e565b9050919050565b6000602082019050818103600083015261417381613b31565b9050919050565b6000602082019050818103600083015261419381613b54565b9050919050565b600060208201905081810360008301526141b381613b77565b9050919050565b600060208201905081810360008301526141d381613b9a565b9050919050565b600060208201905081810360008301526141f381613bbd565b9050919050565b6000602082019050818103600083015261421381613be0565b9050919050565b6000602082019050818103600083015261423381613c03565b9050919050565b6000602082019050818103600083015261425381613c26565b9050919050565b6000602082019050818103600083015261427381613c6c565b9050919050565b6000602082019050818103600083015261429381613c8f565b9050919050565b600060208201905081810360008301526142b381613cb2565b9050919050565b600060208201905081810360008301526142d381613cd5565b9050919050565b600060208201905081810360008301526142f381613cf8565b9050919050565b6000602082019050818103600083015261431381613d1b565b9050919050565b6000602082019050818103600083015261433381613d3e565b9050919050565b6000602082019050818103600083015261435381613d61565b9050919050565b6000602082019050818103600083015261437381613d84565b9050919050565b6000602082019050818103600083015261439381613dca565b9050919050565b600060208201905081810360008301526143b381613ded565b9050919050565b600060208201905081810360008301526143d381613e10565b9050919050565b600060208201905081810360008301526143f381613e33565b9050919050565b6000602082019050818103600083015261441381613e56565b9050919050565b6000602082019050818103600083015261443381613e79565b9050919050565b6000602082019050818103600083015261445381613e9c565b9050919050565b6000602082019050818103600083015261447381613ebf565b9050919050565b6000602082019050818103600083015261449381613ee2565b9050919050565b60006040820190506144af6000830184613f05565b92915050565b60006020820190506144ca6000830184613f34565b92915050565b60006144da6144eb565b90506144e68282614785565b919050565b6000604051905090565b600067ffffffffffffffff8211156145105761450f6148ec565b5b61451982614939565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061457f826146f3565b915061458a836146f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145bf576145be614830565b5b828201905092915050565b60006145d5826146f3565b91506145e0836146f3565b9250826145f0576145ef61485f565b5b828204905092915050565b6000614606826146f3565b9150614611836146f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464a57614649614830565b5b828202905092915050565b6000614660826146f3565b915061466b836146f3565b92508282101561467e5761467d614830565b5b828203905092915050565b6000614694826146d3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561473e578082015181840152602081019050614723565b8381111561474d576000848401525b50505050565b6000600282049050600182168061476b57607f821691505b6020821081141561477f5761477e61488e565b5b50919050565b61478e82614939565b810181811067ffffffffffffffff821117156147ad576147ac6148ec565b5b80604052505050565b60006147c1826146f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147f4576147f3614830565b5b600182019050919050565b600061480a826146f3565b9150614815836146f3565b9250826148255761482461485f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f20746f6b656e73206d696e74656420796574000000000000000000000000600082015250565b7f457863657373206d617820706572207061696420747800000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c206f776e657273686970732068617665206265656e2073657400000000600082015250565b7f457863657373206d617820706572206672656520747800000000000000000000600082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f77616b752077616b750000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b7f4e6f206d6f7265204e4654730000000000000000000000000000000000000000600082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6151c681614689565b81146151d157600080fd5b50565b6151dd8161469b565b81146151e857600080fd5b50565b6151f4816146a7565b81146151ff57600080fd5b50565b61520b816146f3565b811461521657600080fd5b5056fea2646970667358221220ef2a32a91eb70b7b9e3783149ed3f2fbe46f3d5dd8030ff3d41d009744fd97f264736f6c63430008070033
Deployed Bytecode Sourcemap
50178:4164:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37025:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38911:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40482:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40003:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35282:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52451:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41358:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52845:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35946:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50474:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52663:176;;;;;;;;;;;;;:::i;:::-;;41599:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50379:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35459:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51939:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52129:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38720:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50241:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37461:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10472:103;;;;;;;;;;;;;:::i;:::-;;51735:85;;;;;;;;;;;;;:::i;:::-;;9821:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51566:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52041:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52969:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39080:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50427:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50274:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50712:848;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40768:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41855:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52235:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39255:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50622:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50523:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50572:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51826:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52335:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41127:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10730:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50331:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37025:372;37127:4;37179:25;37164:40;;;:11;:40;;;;:105;;;;37236:33;37221:48;;;:11;:48;;;;37164:105;:172;;;;37301:35;37286:50;;;:11;:50;;;;37164:172;:225;;;;37353:36;37377:11;37353:23;:36::i;:::-;37164:225;37144:245;;37025:372;;;:::o;38911:100::-;38965:13;38998:5;38991:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38911:100;:::o;40482:214::-;40550:7;40578:16;40586:7;40578;:16::i;:::-;40570:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;40664:15;:24;40680:7;40664:24;;;;;;;;;;;;;;;;;;;;;40657:31;;40482:214;;;:::o;40003:413::-;40076:13;40092:24;40108:7;40092:15;:24::i;:::-;40076:40;;40141:5;40135:11;;:2;:11;;;;40127:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40236:5;40220:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;40245:37;40262:5;40269:12;:10;:12::i;:::-;40245:16;:37::i;:::-;40220:62;40198:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;40380:28;40389:2;40393:7;40402:5;40380:8;:28::i;:::-;40065:351;40003:413;;:::o;35282:100::-;35335:7;35362:12;;35355:19;;35282:100;:::o;52451:98::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52533:10:::1;52521:9;:22;;;;52451:98:::0;:::o;41358:170::-;41492:28;41502:4;41508:2;41512:7;41492:9;:28::i;:::-;41358:170;;;:::o;52845:118::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:1:::1;5393:7;;:19;;5385:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:1;5526:7;:18;;;;52929:28:::2;52948:8;52929:18;:28::i;:::-;4751:1:::1;5705:7;:22;;;;52845:118:::0;:::o;35946:1007::-;36035:7;36071:16;36081:5;36071:9;:16::i;:::-;36063:5;:24;36055:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36137:22;36162:13;:11;:13::i;:::-;36137:38;;36186:19;36216:25;36405:9;36400:466;36420:14;36416:1;:18;36400:466;;;36460:31;36494:11;:14;36506:1;36494:14;;;;;;;;;;;36460:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36557:1;36531:28;;:9;:14;;;:28;;;36527:111;;36604:9;:14;;;36584:34;;36527:111;36681:5;36660:26;;:17;:26;;;36656:195;;;36730:5;36715:11;:20;36711:85;;;36771:1;36764:8;;;;;;;;;36711:85;36818:13;;;;;;;36656:195;36441:425;36436:3;;;;;;;36400:466;;;;36889:56;;;;;;;;;;:::i;:::-;;;;;;;;35946:1007;;;;;:::o;50474:44::-;;;;:::o;52663:176::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:1:::1;5393:7;;:19;;5385:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:1;5526:7;:18;;;;52723:12:::2;52741:10;:15;;52764:21;52741:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52722:68;;;52805:7;52797:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;52715:124;4751:1:::1;5705:7;:22;;;;52663:176::o:0;41599:185::-;41737:39;41754:4;41760:2;41764:7;41737:39;;;;;;;;;;;;:16;:39::i;:::-;41599:185;;;:::o;50379:43::-;;;;:::o;35459:187::-;35526:7;35562:13;:11;:13::i;:::-;35554:5;:21;35546:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35633:5;35626:12;;35459:187;;;:::o;51939:96::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52021:8:::1;;52011:7;:18;;;;;;;:::i;:::-;;51939:96:::0;;:::o;52129:98::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52211:10:::1;52199:9;:22;;;;52129:98:::0;:::o;38720:124::-;38784:7;38811:20;38823:7;38811:11;:20::i;:::-;:25;;;38804:32;;38720:124;;;:::o;50241:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37461:221::-;37525:7;37570:1;37553:19;;:5;:19;;;;37545:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37646:12;:19;37659:5;37646:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;37638:36;;37631:43;;37461:221;;;:::o;10472:103::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10537:30:::1;10564:1;10537:18;:30::i;:::-;10472:103::o:0;51735:85::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51803:11:::1;;;;;;;;;;;51802:12;51788:11;;:26;;;;;;;;;;;;;;;;;;51735:85::o:0;9821:87::-;9867:7;9894:6;;;;;;;;;;;9887:13;;9821:87;:::o;51566:163::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51674:1:::1;51662:9;;:13;;;;:::i;:::-;51656:3;51640:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;51632:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;51697:26;51707:10;51719:3;51697:9;:26::i;:::-;51566:163:::0;:::o;52041:82::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52111:6:::1;52103:5;:14;;;;52041:82:::0;:::o;52969:132::-;53035:21;;:::i;:::-;53075:20;53087:7;53075:11;:20::i;:::-;53068:27;;52969:132;;;:::o;39080:104::-;39136:13;39169:7;39162:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39080:104;:::o;50427:42::-;;;;:::o;50274:52::-;;;;:::o;50712:848::-;50767:9;50779:5;;50767:17;;50828:1;50816:9;;:13;;;;:::i;:::-;50810:3;50794:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;50791:65;;;50847:1;50840:8;;50791:65;50887:9;50873:23;;:10;:23;;;50865:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;50943:4;50937:3;:10;;;;:::i;:::-;50924:9;:23;50916:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51029:1;51017:9;;:13;;;;:::i;:::-;51011:3;50995:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;50987:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51061:11;;;;;;;;;;;51053:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;51150:12;;51143:3;51116:24;51129:10;51116:12;:24::i;:::-;:30;;;;:::i;:::-;:46;;51108:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51218:1;51207:8;;:12;;;;:::i;:::-;51201:3;:18;51193:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;51268:13;:11;:13::i;:::-;51255:9;;:26;51252:268;;51321:3;51305:12;;:19;;51297:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51252:268;;;51403:3;51391:8;;:15;;51383:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;51472:9;51463:5;;51457:3;:11;;;;:::i;:::-;:24;51449:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51252:268;51528:26;51538:10;51550:3;51528:9;:26::i;:::-;50759:801;50712:848;:::o;40768:288::-;40875:12;:10;:12::i;:::-;40863:24;;:8;:24;;;;40855:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40976:8;40931:18;:32;40950:12;:10;:12::i;:::-;40931:32;;;;;;;;;;;;;;;:42;40964:8;40931:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;41029:8;41000:48;;41015:12;:10;:12::i;:::-;41000:48;;;41039:8;41000:48;;;;;;:::i;:::-;;;;;;;;40768:288;;:::o;41855:355::-;42014:28;42024:4;42030:2;42034:7;42014:9;:28::i;:::-;42075:48;42098:4;42104:2;42108:7;42117:5;42075:22;:48::i;:::-;42053:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;41855:355;;;;:::o;52235:94::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52314:9:::1;52303:8;:20;;;;52235:94:::0;:::o;39255:344::-;39328:13;39362:16;39370:7;39362;:16::i;:::-;39354:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39443:21;39467:10;:8;:10::i;:::-;39443:34;;39520:1;39501:7;39495:21;:26;;:96;;;;;;;;;;;;;;;;;39548:7;39557:18;:7;:16;:18::i;:::-;39531:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39495:96;39488:103;;;39255:344;;;:::o;50622:32::-;;;;;;;;;;;;;:::o;50523:44::-;;;;:::o;50572:45::-;;;;:::o;51826:107::-;51884:7;51907:20;51921:5;51907:13;:20::i;:::-;51900:27;;51826:107;;;:::o;52335:110::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52426:13:::1;52411:12;:28;;;;52335:110:::0;:::o;41127:164::-;41224:4;41248:18;:25;41267:5;41248:25;;;;;;;;;;;;;;;:35;41274:8;41248:35;;;;;;;;;;;;;;;;;;;;;;;;;41241:42;;41127:164;;;;:::o;10730:201::-;10052:12;:10;:12::i;:::-;10041:23;;:7;:5;:7::i;:::-;:23;;;10033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10839:1:::1;10819:22;;:8;:22;;;;10811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10895:28;10914:8;10895:18;:28::i;:::-;10730:201:::0;:::o;50331:43::-;;;;:::o;26600:157::-;26685:4;26724:25;26709:40;;;:11;:40;;;;26702:47;;26600:157;;;:::o;42465:111::-;42522:4;42556:12;;42546:7;:22;42539:29;;42465:111;;;:::o;8545:98::-;8598:7;8625:10;8618:17;;8545:98;:::o;47389:196::-;47531:2;47504:15;:24;47520:7;47504:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47569:7;47565:2;47549:28;;47558:5;47549:28;;;;;;;;;;;;47389:196;;;:::o;45269:2002::-;45384:35;45422:20;45434:7;45422:11;:20::i;:::-;45384:58;;45455:22;45497:13;:18;;;45481:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;45556:12;:10;:12::i;:::-;45532:36;;:20;45544:7;45532:11;:20::i;:::-;:36;;;45481:87;:154;;;;45585:50;45602:13;:18;;;45622:12;:10;:12::i;:::-;45585:16;:50::i;:::-;45481:154;45455:181;;45657:17;45649:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;45772:4;45750:26;;:13;:18;;;:26;;;45742:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45852:1;45838:16;;:2;:16;;;;45830:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45909:43;45931:4;45937:2;45941:7;45950:1;45909:21;:43::i;:::-;46017:49;46034:1;46038:7;46047:13;:18;;;46017:8;:49::i;:::-;46392:1;46362:12;:18;46375:4;46362:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46436:1;46408:12;:16;46421:2;46408:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46482:2;46454:11;:20;46466:7;46454:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;46544:15;46499:11;:20;46511:7;46499:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;46812:19;46844:1;46834:7;:11;46812:33;;46905:1;46864:43;;:11;:24;46876:11;46864:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;46860:295;;;46932:20;46940:11;46932:7;:20::i;:::-;46928:212;;;47009:13;:18;;;46977:11;:24;46989:11;46977:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;47092:13;:28;;;47050:11;:24;47062:11;47050:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;46928:212;46860:295;46337:829;47202:7;47198:2;47183:27;;47192:4;47183:27;;;;;;;;;;;;47221:42;47242:4;47248:2;47252:7;47261:1;47221:20;:42::i;:::-;45373:1898;;45269:2002;;;:::o;53209:1130::-;53293:1;53281:8;:13;;53273:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;53356:1;53340:12;;:17;;53332:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;53391:33;53427:24;;53391:60;;53496:12;;53468:25;:40;53460:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;53679:16;53737:1;53726:8;53698:25;:36;:40;53679:59;;53831:12;;53827:1;53816:8;:12;:27;53812:91;;;53888:1;53873:12;;:16;53862:27;;53812:91;53922:9;53934:25;53922:37;;53917:354;53966:8;53961:1;:13;53917:354;;54033:1;54002:33;;:11;:14;54014:1;54002:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;53998:260;;;54058:31;54092:14;54104:1;54092:11;:14::i;:::-;54058:48;;54149:9;:14;;;54127:11;:14;54139:1;54127:14;;;;;;;;;;;:19;;;:36;;;;;;;;;;;;;;;;;;54216:9;:24;;;54184:11;:14;54196:1;54184:14;;;;;;;;;;;:29;;;:56;;;;;;;;;;;;;;;;;;54037:221;53998:260;53976:3;;;;;;;53917:354;;;;54323:1;54312:8;:12;54285:24;:39;;;;53656:678;53264:1075;53209:1130;:::o;38121:537::-;38182:21;;:::i;:::-;38224:16;38232:7;38224;:16::i;:::-;38216:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38330:12;38345:7;38330:22;;38325:245;38362:1;38354:4;:9;38325:245;;38392:31;38426:11;:17;38438:4;38426:17;;;;;;;;;;;38392:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38492:1;38466:28;;:9;:14;;;:28;;;38462:93;;38526:9;38519:16;;;;;;38462:93;38373:197;38365:6;;;;;;;;38325:245;;;;38593:57;;;;;;;;;;:::i;:::-;;;;;;;;38121:537;;;;:::o;11091:191::-;11165:16;11184:6;;;;;;;;;;;11165:25;;11210:8;11201:6;;:17;;;;;;;;;;;;;;;;;;11265:8;11234:40;;11255:8;11234:40;;;;;;;;;;;;11154:128;11091:191;:::o;42584:104::-;42653:27;42663:2;42667:8;42653:27;;;;;;;;;;;;:9;:27::i;:::-;42584:104;;:::o;48150:804::-;48305:4;48326:15;:2;:13;;;:15::i;:::-;48322:625;;;48378:2;48362:36;;;48399:12;:10;:12::i;:::-;48413:4;48419:7;48428:5;48362:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48358:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48625:1;48608:6;:13;:18;48604:273;;;48651:61;;;;;;;;;;:::i;:::-;;;;;;;;48604:273;48827:6;48821:13;48812:6;48808:2;48804:15;48797:38;48358:534;48495:45;;;48485:55;;;:6;:55;;;;48478:62;;;;;48322:625;48931:4;48924:11;;48150:804;;;;;;;:::o;52555:102::-;52615:13;52644:7;52637:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52555:102;:::o;6107:723::-;6163:13;6393:1;6384:5;:10;6380:53;;;6411:10;;;;;;;;;;;;;;;;;;;;;6380:53;6443:12;6458:5;6443:20;;6474:14;6499:78;6514:1;6506:4;:9;6499:78;;6532:8;;;;;:::i;:::-;;;;6563:2;6555:10;;;;;:::i;:::-;;;6499:78;;;6587:19;6619:6;6609:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6587:39;;6637:154;6653:1;6644:5;:10;6637:154;;6681:1;6671:11;;;;;:::i;:::-;;;6748:2;6740:5;:10;;;;:::i;:::-;6727:2;:24;;;;:::i;:::-;6714:39;;6697:6;6704;6697:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6777:2;6768:11;;;;;:::i;:::-;;;6637:154;;;6815:6;6801:21;;;;;6107:723;;;;:::o;37690:229::-;37751:7;37796:1;37779:19;;:5;:19;;;;37771:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37878:12;:19;37891:5;37878:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;37870:41;;37863:48;;37690:229;;;:::o;49442:159::-;;;;;:::o;50013:158::-;;;;;:::o;43051:163::-;43174:32;43180:2;43184:8;43194:5;43201:4;43174:5;:32::i;:::-;43051:163;;;:::o;12522:326::-;12582:4;12839:1;12817:7;:19;;;:23;12810:30;;12522:326;;;:::o;43473:1542::-;43612:20;43650:1;43635:12;;:16;;;;:::i;:::-;43612:39;;43684:1;43670:16;;:2;:16;;;;43662:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43755:1;43743:8;:13;;43735:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43814:61;43844:1;43848:2;43852:12;43866:8;43814:21;:61::i;:::-;44189:8;44153:12;:16;44166:2;44153:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44254:8;44213:12;:16;44226:2;44213:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44313:2;44280:11;:25;44292:12;44280:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;44380:15;44330:11;:25;44342:12;44330:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;44413:20;44436:12;44413:35;;44470:9;44465:415;44485:8;44481:1;:12;44465:415;;;44549:12;44545:2;44524:38;;44541:1;44524:38;;;;;;;;;;;;44585:4;44581:249;;;44648:59;44679:1;44683:2;44687:12;44701:5;44648:22;:59::i;:::-;44614:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;44581:249;44850:14;;;;;;;44495:3;;;;;;;44465:415;;;;44911:12;44896;:27;;;;44128:807;44947:60;44976:1;44980:2;44984:12;44998:8;44947:20;:60::i;:::-;43601:1414;43473:1542;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:108::-;7050:24;7068:5;7050:24;:::i;:::-;7045:3;7038:37;6973:108;;:::o;7087:118::-;7174:24;7192:5;7174:24;:::i;:::-;7169:3;7162:37;7087:118;;:::o;7211:109::-;7292:21;7307:5;7292:21;:::i;:::-;7287:3;7280:34;7211:109;;:::o;7326:360::-;7412:3;7440:38;7472:5;7440:38;:::i;:::-;7494:70;7557:6;7552:3;7494:70;:::i;:::-;7487:77;;7573:52;7618:6;7613:3;7606:4;7599:5;7595:16;7573:52;:::i;:::-;7650:29;7672:6;7650:29;:::i;:::-;7645:3;7641:39;7634:46;;7416:270;7326:360;;;;:::o;7692:364::-;7780:3;7808:39;7841:5;7808:39;:::i;:::-;7863:71;7927:6;7922:3;7863:71;:::i;:::-;7856:78;;7943:52;7988:6;7983:3;7976:4;7969:5;7965:16;7943:52;:::i;:::-;8020:29;8042:6;8020:29;:::i;:::-;8015:3;8011:39;8004:46;;7784:272;7692:364;;;;:::o;8062:377::-;8168:3;8196:39;8229:5;8196:39;:::i;:::-;8251:89;8333:6;8328:3;8251:89;:::i;:::-;8244:96;;8349:52;8394:6;8389:3;8382:4;8375:5;8371:16;8349:52;:::i;:::-;8426:6;8421:3;8417:16;8410:23;;8172:267;8062:377;;;;:::o;8445:366::-;8587:3;8608:67;8672:2;8667:3;8608:67;:::i;:::-;8601:74;;8684:93;8773:3;8684:93;:::i;:::-;8802:2;8797:3;8793:12;8786:19;;8445:366;;;:::o;8817:::-;8959:3;8980:67;9044:2;9039:3;8980:67;:::i;:::-;8973:74;;9056:93;9145:3;9056:93;:::i;:::-;9174:2;9169:3;9165:12;9158:19;;8817:366;;;:::o;9189:::-;9331:3;9352:67;9416:2;9411:3;9352:67;:::i;:::-;9345:74;;9428:93;9517:3;9428:93;:::i;:::-;9546:2;9541:3;9537:12;9530:19;;9189:366;;;:::o;9561:::-;9703:3;9724:67;9788:2;9783:3;9724:67;:::i;:::-;9717:74;;9800:93;9889:3;9800:93;:::i;:::-;9918:2;9913:3;9909:12;9902:19;;9561:366;;;:::o;9933:::-;10075:3;10096:67;10160:2;10155:3;10096:67;:::i;:::-;10089:74;;10172:93;10261:3;10172:93;:::i;:::-;10290:2;10285:3;10281:12;10274:19;;9933:366;;;:::o;10305:::-;10447:3;10468:67;10532:2;10527:3;10468:67;:::i;:::-;10461:74;;10544:93;10633:3;10544:93;:::i;:::-;10662:2;10657:3;10653:12;10646:19;;10305:366;;;:::o;10677:::-;10819:3;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10916:93;11005:3;10916:93;:::i;:::-;11034:2;11029:3;11025:12;11018:19;;10677:366;;;:::o;11049:::-;11191:3;11212:67;11276:2;11271:3;11212:67;:::i;:::-;11205:74;;11288:93;11377:3;11288:93;:::i;:::-;11406:2;11401:3;11397:12;11390:19;;11049:366;;;:::o;11421:::-;11563:3;11584:67;11648:2;11643:3;11584:67;:::i;:::-;11577:74;;11660:93;11749:3;11660:93;:::i;:::-;11778:2;11773:3;11769:12;11762:19;;11421:366;;;:::o;11793:::-;11935:3;11956:67;12020:2;12015:3;11956:67;:::i;:::-;11949:74;;12032:93;12121:3;12032:93;:::i;:::-;12150:2;12145:3;12141:12;12134:19;;11793:366;;;:::o;12165:::-;12307:3;12328:67;12392:2;12387:3;12328:67;:::i;:::-;12321:74;;12404:93;12493:3;12404:93;:::i;:::-;12522:2;12517:3;12513:12;12506:19;;12165:366;;;:::o;12537:365::-;12679:3;12700:66;12764:1;12759:3;12700:66;:::i;:::-;12693:73;;12775:93;12864:3;12775:93;:::i;:::-;12893:2;12888:3;12884:12;12877:19;;12537:365;;;:::o;12908:::-;13050:3;13071:66;13135:1;13130:3;13071:66;:::i;:::-;13064:73;;13146:93;13235:3;13146:93;:::i;:::-;13264:2;13259:3;13255:12;13248:19;;12908:365;;;:::o;13279:366::-;13421:3;13442:67;13506:2;13501:3;13442:67;:::i;:::-;13435:74;;13518:93;13607:3;13518:93;:::i;:::-;13636:2;13631:3;13627:12;13620:19;;13279:366;;;:::o;13651:::-;13793:3;13814:67;13878:2;13873:3;13814:67;:::i;:::-;13807:74;;13890:93;13979:3;13890:93;:::i;:::-;14008:2;14003:3;13999:12;13992:19;;13651:366;;;:::o;14023:::-;14165:3;14186:67;14250:2;14245:3;14186:67;:::i;:::-;14179:74;;14262:93;14351:3;14262:93;:::i;:::-;14380:2;14375:3;14371:12;14364:19;;14023:366;;;:::o;14395:::-;14537:3;14558:67;14622:2;14617:3;14558:67;:::i;:::-;14551:74;;14634:93;14723:3;14634:93;:::i;:::-;14752:2;14747:3;14743:12;14736:19;;14395:366;;;:::o;14767:400::-;14927:3;14948:84;15030:1;15025:3;14948:84;:::i;:::-;14941:91;;15041:93;15130:3;15041:93;:::i;:::-;15159:1;15154:3;15150:11;15143:18;;14767:400;;;:::o;15173:366::-;15315:3;15336:67;15400:2;15395:3;15336:67;:::i;:::-;15329:74;;15412:93;15501:3;15412:93;:::i;:::-;15530:2;15525:3;15521:12;15514:19;;15173:366;;;:::o;15545:::-;15687:3;15708:67;15772:2;15767:3;15708:67;:::i;:::-;15701:74;;15784:93;15873:3;15784:93;:::i;:::-;15902:2;15897:3;15893:12;15886:19;;15545:366;;;:::o;15917:::-;16059:3;16080:67;16144:2;16139:3;16080:67;:::i;:::-;16073:74;;16156:93;16245:3;16156:93;:::i;:::-;16274:2;16269:3;16265:12;16258:19;;15917:366;;;:::o;16289:::-;16431:3;16452:67;16516:2;16511:3;16452:67;:::i;:::-;16445:74;;16528:93;16617:3;16528:93;:::i;:::-;16646:2;16641:3;16637:12;16630:19;;16289:366;;;:::o;16661:::-;16803:3;16824:67;16888:2;16883:3;16824:67;:::i;:::-;16817:74;;16900:93;16989:3;16900:93;:::i;:::-;17018:2;17013:3;17009:12;17002:19;;16661:366;;;:::o;17033:::-;17175:3;17196:67;17260:2;17255:3;17196:67;:::i;:::-;17189:74;;17272:93;17361:3;17272:93;:::i;:::-;17390:2;17385:3;17381:12;17374:19;;17033:366;;;:::o;17405:::-;17547:3;17568:67;17632:2;17627:3;17568:67;:::i;:::-;17561:74;;17644:93;17733:3;17644:93;:::i;:::-;17762:2;17757:3;17753:12;17746:19;;17405:366;;;:::o;17777:::-;17919:3;17940:67;18004:2;17999:3;17940:67;:::i;:::-;17933:74;;18016:93;18105:3;18016:93;:::i;:::-;18134:2;18129:3;18125:12;18118:19;;17777:366;;;:::o;18149:::-;18291:3;18312:67;18376:2;18371:3;18312:67;:::i;:::-;18305:74;;18388:93;18477:3;18388:93;:::i;:::-;18506:2;18501:3;18497:12;18490:19;;18149:366;;;:::o;18521:398::-;18680:3;18701:83;18782:1;18777:3;18701:83;:::i;:::-;18694:90;;18793:93;18882:3;18793:93;:::i;:::-;18911:1;18906:3;18902:11;18895:18;;18521:398;;;:::o;18925:366::-;19067:3;19088:67;19152:2;19147:3;19088:67;:::i;:::-;19081:74;;19164:93;19253:3;19164:93;:::i;:::-;19282:2;19277:3;19273:12;19266:19;;18925:366;;;:::o;19297:::-;19439:3;19460:67;19524:2;19519:3;19460:67;:::i;:::-;19453:74;;19536:93;19625:3;19536:93;:::i;:::-;19654:2;19649:3;19645:12;19638:19;;19297:366;;;:::o;19669:::-;19811:3;19832:67;19896:2;19891:3;19832:67;:::i;:::-;19825:74;;19908:93;19997:3;19908:93;:::i;:::-;20026:2;20021:3;20017:12;20010:19;;19669:366;;;:::o;20041:::-;20183:3;20204:67;20268:2;20263:3;20204:67;:::i;:::-;20197:74;;20280:93;20369:3;20280:93;:::i;:::-;20398:2;20393:3;20389:12;20382:19;;20041:366;;;:::o;20413:::-;20555:3;20576:67;20640:2;20635:3;20576:67;:::i;:::-;20569:74;;20652:93;20741:3;20652:93;:::i;:::-;20770:2;20765:3;20761:12;20754:19;;20413:366;;;:::o;20785:::-;20927:3;20948:67;21012:2;21007:3;20948:67;:::i;:::-;20941:74;;21024:93;21113:3;21024:93;:::i;:::-;21142:2;21137:3;21133:12;21126:19;;20785:366;;;:::o;21157:::-;21299:3;21320:67;21384:2;21379:3;21320:67;:::i;:::-;21313:74;;21396:93;21485:3;21396:93;:::i;:::-;21514:2;21509:3;21505:12;21498:19;;21157:366;;;:::o;21529:::-;21671:3;21692:67;21756:2;21751:3;21692:67;:::i;:::-;21685:74;;21768:93;21857:3;21768:93;:::i;:::-;21886:2;21881:3;21877:12;21870:19;;21529:366;;;:::o;21901:::-;22043:3;22064:67;22128:2;22123:3;22064:67;:::i;:::-;22057:74;;22140:93;22229:3;22140:93;:::i;:::-;22258:2;22253:3;22249:12;22242:19;;21901:366;;;:::o;22343:529::-;22504:4;22499:3;22495:14;22591:4;22584:5;22580:16;22574:23;22610:63;22667:4;22662:3;22658:14;22644:12;22610:63;:::i;:::-;22519:164;22775:4;22768:5;22764:16;22758:23;22794:61;22849:4;22844:3;22840:14;22826:12;22794:61;:::i;:::-;22693:172;22473:399;22343:529;;:::o;22878:118::-;22965:24;22983:5;22965:24;:::i;:::-;22960:3;22953:37;22878:118;;:::o;23002:105::-;23077:23;23094:5;23077:23;:::i;:::-;23072:3;23065:36;23002:105;;:::o;23113:701::-;23394:3;23416:95;23507:3;23498:6;23416:95;:::i;:::-;23409:102;;23528:95;23619:3;23610:6;23528:95;:::i;:::-;23521:102;;23640:148;23784:3;23640:148;:::i;:::-;23633:155;;23805:3;23798:10;;23113:701;;;;;:::o;23820:379::-;24004:3;24026:147;24169:3;24026:147;:::i;:::-;24019:154;;24190:3;24183:10;;23820:379;;;:::o;24205:222::-;24298:4;24336:2;24325:9;24321:18;24313:26;;24349:71;24417:1;24406:9;24402:17;24393:6;24349:71;:::i;:::-;24205:222;;;;:::o;24433:640::-;24628:4;24666:3;24655:9;24651:19;24643:27;;24680:71;24748:1;24737:9;24733:17;24724:6;24680:71;:::i;:::-;24761:72;24829:2;24818:9;24814:18;24805:6;24761:72;:::i;:::-;24843;24911:2;24900:9;24896:18;24887:6;24843:72;:::i;:::-;24962:9;24956:4;24952:20;24947:2;24936:9;24932:18;24925:48;24990:76;25061:4;25052:6;24990:76;:::i;:::-;24982:84;;24433:640;;;;;;;:::o;25079:210::-;25166:4;25204:2;25193:9;25189:18;25181:26;;25217:65;25279:1;25268:9;25264:17;25255:6;25217:65;:::i;:::-;25079:210;;;;:::o;25295:313::-;25408:4;25446:2;25435:9;25431:18;25423:26;;25495:9;25489:4;25485:20;25481:1;25470:9;25466:17;25459:47;25523:78;25596:4;25587:6;25523:78;:::i;:::-;25515:86;;25295:313;;;;:::o;25614:419::-;25780:4;25818:2;25807:9;25803:18;25795:26;;25867:9;25861:4;25857:20;25853:1;25842:9;25838:17;25831:47;25895:131;26021:4;25895:131;:::i;:::-;25887:139;;25614:419;;;:::o;26039:::-;26205:4;26243:2;26232:9;26228:18;26220:26;;26292:9;26286:4;26282:20;26278:1;26267:9;26263:17;26256:47;26320:131;26446:4;26320:131;:::i;:::-;26312:139;;26039:419;;;:::o;26464:::-;26630:4;26668:2;26657:9;26653:18;26645:26;;26717:9;26711:4;26707:20;26703:1;26692:9;26688:17;26681:47;26745:131;26871:4;26745:131;:::i;:::-;26737:139;;26464:419;;;:::o;26889:::-;27055:4;27093:2;27082:9;27078:18;27070:26;;27142:9;27136:4;27132:20;27128:1;27117:9;27113:17;27106:47;27170:131;27296:4;27170:131;:::i;:::-;27162:139;;26889:419;;;:::o;27314:::-;27480:4;27518:2;27507:9;27503:18;27495:26;;27567:9;27561:4;27557:20;27553:1;27542:9;27538:17;27531:47;27595:131;27721:4;27595:131;:::i;:::-;27587:139;;27314:419;;;:::o;27739:::-;27905:4;27943:2;27932:9;27928:18;27920:26;;27992:9;27986:4;27982:20;27978:1;27967:9;27963:17;27956:47;28020:131;28146:4;28020:131;:::i;:::-;28012:139;;27739:419;;;:::o;28164:::-;28330:4;28368:2;28357:9;28353:18;28345:26;;28417:9;28411:4;28407:20;28403:1;28392:9;28388:17;28381:47;28445:131;28571:4;28445:131;:::i;:::-;28437:139;;28164:419;;;:::o;28589:::-;28755:4;28793:2;28782:9;28778:18;28770:26;;28842:9;28836:4;28832:20;28828:1;28817:9;28813:17;28806:47;28870:131;28996:4;28870:131;:::i;:::-;28862:139;;28589:419;;;:::o;29014:::-;29180:4;29218:2;29207:9;29203:18;29195:26;;29267:9;29261:4;29257:20;29253:1;29242:9;29238:17;29231:47;29295:131;29421:4;29295:131;:::i;:::-;29287:139;;29014:419;;;:::o;29439:::-;29605:4;29643:2;29632:9;29628:18;29620:26;;29692:9;29686:4;29682:20;29678:1;29667:9;29663:17;29656:47;29720:131;29846:4;29720:131;:::i;:::-;29712:139;;29439:419;;;:::o;29864:::-;30030:4;30068:2;30057:9;30053:18;30045:26;;30117:9;30111:4;30107:20;30103:1;30092:9;30088:17;30081:47;30145:131;30271:4;30145:131;:::i;:::-;30137:139;;29864:419;;;:::o;30289:::-;30455:4;30493:2;30482:9;30478:18;30470:26;;30542:9;30536:4;30532:20;30528:1;30517:9;30513:17;30506:47;30570:131;30696:4;30570:131;:::i;:::-;30562:139;;30289:419;;;:::o;30714:::-;30880:4;30918:2;30907:9;30903:18;30895:26;;30967:9;30961:4;30957:20;30953:1;30942:9;30938:17;30931:47;30995:131;31121:4;30995:131;:::i;:::-;30987:139;;30714:419;;;:::o;31139:::-;31305:4;31343:2;31332:9;31328:18;31320:26;;31392:9;31386:4;31382:20;31378:1;31367:9;31363:17;31356:47;31420:131;31546:4;31420:131;:::i;:::-;31412:139;;31139:419;;;:::o;31564:::-;31730:4;31768:2;31757:9;31753:18;31745:26;;31817:9;31811:4;31807:20;31803:1;31792:9;31788:17;31781:47;31845:131;31971:4;31845:131;:::i;:::-;31837:139;;31564:419;;;:::o;31989:::-;32155:4;32193:2;32182:9;32178:18;32170:26;;32242:9;32236:4;32232:20;32228:1;32217:9;32213:17;32206:47;32270:131;32396:4;32270:131;:::i;:::-;32262:139;;31989:419;;;:::o;32414:::-;32580:4;32618:2;32607:9;32603:18;32595:26;;32667:9;32661:4;32657:20;32653:1;32642:9;32638:17;32631:47;32695:131;32821:4;32695:131;:::i;:::-;32687:139;;32414:419;;;:::o;32839:::-;33005:4;33043:2;33032:9;33028:18;33020:26;;33092:9;33086:4;33082:20;33078:1;33067:9;33063:17;33056:47;33120:131;33246:4;33120:131;:::i;:::-;33112:139;;32839:419;;;:::o;33264:::-;33430:4;33468:2;33457:9;33453:18;33445:26;;33517:9;33511:4;33507:20;33503:1;33492:9;33488:17;33481:47;33545:131;33671:4;33545:131;:::i;:::-;33537:139;;33264:419;;;:::o;33689:::-;33855:4;33893:2;33882:9;33878:18;33870:26;;33942:9;33936:4;33932:20;33928:1;33917:9;33913:17;33906:47;33970:131;34096:4;33970:131;:::i;:::-;33962:139;;33689:419;;;:::o;34114:::-;34280:4;34318:2;34307:9;34303:18;34295:26;;34367:9;34361:4;34357:20;34353:1;34342:9;34338:17;34331:47;34395:131;34521:4;34395:131;:::i;:::-;34387:139;;34114:419;;;:::o;34539:::-;34705:4;34743:2;34732:9;34728:18;34720:26;;34792:9;34786:4;34782:20;34778:1;34767:9;34763:17;34756:47;34820:131;34946:4;34820:131;:::i;:::-;34812:139;;34539:419;;;:::o;34964:::-;35130:4;35168:2;35157:9;35153:18;35145:26;;35217:9;35211:4;35207:20;35203:1;35192:9;35188:17;35181:47;35245:131;35371:4;35245:131;:::i;:::-;35237:139;;34964:419;;;:::o;35389:::-;35555:4;35593:2;35582:9;35578:18;35570:26;;35642:9;35636:4;35632:20;35628:1;35617:9;35613:17;35606:47;35670:131;35796:4;35670:131;:::i;:::-;35662:139;;35389:419;;;:::o;35814:::-;35980:4;36018:2;36007:9;36003:18;35995:26;;36067:9;36061:4;36057:20;36053:1;36042:9;36038:17;36031:47;36095:131;36221:4;36095:131;:::i;:::-;36087:139;;35814:419;;;:::o;36239:::-;36405:4;36443:2;36432:9;36428:18;36420:26;;36492:9;36486:4;36482:20;36478:1;36467:9;36463:17;36456:47;36520:131;36646:4;36520:131;:::i;:::-;36512:139;;36239:419;;;:::o;36664:::-;36830:4;36868:2;36857:9;36853:18;36845:26;;36917:9;36911:4;36907:20;36903:1;36892:9;36888:17;36881:47;36945:131;37071:4;36945:131;:::i;:::-;36937:139;;36664:419;;;:::o;37089:::-;37255:4;37293:2;37282:9;37278:18;37270:26;;37342:9;37336:4;37332:20;37328:1;37317:9;37313:17;37306:47;37370:131;37496:4;37370:131;:::i;:::-;37362:139;;37089:419;;;:::o;37514:::-;37680:4;37718:2;37707:9;37703:18;37695:26;;37767:9;37761:4;37757:20;37753:1;37742:9;37738:17;37731:47;37795:131;37921:4;37795:131;:::i;:::-;37787:139;;37514:419;;;:::o;37939:::-;38105:4;38143:2;38132:9;38128:18;38120:26;;38192:9;38186:4;38182:20;38178:1;38167:9;38163:17;38156:47;38220:131;38346:4;38220:131;:::i;:::-;38212:139;;37939:419;;;:::o;38364:::-;38530:4;38568:2;38557:9;38553:18;38545:26;;38617:9;38611:4;38607:20;38603:1;38592:9;38588:17;38581:47;38645:131;38771:4;38645:131;:::i;:::-;38637:139;;38364:419;;;:::o;38789:::-;38955:4;38993:2;38982:9;38978:18;38970:26;;39042:9;39036:4;39032:20;39028:1;39017:9;39013:17;39006:47;39070:131;39196:4;39070:131;:::i;:::-;39062:139;;38789:419;;;:::o;39214:::-;39380:4;39418:2;39407:9;39403:18;39395:26;;39467:9;39461:4;39457:20;39453:1;39442:9;39438:17;39431:47;39495:131;39621:4;39495:131;:::i;:::-;39487:139;;39214:419;;;:::o;39639:::-;39805:4;39843:2;39832:9;39828:18;39820:26;;39892:9;39886:4;39882:20;39878:1;39867:9;39863:17;39856:47;39920:131;40046:4;39920:131;:::i;:::-;39912:139;;39639:419;;;:::o;40064:::-;40230:4;40268:2;40257:9;40253:18;40245:26;;40317:9;40311:4;40307:20;40303:1;40292:9;40288:17;40281:47;40345:131;40471:4;40345:131;:::i;:::-;40337:139;;40064:419;;;:::o;40489:350::-;40646:4;40684:2;40673:9;40669:18;40661:26;;40697:135;40829:1;40818:9;40814:17;40805:6;40697:135;:::i;:::-;40489:350;;;;:::o;40845:222::-;40938:4;40976:2;40965:9;40961:18;40953:26;;40989:71;41057:1;41046:9;41042:17;41033:6;40989:71;:::i;:::-;40845:222;;;;:::o;41073:129::-;41107:6;41134:20;;:::i;:::-;41124:30;;41163:33;41191:4;41183:6;41163:33;:::i;:::-;41073:129;;;:::o;41208:75::-;41241:6;41274:2;41268:9;41258:19;;41208:75;:::o;41289:307::-;41350:4;41440:18;41432:6;41429:30;41426:56;;;41462:18;;:::i;:::-;41426:56;41500:29;41522:6;41500:29;:::i;:::-;41492:37;;41584:4;41578;41574:15;41566:23;;41289:307;;;:::o;41602:98::-;41653:6;41687:5;41681:12;41671:22;;41602:98;;;:::o;41706:99::-;41758:6;41792:5;41786:12;41776:22;;41706:99;;;:::o;41811:168::-;41894:11;41928:6;41923:3;41916:19;41968:4;41963:3;41959:14;41944:29;;41811:168;;;;:::o;41985:147::-;42086:11;42123:3;42108:18;;41985:147;;;;:::o;42138:169::-;42222:11;42256:6;42251:3;42244:19;42296:4;42291:3;42287:14;42272:29;;42138:169;;;;:::o;42313:148::-;42415:11;42452:3;42437:18;;42313:148;;;;:::o;42467:305::-;42507:3;42526:20;42544:1;42526:20;:::i;:::-;42521:25;;42560:20;42578:1;42560:20;:::i;:::-;42555:25;;42714:1;42646:66;42642:74;42639:1;42636:81;42633:107;;;42720:18;;:::i;:::-;42633:107;42764:1;42761;42757:9;42750:16;;42467:305;;;;:::o;42778:185::-;42818:1;42835:20;42853:1;42835:20;:::i;:::-;42830:25;;42869:20;42887:1;42869:20;:::i;:::-;42864:25;;42908:1;42898:35;;42913:18;;:::i;:::-;42898:35;42955:1;42952;42948:9;42943:14;;42778:185;;;;:::o;42969:348::-;43009:7;43032:20;43050:1;43032:20;:::i;:::-;43027:25;;43066:20;43084:1;43066:20;:::i;:::-;43061:25;;43254:1;43186:66;43182:74;43179:1;43176:81;43171:1;43164:9;43157:17;43153:105;43150:131;;;43261:18;;:::i;:::-;43150:131;43309:1;43306;43302:9;43291:20;;42969:348;;;;:::o;43323:191::-;43363:4;43383:20;43401:1;43383:20;:::i;:::-;43378:25;;43417:20;43435:1;43417:20;:::i;:::-;43412:25;;43456:1;43453;43450:8;43447:34;;;43461:18;;:::i;:::-;43447:34;43506:1;43503;43499:9;43491:17;;43323:191;;;;:::o;43520:96::-;43557:7;43586:24;43604:5;43586:24;:::i;:::-;43575:35;;43520:96;;;:::o;43622:90::-;43656:7;43699:5;43692:13;43685:21;43674:32;;43622:90;;;:::o;43718:149::-;43754:7;43794:66;43787:5;43783:78;43772:89;;43718:149;;;:::o;43873:126::-;43910:7;43950:42;43943:5;43939:54;43928:65;;43873:126;;;:::o;44005:77::-;44042:7;44071:5;44060:16;;44005:77;;;:::o;44088:101::-;44124:7;44164:18;44157:5;44153:30;44142:41;;44088:101;;;:::o;44195:154::-;44279:6;44274:3;44269;44256:30;44341:1;44332:6;44327:3;44323:16;44316:27;44195:154;;;:::o;44355:307::-;44423:1;44433:113;44447:6;44444:1;44441:13;44433:113;;;44532:1;44527:3;44523:11;44517:18;44513:1;44508:3;44504:11;44497:39;44469:2;44466:1;44462:10;44457:15;;44433:113;;;44564:6;44561:1;44558:13;44555:101;;;44644:1;44635:6;44630:3;44626:16;44619:27;44555:101;44404:258;44355:307;;;:::o;44668:320::-;44712:6;44749:1;44743:4;44739:12;44729:22;;44796:1;44790:4;44786:12;44817:18;44807:81;;44873:4;44865:6;44861:17;44851:27;;44807:81;44935:2;44927:6;44924:14;44904:18;44901:38;44898:84;;;44954:18;;:::i;:::-;44898:84;44719:269;44668:320;;;:::o;44994:281::-;45077:27;45099:4;45077:27;:::i;:::-;45069:6;45065:40;45207:6;45195:10;45192:22;45171:18;45159:10;45156:34;45153:62;45150:88;;;45218:18;;:::i;:::-;45150:88;45258:10;45254:2;45247:22;45037:238;44994:281;;:::o;45281:233::-;45320:3;45343:24;45361:5;45343:24;:::i;:::-;45334:33;;45389:66;45382:5;45379:77;45376:103;;;45459:18;;:::i;:::-;45376:103;45506:1;45499:5;45495:13;45488:20;;45281:233;;;:::o;45520:176::-;45552:1;45569:20;45587:1;45569:20;:::i;:::-;45564:25;;45603:20;45621:1;45603:20;:::i;:::-;45598:25;;45642:1;45632:35;;45647:18;;:::i;:::-;45632:35;45688:1;45685;45681:9;45676:14;;45520:176;;;;:::o;45702:180::-;45750:77;45747:1;45740:88;45847:4;45844:1;45837:15;45871:4;45868:1;45861:15;45888:180;45936:77;45933:1;45926:88;46033:4;46030:1;46023:15;46057:4;46054:1;46047:15;46074:180;46122:77;46119:1;46112:88;46219:4;46216:1;46209:15;46243:4;46240:1;46233:15;46260:180;46308:77;46305:1;46298:88;46405:4;46402:1;46395:15;46429:4;46426:1;46419:15;46446:180;46494:77;46491:1;46484:88;46591:4;46588:1;46581:15;46615:4;46612:1;46605:15;46632:117;46741:1;46738;46731:12;46755:117;46864:1;46861;46854:12;46878:117;46987:1;46984;46977:12;47001:117;47110:1;47107;47100:12;47124:117;47233:1;47230;47223:12;47247:117;47356:1;47353;47346:12;47370:102;47411:6;47462:2;47458:7;47453:2;47446:5;47442:14;47438:28;47428:38;;47370:102;;;:::o;47478:221::-;47618:34;47614:1;47606:6;47602:14;47595:58;47687:4;47682:2;47674:6;47670:15;47663:29;47478:221;:::o;47705:225::-;47845:34;47841:1;47833:6;47829:14;47822:58;47914:8;47909:2;47901:6;47897:15;47890:33;47705:225;:::o;47936:229::-;48076:34;48072:1;48064:6;48060:14;48053:58;48145:12;48140:2;48132:6;48128:15;48121:37;47936:229;:::o;48171:170::-;48311:22;48307:1;48299:6;48295:14;48288:46;48171:170;:::o;48347:172::-;48487:24;48483:1;48475:6;48471:14;48464:48;48347:172;:::o;48525:170::-;48665:22;48661:1;48653:6;48649:14;48642:46;48525:170;:::o;48701:222::-;48841:34;48837:1;48829:6;48825:14;48818:58;48910:5;48905:2;48897:6;48893:15;48886:30;48701:222;:::o;48929:224::-;49069:34;49065:1;49057:6;49053:14;49046:58;49138:7;49133:2;49125:6;49121:15;49114:32;48929:224;:::o;49159:236::-;49299:34;49295:1;49287:6;49283:14;49276:58;49368:19;49363:2;49355:6;49351:15;49344:44;49159:236;:::o;49401:178::-;49541:30;49537:1;49529:6;49525:14;49518:54;49401:178;:::o;49585:172::-;49725:24;49721:1;49713:6;49709:14;49702:48;49585:172;:::o;49763:159::-;49903:11;49899:1;49891:6;49887:14;49880:35;49763:159;:::o;49928:::-;50068:11;50064:1;50056:6;50052:14;50045:35;49928:159;:::o;50093:244::-;50233:34;50229:1;50221:6;50217:14;50210:58;50302:27;50297:2;50289:6;50285:15;50278:52;50093:244;:::o;50343:174::-;50483:26;50479:1;50471:6;50467:14;50460:50;50343:174;:::o;50523:230::-;50663:34;50659:1;50651:6;50647:14;50640:58;50732:13;50727:2;50719:6;50715:15;50708:38;50523:230;:::o;50759:225::-;50899:34;50895:1;50887:6;50883:14;50876:58;50968:8;50963:2;50955:6;50951:15;50944:33;50759:225;:::o;50990:155::-;51130:7;51126:1;51118:6;51114:14;51107:31;50990:155;:::o;51151:182::-;51291:34;51287:1;51279:6;51275:14;51268:58;51151:182;:::o;51339:174::-;51479:26;51475:1;51467:6;51463:14;51456:50;51339:174;:::o;51519:234::-;51659:34;51655:1;51647:6;51643:14;51636:58;51728:17;51723:2;51715:6;51711:15;51704:42;51519:234;:::o;51759:176::-;51899:28;51895:1;51887:6;51883:14;51876:52;51759:176;:::o;51941:237::-;52081:34;52077:1;52069:6;52065:14;52058:58;52150:20;52145:2;52137:6;52133:15;52126:45;51941:237;:::o;52184:172::-;52324:24;52320:1;52312:6;52308:14;52301:48;52184:172;:::o;52362:162::-;52502:14;52498:1;52490:6;52486:14;52479:38;52362:162;:::o;52530:179::-;52670:31;52666:1;52658:6;52654:14;52647:55;52530:179;:::o;52715:221::-;52855:34;52851:1;52843:6;52839:14;52832:58;52924:4;52919:2;52911:6;52907:15;52900:29;52715:221;:::o;52942:114::-;;:::o;53062:166::-;53202:18;53198:1;53190:6;53186:14;53179:42;53062:166;:::o;53234:238::-;53374:34;53370:1;53362:6;53358:14;53351:58;53443:21;53438:2;53430:6;53426:15;53419:46;53234:238;:::o;53478:220::-;53618:34;53614:1;53606:6;53602:14;53595:58;53687:3;53682:2;53674:6;53670:15;53663:28;53478:220;:::o;53704:227::-;53844:34;53840:1;53832:6;53828:14;53821:58;53913:10;53908:2;53900:6;53896:15;53889:35;53704:227;:::o;53937:169::-;54077:21;54073:1;54065:6;54061:14;54054:45;53937:169;:::o;54112:233::-;54252:34;54248:1;54240:6;54236:14;54229:58;54321:16;54316:2;54308:6;54304:15;54297:41;54112:233;:::o;54351:181::-;54491:33;54487:1;54479:6;54475:14;54468:57;54351:181;:::o;54538:234::-;54678:34;54674:1;54666:6;54662:14;54655:58;54747:17;54742:2;54734:6;54730:15;54723:42;54538:234;:::o;54778:232::-;54918:34;54914:1;54906:6;54902:14;54895:58;54987:15;54982:2;54974:6;54970:15;54963:40;54778:232;:::o;55016:122::-;55089:24;55107:5;55089:24;:::i;:::-;55082:5;55079:35;55069:63;;55128:1;55125;55118:12;55069:63;55016:122;:::o;55144:116::-;55214:21;55229:5;55214:21;:::i;:::-;55207:5;55204:32;55194:60;;55250:1;55247;55240:12;55194:60;55144:116;:::o;55266:120::-;55338:23;55355:5;55338:23;:::i;:::-;55331:5;55328:34;55318:62;;55376:1;55373;55366:12;55318:62;55266:120;:::o;55392:122::-;55465:24;55483:5;55465:24;:::i;:::-;55458:5;55455:35;55445:63;;55504:1;55501;55494:12;55445:63;55392:122;:::o
Swarm Source
ipfs://ef2a32a91eb70b7b9e3783149ed3f2fbe46f3d5dd8030ff3d41d009744fd97f2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.