Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
TokenTracker
Multichain Info
N/A
Latest 25 from a total of 86 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 6595680 | 48 mins ago | IN | 0 ETH | 0.00044212 | ||||
Mint | 6595385 | 1 hr ago | IN | 0 ETH | 0.00096932 | ||||
Mint | 6594716 | 4 hrs ago | IN | 0 ETH | 0.01031732 | ||||
Safe Transfer Fr... | 6588514 | 28 hrs ago | IN | 0 ETH | 0.00032696 | ||||
Transfer From | 6588314 | 28 hrs ago | IN | 0 ETH | 0.00166923 | ||||
Safe Transfer Fr... | 6584586 | 43 hrs ago | IN | 0 ETH | 0.0000027 | ||||
Mint | 6584255 | 44 hrs ago | IN | 0 ETH | 0.00004212 | ||||
Transfer From | 6583911 | 45 hrs ago | IN | 0 ETH | 0.00007317 | ||||
Transfer From | 6583910 | 45 hrs ago | IN | 0 ETH | 0.00007331 | ||||
Transfer From | 6583910 | 45 hrs ago | IN | 0 ETH | 0.00007331 | ||||
Mint | 6583858 | 46 hrs ago | IN | 0 ETH | 0.00004192 | ||||
Mint | 6583831 | 46 hrs ago | IN | 0 ETH | 0.00004313 | ||||
Mint | 6583830 | 46 hrs ago | IN | 0 ETH | 0.00030915 | ||||
Mint | 6583829 | 46 hrs ago | IN | 0 ETH | 0.00030641 | ||||
Mint | 6583826 | 46 hrs ago | IN | 0 ETH | 0.00031022 | ||||
Mint | 6583820 | 46 hrs ago | IN | 0 ETH | 0.00030711 | ||||
Transfer From | 6583558 | 47 hrs ago | IN | 0 ETH | 0.00013325 | ||||
Transfer From | 6583556 | 47 hrs ago | IN | 0 ETH | 0.00013372 | ||||
Transfer From | 6583554 | 47 hrs ago | IN | 0 ETH | 0.00018905 | ||||
Mint | 6583520 | 47 hrs ago | IN | 0 ETH | 0.00063096 | ||||
Safe Transfer Fr... | 6583083 | 2 days ago | IN | 0 ETH | 0.00021994 | ||||
Safe Transfer Fr... | 6583039 | 2 days ago | IN | 0 ETH | 0.00020204 | ||||
Safe Transfer Fr... | 6583036 | 2 days ago | IN | 0 ETH | 0.00027927 | ||||
Transfer From | 6576665 | 3 days ago | IN | 0 ETH | 0.00038375 | ||||
Safe Transfer Fr... | 6576658 | 3 days ago | IN | 0 ETH | 0.00024374 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TestToadz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-04 */ // Manually flattened with OZ v4.3.2 from https://etherscan.io/address/0x07e5ce0f8fa46031a1dcc8cb2530f0a52019830d // File contracts/ozcontracts/utils/Context.sol // S_PDX-License-Identifier: MIT 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 contracts/ozcontracts/access/Ownable.sol // S_PDX-License-Identifier: MIT 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/ozcontracts/utils/introspection/IERC165.sol // S_PDX-License-Identifier: MIT 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 contracts/ozcontracts/token/ERC721/IERC721.sol // S_PDX-License-Identifier: MIT 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 contracts/ozcontracts/token/ERC721/IERC721Receiver.sol // S_PDX-License-Identifier: MIT 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 contracts/ozcontracts/token/ERC721/extensions/IERC721Metadata.sol // S_PDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File contracts/ozcontracts/utils/Address.sol // S_PDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/ozcontracts/utils/Strings.sol // S_PDX-License-Identifier: MIT 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 contracts/ozcontracts/utils/introspection/ERC165.sol // S_PDX-License-Identifier: MIT 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 contracts/ozcontracts/token/ERC721/ERC721.sol // S_PDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: 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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File contracts/TestToadz.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; contract TestToadz is ERC721, Ownable { uint256 public constant maxTokens = 6969; uint256 public numAvailableTokens = 6969; uint256 public constant maxMintsPerTx = 3; mapping(address => uint256) public addressToNumOwned; string private _contractURI; bool public devMintLocked = false; uint256[10000] private _availableTokens; constructor() ERC721("TestToadz", "TESTTOADZ") {} // metadata URI string private _baseTokenURI = "ipfs:https://QmWEFSMku6yGLQ9TQr66HjSd9kay8ZDYKbBEfjNi4pLtrr/"; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function tokenURI(uint256 _serialId) public view override returns (string memory) { string memory base = _baseURI(); string memory _tokenURI = Strings.toString(_serialId); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } return string(abi.encodePacked(base, _tokenURI)); } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } //Minting function mint(uint256 quantity) public { uint256 updatedNumAvailableTokens = numAvailableTokens; require( block.timestamp >= 1337133769, "Sale starts at whatever this time is" ); require( quantity <= maxMintsPerTx, "There is a limit on minting too many at a time!" ); require( updatedNumAvailableTokens - quantity >= 0, "Minting this many would exceed supply!" ); require( addressToNumOwned[msg.sender] + quantity <= 20, "Can't own more than 20 toadz" ); require(msg.sender == tx.origin, "No contracts!"); for (uint256 i = 0; i < quantity; i++) { uint256 tokenId = getRandomSerialToken(quantity, i); _safeMint(msg.sender, tokenId); updatedNumAvailableTokens--; } numAvailableTokens = updatedNumAvailableTokens; addressToNumOwned[msg.sender] = addressToNumOwned[msg.sender] + quantity; } //Dev mint special tokens function mintSpecial(uint256[] memory specialIds) external onlyOwner { require(!devMintLocked, "Dev Mint Permanently Locked"); uint256 num = specialIds.length; for (uint256 i = 0; i < num; i++) { uint256 specialId = specialIds[i]; _safeMint(msg.sender, specialId); } } function getRandomSerialToken(uint256 _numToFetch, uint256 _i) internal returns (uint256) { uint256 randomNum = uint256( keccak256( abi.encode( msg.sender, tx.gasprice, block.number, block.timestamp, blockhash(block.number - 1), _numToFetch, _i ) ) ); uint256 randomIndex = randomNum % numAvailableTokens; uint256 valAtIndex = _availableTokens[randomIndex]; uint256 result; if (valAtIndex == 0) { result = randomIndex; } else { result = valAtIndex; } uint256 lastIndex = numAvailableTokens - 1; if (randomIndex != lastIndex) { uint256 lastValInArray = _availableTokens[lastIndex]; if (lastValInArray == 0) { _availableTokens[randomIndex] = lastIndex; } else { _availableTokens[randomIndex] = lastValInArray; } } numAvailableTokens--; return result; } function lockDevMint() public onlyOwner { devMintLocked = true; } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToNumOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devMintLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDevMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"specialIds","type":"uint256[]"}],"name":"mintSpecial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numAvailableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serialId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]
Contract Creation Code
611b39600755600a805460ff1916905560e0604052603660808181529062001ee260a03980516200003a9161271b9160209091019062000134565b503480156200004857600080fd5b50604051806040016040528060098152602001682a32b9ba2a37b0b23d60b91b815250604051806040016040528060098152602001682a22a9aa2a27a0a22d60b91b8152508160009080519060200190620000a592919062000134565b508051620000bb90600190602084019062000134565b505050620000d8620000d2620000de60201b60201c565b620000e2565b62000217565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014290620001da565b90600052602060002090601f016020900481019282620001665760008555620001b1565b82601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b600181811c90821680620001ef57607f821691505b602082108114156200021157634e487b7160e01b600052602260045260246000fd5b50919050565b611cbb80620002276000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063a22cb46511610097578063dc30158b11610071578063dc30158b14610320578063e831574214610328578063e985e9c514610331578063f2fde38b1461036d57600080fd5b8063a22cb465146102e7578063b88d4fde146102fa578063c87b56dd1461030d57600080fd5b8063715018a614610286578063787faa7f1461028e5780638da5cb5b146102ae57806395d89b41146102bf5780639a7c8e69146102c7578063a0712d68146102d457600080fd5b806323b872dd1161013057806323b872dd14610210578063413ac78d1461022357806342842e0e1461023a57806355f804b31461024d5780636352211e1461026057806370a082311461027357600080fd5b806301ffc9a71461017857806306fd5133146101a057806306fdde03146101aa578063081812fc146101bf578063095ea7b3146101ea5780631f65d743146101fd575b600080fd5b61018b6101863660046118ae565b610380565b60405190151581526020015b60405180910390f35b6101a86103d2565b005b6101b2610414565b6040516101979190611a0b565b6101d26101cd36600461195a565b6104a6565b6040516001600160a01b039091168152602001610197565b6101a86101f83660046117d7565b61053b565b6101a861020b366004611801565b610651565b6101a861021e36600461169f565b610716565b61022c60075481565b604051908152602001610197565b6101a861024836600461169f565b610747565b6101a861025b3660046118e8565b610762565b6101d261026e36600461195a565b610799565b61022c61028136600461164a565b610810565b6101a8610897565b61022c61029c36600461164a565b60086020526000908152604090205481565b6006546001600160a01b03166101d2565b6101b26108cd565b600a5461018b9060ff1681565b6101a86102e236600461195a565b6108dc565b6101a86102f536600461179b565b610b35565b6101a86103083660046116db565b610bfa565b6101b261031b36600461195a565b610c32565b61022c600381565b61022c611b3981565b61018b61033f36600461166c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101a861037b36600461164a565b610c89565b60006001600160e01b031982166380ac58cd60e01b14806103b157506001600160e01b03198216635b5e139f60e01b145b806103cc57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146104055760405162461bcd60e51b81526004016103fc90611a70565b60405180910390fd5b600a805460ff19166001179055565b60606000805461042390611bad565b80601f016020809104026020016040519081016040528092919081815260200182805461044f90611bad565b801561049c5780601f106104715761010080835404028352916020019161049c565b820191906000526020600020905b81548152906001019060200180831161047f57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661051f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103fc565b506000908152600460205260409020546001600160a01b031690565b600061054682610799565b9050806001600160a01b0316836001600160a01b031614156105b45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103fc565b336001600160a01b03821614806105d057506105d0813361033f565b6106425760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016103fc565b61064c8383610d24565b505050565b6006546001600160a01b0316331461067b5760405162461bcd60e51b81526004016103fc90611a70565b600a5460ff16156106ce5760405162461bcd60e51b815260206004820152601b60248201527f446576204d696e74205065726d616e656e746c79204c6f636b6564000000000060448201526064016103fc565b805160005b8181101561064c5760008382815181106106ef576106ef611c43565b602002602001015190506107033382610d92565b508061070e81611be8565b9150506106d3565b6107203382610db0565b61073c5760405162461bcd60e51b81526004016103fc90611aa5565b61064c838383610ea7565b61064c83838360405180602001604052806000815250610bfa565b6006546001600160a01b0316331461078c5760405162461bcd60e51b81526004016103fc90611a70565b61064c61271b8383611595565b6000818152600260205260408120546001600160a01b0316806103cc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103fc565b60006001600160a01b03821661087b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103fc565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146108c15760405162461bcd60e51b81526004016103fc90611a70565b6108cb6000611047565b565b60606001805461042390611bad565b600754634fb30ac942101561093f5760405162461bcd60e51b8152602060048201526024808201527f53616c652073746172747320617420776861746576657220746869732074696d6044820152636520697360e01b60648201526084016103fc565b60038211156109a85760405162461bcd60e51b815260206004820152602f60248201527f54686572652069732061206c696d6974206f6e206d696e74696e6720746f6f2060448201526e6d616e7920617420612074696d652160881b60648201526084016103fc565b60006109b48383611b53565b1015610a115760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e672074686973206d616e7920776f756c642065786365656420736044820152657570706c792160d01b60648201526084016103fc565b33600090815260086020526040902054601490610a2f908490611b27565b1115610a7d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774206f776e206d6f7265207468616e20323020746f61647a0000000060448201526064016103fc565b333214610abc5760405162461bcd60e51b815260206004820152600d60248201526c4e6f20636f6e7472616374732160981b60448201526064016103fc565b60005b82811015610b00576000610ad38483611099565b9050610adf3382610d92565b82610ae981611b96565b935050508080610af890611be8565b915050610abf565b50600781905533600090815260086020526040902054610b21908390611b27565b336000908152600860205260409020555050565b6001600160a01b038216331415610b8e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103fc565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c043383610db0565b610c205760405162461bcd60e51b81526004016103fc90611aa5565b610c2c848484846111d2565b50505050565b60606000610c3e611205565b90506000610c4b84611215565b9050815160001415610c5e579392505050565b8181604051602001610c7192919061199f565b60405160208183030381529060405292505050919050565b6006546001600160a01b03163314610cb35760405162461bcd60e51b81526004016103fc90611a70565b6001600160a01b038116610d185760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103fc565b610d2181611047565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d5982610799565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610dac828260405180602001604052806000815250611313565b5050565b6000818152600260205260408120546001600160a01b0316610e295760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103fc565b6000610e3483610799565b9050806001600160a01b0316846001600160a01b03161480610e6f5750836001600160a01b0316610e64846104a6565b6001600160a01b0316145b80610e9f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610eba82610799565b6001600160a01b031614610f225760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016103fc565b6001600160a01b038216610f845760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103fc565b610f8f600082610d24565b6001600160a01b0383166000908152600360205260408120805460019290610fb8908490611b53565b90915550506001600160a01b0382166000908152600360205260408120805460019290610fe6908490611b27565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080333a43426110ab600183611b53565b604080516001600160a01b039096166020870152850193909352606084019190915260808301524060a082015260c0810185905260e08101849052610100016040516020818303038152906040528051906020012060001c90506000600754826111159190611c03565b90506000600b82612710811061112d5761112d611c43565b0154905060008161113f575081611142565b50805b600060016007546111539190611b53565b90508084146111b1576000600b82612710811061117257611172611c43565b01549050806111975781600b86612710811061119057611190611c43565b01556111af565b80600b8661271081106111ac576111ac611c43565b01555b505b600780549060006111c183611b96565b909155509198975050505050505050565b6111dd848484610ea7565b6111e984848484611346565b610c2c5760405162461bcd60e51b81526004016103fc90611a1e565b606061271b805461042390611bad565b6060816112395750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611263578061124d81611be8565b915061125c9050600a83611b3f565b915061123d565b60008167ffffffffffffffff81111561127e5761127e611c59565b6040519080825280601f01601f1916602001820160405280156112a8576020820181803683370190505b5090505b8415610e9f576112bd600183611b53565b91506112ca600a86611c03565b6112d5906030611b27565b60f81b8183815181106112ea576112ea611c43565b60200101906001600160f81b031916908160001a90535061130c600a86611b3f565b94506112ac565b61131d8383611453565b61132a6000848484611346565b61064c5760405162461bcd60e51b81526004016103fc90611a1e565b60006001600160a01b0384163b1561144857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061138a9033908990889088906004016119ce565b602060405180830381600087803b1580156113a457600080fd5b505af19250505080156113d4575060408051601f3d908101601f191682019092526113d1918101906118cb565b60015b61142e573d808015611402576040519150601f19603f3d011682016040523d82523d6000602084013e611407565b606091505b5080516114265760405162461bcd60e51b81526004016103fc90611a1e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e9f565b506001949350505050565b6001600160a01b0382166114a95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103fc565b6000818152600260205260409020546001600160a01b03161561150e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103fc565b6001600160a01b0382166000908152600360205260408120805460019290611537908490611b27565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546115a190611bad565b90600052602060002090601f0160209004810192826115c35760008555611609565b82601f106115dc5782800160ff19823516178555611609565b82800160010185558215611609579182015b828111156116095782358255916020019190600101906115ee565b50611615929150611619565b5090565b5b80821115611615576000815560010161161a565b80356001600160a01b038116811461164557600080fd5b919050565b60006020828403121561165c57600080fd5b6116658261162e565b9392505050565b6000806040838503121561167f57600080fd5b6116888361162e565b91506116966020840161162e565b90509250929050565b6000806000606084860312156116b457600080fd5b6116bd8461162e565b92506116cb6020850161162e565b9150604084013590509250925092565b600080600080608085870312156116f157600080fd5b6116fa8561162e565b9350602061170981870161162e565b935060408601359250606086013567ffffffffffffffff8082111561172d57600080fd5b818801915088601f83011261174157600080fd5b81358181111561175357611753611c59565b611765601f8201601f19168501611af6565b9150808252898482850101111561177b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156117ae57600080fd5b6117b78361162e565b9150602083013580151581146117cc57600080fd5b809150509250929050565b600080604083850312156117ea57600080fd5b6117f38361162e565b946020939093013593505050565b6000602080838503121561181457600080fd5b823567ffffffffffffffff8082111561182c57600080fd5b818501915085601f83011261184057600080fd5b81358181111561185257611852611c59565b8060051b9150611863848301611af6565b8181528481019084860184860187018a101561187e57600080fd5b600095505b838610156118a1578035835260019590950194918601918601611883565b5098975050505050505050565b6000602082840312156118c057600080fd5b813561166581611c6f565b6000602082840312156118dd57600080fd5b815161166581611c6f565b600080602083850312156118fb57600080fd5b823567ffffffffffffffff8082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b86602082850101111561194857600080fd5b60209290920196919550909350505050565b60006020828403121561196c57600080fd5b5035919050565b6000815180845261198b816020860160208601611b6a565b601f01601f19169290920160200192915050565b600083516119b1818460208801611b6a565b8351908301906119c5818360208801611b6a565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a0190830184611973565b9695505050505050565b6020815260006116656020830184611973565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611b1f57611b1f611c59565b604052919050565b60008219821115611b3a57611b3a611c17565b500190565b600082611b4e57611b4e611c2d565b500490565b600082821015611b6557611b65611c17565b500390565b60005b83811015611b85578181015183820152602001611b6d565b83811115610c2c5750506000910152565b600081611ba557611ba5611c17565b506000190190565b600181811c90821680611bc157607f821691505b60208210811415611be257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611bfc57611bfc611c17565b5060010190565b600082611c1257611c12611c2d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d2157600080fdfea2646970667358221220bc32cf2ec999a7382bbf899f9fef68fbfb7a437fa3711c806b53608469629c4564736f6c63430008070033697066733a2f2f516d574546534d6b753679474c51395451723636486a5364396b6179385a44594b624245666a4e6934704c7472722f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063a22cb46511610097578063dc30158b11610071578063dc30158b14610320578063e831574214610328578063e985e9c514610331578063f2fde38b1461036d57600080fd5b8063a22cb465146102e7578063b88d4fde146102fa578063c87b56dd1461030d57600080fd5b8063715018a614610286578063787faa7f1461028e5780638da5cb5b146102ae57806395d89b41146102bf5780639a7c8e69146102c7578063a0712d68146102d457600080fd5b806323b872dd1161013057806323b872dd14610210578063413ac78d1461022357806342842e0e1461023a57806355f804b31461024d5780636352211e1461026057806370a082311461027357600080fd5b806301ffc9a71461017857806306fd5133146101a057806306fdde03146101aa578063081812fc146101bf578063095ea7b3146101ea5780631f65d743146101fd575b600080fd5b61018b6101863660046118ae565b610380565b60405190151581526020015b60405180910390f35b6101a86103d2565b005b6101b2610414565b6040516101979190611a0b565b6101d26101cd36600461195a565b6104a6565b6040516001600160a01b039091168152602001610197565b6101a86101f83660046117d7565b61053b565b6101a861020b366004611801565b610651565b6101a861021e36600461169f565b610716565b61022c60075481565b604051908152602001610197565b6101a861024836600461169f565b610747565b6101a861025b3660046118e8565b610762565b6101d261026e36600461195a565b610799565b61022c61028136600461164a565b610810565b6101a8610897565b61022c61029c36600461164a565b60086020526000908152604090205481565b6006546001600160a01b03166101d2565b6101b26108cd565b600a5461018b9060ff1681565b6101a86102e236600461195a565b6108dc565b6101a86102f536600461179b565b610b35565b6101a86103083660046116db565b610bfa565b6101b261031b36600461195a565b610c32565b61022c600381565b61022c611b3981565b61018b61033f36600461166c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101a861037b36600461164a565b610c89565b60006001600160e01b031982166380ac58cd60e01b14806103b157506001600160e01b03198216635b5e139f60e01b145b806103cc57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146104055760405162461bcd60e51b81526004016103fc90611a70565b60405180910390fd5b600a805460ff19166001179055565b60606000805461042390611bad565b80601f016020809104026020016040519081016040528092919081815260200182805461044f90611bad565b801561049c5780601f106104715761010080835404028352916020019161049c565b820191906000526020600020905b81548152906001019060200180831161047f57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661051f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103fc565b506000908152600460205260409020546001600160a01b031690565b600061054682610799565b9050806001600160a01b0316836001600160a01b031614156105b45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103fc565b336001600160a01b03821614806105d057506105d0813361033f565b6106425760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016103fc565b61064c8383610d24565b505050565b6006546001600160a01b0316331461067b5760405162461bcd60e51b81526004016103fc90611a70565b600a5460ff16156106ce5760405162461bcd60e51b815260206004820152601b60248201527f446576204d696e74205065726d616e656e746c79204c6f636b6564000000000060448201526064016103fc565b805160005b8181101561064c5760008382815181106106ef576106ef611c43565b602002602001015190506107033382610d92565b508061070e81611be8565b9150506106d3565b6107203382610db0565b61073c5760405162461bcd60e51b81526004016103fc90611aa5565b61064c838383610ea7565b61064c83838360405180602001604052806000815250610bfa565b6006546001600160a01b0316331461078c5760405162461bcd60e51b81526004016103fc90611a70565b61064c61271b8383611595565b6000818152600260205260408120546001600160a01b0316806103cc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103fc565b60006001600160a01b03821661087b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103fc565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146108c15760405162461bcd60e51b81526004016103fc90611a70565b6108cb6000611047565b565b60606001805461042390611bad565b600754634fb30ac942101561093f5760405162461bcd60e51b8152602060048201526024808201527f53616c652073746172747320617420776861746576657220746869732074696d6044820152636520697360e01b60648201526084016103fc565b60038211156109a85760405162461bcd60e51b815260206004820152602f60248201527f54686572652069732061206c696d6974206f6e206d696e74696e6720746f6f2060448201526e6d616e7920617420612074696d652160881b60648201526084016103fc565b60006109b48383611b53565b1015610a115760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e672074686973206d616e7920776f756c642065786365656420736044820152657570706c792160d01b60648201526084016103fc565b33600090815260086020526040902054601490610a2f908490611b27565b1115610a7d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774206f776e206d6f7265207468616e20323020746f61647a0000000060448201526064016103fc565b333214610abc5760405162461bcd60e51b815260206004820152600d60248201526c4e6f20636f6e7472616374732160981b60448201526064016103fc565b60005b82811015610b00576000610ad38483611099565b9050610adf3382610d92565b82610ae981611b96565b935050508080610af890611be8565b915050610abf565b50600781905533600090815260086020526040902054610b21908390611b27565b336000908152600860205260409020555050565b6001600160a01b038216331415610b8e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103fc565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c043383610db0565b610c205760405162461bcd60e51b81526004016103fc90611aa5565b610c2c848484846111d2565b50505050565b60606000610c3e611205565b90506000610c4b84611215565b9050815160001415610c5e579392505050565b8181604051602001610c7192919061199f565b60405160208183030381529060405292505050919050565b6006546001600160a01b03163314610cb35760405162461bcd60e51b81526004016103fc90611a70565b6001600160a01b038116610d185760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103fc565b610d2181611047565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610d5982610799565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610dac828260405180602001604052806000815250611313565b5050565b6000818152600260205260408120546001600160a01b0316610e295760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103fc565b6000610e3483610799565b9050806001600160a01b0316846001600160a01b03161480610e6f5750836001600160a01b0316610e64846104a6565b6001600160a01b0316145b80610e9f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610eba82610799565b6001600160a01b031614610f225760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016103fc565b6001600160a01b038216610f845760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103fc565b610f8f600082610d24565b6001600160a01b0383166000908152600360205260408120805460019290610fb8908490611b53565b90915550506001600160a01b0382166000908152600360205260408120805460019290610fe6908490611b27565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080333a43426110ab600183611b53565b604080516001600160a01b039096166020870152850193909352606084019190915260808301524060a082015260c0810185905260e08101849052610100016040516020818303038152906040528051906020012060001c90506000600754826111159190611c03565b90506000600b82612710811061112d5761112d611c43565b0154905060008161113f575081611142565b50805b600060016007546111539190611b53565b90508084146111b1576000600b82612710811061117257611172611c43565b01549050806111975781600b86612710811061119057611190611c43565b01556111af565b80600b8661271081106111ac576111ac611c43565b01555b505b600780549060006111c183611b96565b909155509198975050505050505050565b6111dd848484610ea7565b6111e984848484611346565b610c2c5760405162461bcd60e51b81526004016103fc90611a1e565b606061271b805461042390611bad565b6060816112395750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611263578061124d81611be8565b915061125c9050600a83611b3f565b915061123d565b60008167ffffffffffffffff81111561127e5761127e611c59565b6040519080825280601f01601f1916602001820160405280156112a8576020820181803683370190505b5090505b8415610e9f576112bd600183611b53565b91506112ca600a86611c03565b6112d5906030611b27565b60f81b8183815181106112ea576112ea611c43565b60200101906001600160f81b031916908160001a90535061130c600a86611b3f565b94506112ac565b61131d8383611453565b61132a6000848484611346565b61064c5760405162461bcd60e51b81526004016103fc90611a1e565b60006001600160a01b0384163b1561144857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061138a9033908990889088906004016119ce565b602060405180830381600087803b1580156113a457600080fd5b505af19250505080156113d4575060408051601f3d908101601f191682019092526113d1918101906118cb565b60015b61142e573d808015611402576040519150601f19603f3d011682016040523d82523d6000602084013e611407565b606091505b5080516114265760405162461bcd60e51b81526004016103fc90611a1e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e9f565b506001949350505050565b6001600160a01b0382166114a95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103fc565b6000818152600260205260409020546001600160a01b03161561150e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103fc565b6001600160a01b0382166000908152600360205260408120805460019290611537908490611b27565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546115a190611bad565b90600052602060002090601f0160209004810192826115c35760008555611609565b82601f106115dc5782800160ff19823516178555611609565b82800160010185558215611609579182015b828111156116095782358255916020019190600101906115ee565b50611615929150611619565b5090565b5b80821115611615576000815560010161161a565b80356001600160a01b038116811461164557600080fd5b919050565b60006020828403121561165c57600080fd5b6116658261162e565b9392505050565b6000806040838503121561167f57600080fd5b6116888361162e565b91506116966020840161162e565b90509250929050565b6000806000606084860312156116b457600080fd5b6116bd8461162e565b92506116cb6020850161162e565b9150604084013590509250925092565b600080600080608085870312156116f157600080fd5b6116fa8561162e565b9350602061170981870161162e565b935060408601359250606086013567ffffffffffffffff8082111561172d57600080fd5b818801915088601f83011261174157600080fd5b81358181111561175357611753611c59565b611765601f8201601f19168501611af6565b9150808252898482850101111561177b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156117ae57600080fd5b6117b78361162e565b9150602083013580151581146117cc57600080fd5b809150509250929050565b600080604083850312156117ea57600080fd5b6117f38361162e565b946020939093013593505050565b6000602080838503121561181457600080fd5b823567ffffffffffffffff8082111561182c57600080fd5b818501915085601f83011261184057600080fd5b81358181111561185257611852611c59565b8060051b9150611863848301611af6565b8181528481019084860184860187018a101561187e57600080fd5b600095505b838610156118a1578035835260019590950194918601918601611883565b5098975050505050505050565b6000602082840312156118c057600080fd5b813561166581611c6f565b6000602082840312156118dd57600080fd5b815161166581611c6f565b600080602083850312156118fb57600080fd5b823567ffffffffffffffff8082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b86602082850101111561194857600080fd5b60209290920196919550909350505050565b60006020828403121561196c57600080fd5b5035919050565b6000815180845261198b816020860160208601611b6a565b601f01601f19169290920160200192915050565b600083516119b1818460208801611b6a565b8351908301906119c5818360208801611b6a565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a0190830184611973565b9695505050505050565b6020815260006116656020830184611973565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611b1f57611b1f611c59565b604052919050565b60008219821115611b3a57611b3a611c17565b500190565b600082611b4e57611b4e611c2d565b500490565b600082821015611b6557611b65611c17565b500390565b60005b83811015611b85578181015183820152602001611b6d565b83811115610c2c5750506000910152565b600081611ba557611ba5611c17565b506000190190565b600181811c90821680611bc157607f821691505b60208210811415611be257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611bfc57611bfc611c17565b5060010190565b600082611c1257611c12611c2d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d2157600080fdfea2646970667358221220bc32cf2ec999a7382bbf899f9fef68fbfb7a437fa3711c806b53608469629c4564736f6c63430008070033
Deployed Bytecode Sourcemap
35564:3518:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23338:305;;;;;;:::i;:::-;;:::i;:::-;;;7066:14:1;;7059:22;7041:41;;7029:2;7014:18;23338:305:0;;;;;;;;39006:73;;;:::i;:::-;;24283:100;;;:::i;:::-;;;;;;;:::i;25842:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5726:32:1;;;5708:51;;5696:2;5681:18;25842:221:0;5562:203:1;25365:411:0;;;;;;:::i;:::-;;:::i;37685:305::-;;;;;;:::i;:::-;;:::i;26732:339::-;;;;;;:::i;:::-;;:::i;35652:40::-;;;;;;;;;15712:25:1;;;15700:2;15685:18;35652:40:0;15566:177:1;27142:185:0;;;;;;:::i;:::-;;:::i;36595:100::-;;;;;;:::i;:::-;;:::i;23977:239::-;;;;;;:::i;:::-;;:::i;23707:208::-;;;;;;:::i;:::-;;:::i;2663:94::-;;;:::i;35743:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;2012:87;2085:6;;-1:-1:-1;;;;;2085:6:0;2012:87;;24452:104;;;:::i;35832:33::-;;;;;;;;;36714:936;;;;;;:::i;:::-;;:::i;26135:295::-;;;;;;:::i;:::-;;:::i;27398:328::-;;;;;;:::i;:::-;;:::i;36198:391::-;;;;;;:::i;:::-;;:::i;35697:41::-;;35737:1;35697:41;;35607:40;;35643:4;35607:40;;26501:164;;;;;;:::i;:::-;-1:-1:-1;;;;;26622:25:0;;;26598:4;26622:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26501:164;2912:192;;;;;;:::i;:::-;;:::i;23338:305::-;23440:4;-1:-1:-1;;;;;;23477:40:0;;-1:-1:-1;;;23477:40:0;;:105;;-1:-1:-1;;;;;;;23534:48:0;;-1:-1:-1;;;23534:48:0;23477:105;:158;;;-1:-1:-1;;;;;;;;;;21922:40:0;;;23599:36;23457:178;23338:305;-1:-1:-1;;23338:305:0:o;39006:73::-;2085:6;;-1:-1:-1;;;;;2085:6:0;851:10;2232:23;2224:68;;;;-1:-1:-1;;;2224:68:0;;;;;;;:::i;:::-;;;;;;;;;39053:13:::1;:20:::0;;-1:-1:-1;;39053:20:0::1;39069:4;39053:20;::::0;;39006:73::o;24283:100::-;24337:13;24370:5;24363:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24283:100;:::o;25842:221::-;25918:7;29325:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29325:16:0;25938:73;;;;-1:-1:-1;;;25938:73:0;;12650:2:1;25938:73:0;;;12632:21:1;12689:2;12669:18;;;12662:30;12728:34;12708:18;;;12701:62;-1:-1:-1;;;12779:18:1;;;12772:42;12831:19;;25938:73:0;12448:408:1;25938:73:0;-1:-1:-1;26031:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26031:24:0;;25842:221::o;25365:411::-;25446:13;25462:23;25477:7;25462:14;:23::i;:::-;25446:39;;25510:5;-1:-1:-1;;;;;25504:11:0;:2;-1:-1:-1;;;;;25504:11:0;;;25496:57;;;;-1:-1:-1;;;25496:57:0;;14250:2:1;25496:57:0;;;14232:21:1;14289:2;14269:18;;;14262:30;14328:34;14308:18;;;14301:62;-1:-1:-1;;;14379:18:1;;;14372:31;14420:19;;25496:57:0;14048:397:1;25496:57:0;851:10;-1:-1:-1;;;;;25588:21:0;;;;:62;;-1:-1:-1;25613:37:0;25630:5;851:10;26501:164;:::i;25613:37::-;25566:168;;;;-1:-1:-1;;;25566:168:0;;10686:2:1;25566:168:0;;;10668:21:1;10725:2;10705:18;;;10698:30;10764:34;10744:18;;;10737:62;10835:26;10815:18;;;10808:54;10879:19;;25566:168:0;10484:420:1;25566:168:0;25747:21;25756:2;25760:7;25747:8;:21::i;:::-;25435:341;25365:411;;:::o;37685:305::-;2085:6;;-1:-1:-1;;;;;2085:6:0;851:10;2232:23;2224:68;;;;-1:-1:-1;;;2224:68:0;;;;;;;:::i;:::-;37770:13:::1;::::0;::::1;;37769:14;37761:54;;;::::0;-1:-1:-1;;;37761:54:0;;15412:2:1;37761:54:0::1;::::0;::::1;15394:21:1::0;15451:2;15431:18;;;15424:30;15490:29;15470:18;;;15463:57;15537:18;;37761:54:0::1;15210:351:1::0;37761:54:0::1;37836:17:::0;;37822:11:::1;37860:125;37884:3;37880:1;:7;37860:125;;;37903:17;37923:10;37934:1;37923:13;;;;;;;;:::i;:::-;;;;;;;37903:33;;37945:32;37955:10;37967:9;37945;:32::i;:::-;-1:-1:-1::0;37889:3:0;::::1;::::0;::::1;:::i;:::-;;;;37860:125;;26732:339:::0;26927:41;851:10;26960:7;26927:18;:41::i;:::-;26919:103;;;;-1:-1:-1;;;26919:103:0;;;;;;;:::i;:::-;27035:28;27045:4;27051:2;27055:7;27035:9;:28::i;27142:185::-;27280:39;27297:4;27303:2;27307:7;27280:39;;;;;;;;;;;;:16;:39::i;36595:100::-;2085:6;;-1:-1:-1;;;;;2085:6:0;851:10;2232:23;2224:68;;;;-1:-1:-1;;;2224:68:0;;;;;;;:::i;:::-;36666:23:::1;:13;36682:7:::0;;36666:23:::1;:::i;23977:239::-:0;24049:7;24085:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24085:16:0;24120:19;24112:73;;;;-1:-1:-1;;;24112:73:0;;11522:2:1;24112:73:0;;;11504:21:1;11561:2;11541:18;;;11534:30;11600:34;11580:18;;;11573:62;-1:-1:-1;;;11651:18:1;;;11644:39;11700:19;;24112:73:0;11320:405:1;23707:208:0;23779:7;-1:-1:-1;;;;;23807:19:0;;23799:74;;;;-1:-1:-1;;;23799:74:0;;11111:2:1;23799:74:0;;;11093:21:1;11150:2;11130:18;;;11123:30;11189:34;11169:18;;;11162:62;-1:-1:-1;;;11240:18:1;;;11233:40;11290:19;;23799:74:0;10909:406:1;23799:74:0;-1:-1:-1;;;;;;23891:16:0;;;;;:9;:16;;;;;;;23707:208::o;2663:94::-;2085:6;;-1:-1:-1;;;;;2085:6:0;851:10;2232:23;2224:68;;;;-1:-1:-1;;;2224:68:0;;;;;;;:::i;:::-;2728:21:::1;2746:1;2728:9;:21::i;:::-;2663:94::o:0;24452:104::-;24508:13;24541:7;24534:14;;;;;:::i;36714:936::-;36796:18;;36856:10;36837:15;:29;;36821:99;;;;-1:-1:-1;;;36821:99:0;;9868:2:1;36821:99:0;;;9850:21:1;9907:2;9887:18;;;9880:30;9946:34;9926:18;;;9919:62;-1:-1:-1;;;9997:18:1;;;9990:34;10041:19;;36821:99:0;9666:400:1;36821:99:0;35737:1;36943:8;:25;;36927:106;;;;-1:-1:-1;;;36927:106:0;;13834:2:1;36927:106:0;;;13816:21:1;13873:2;13853:18;;;13846:30;13912:34;13892:18;;;13885:62;-1:-1:-1;;;13963:18:1;;;13956:45;14018:19;;36927:106:0;13632:411:1;36927:106:0;37096:1;37056:36;37084:8;37056:25;:36;:::i;:::-;:41;;37040:113;;;;-1:-1:-1;;;37040:113:0;;7938:2:1;37040:113:0;;;7920:21:1;7977:2;7957:18;;;7950:30;8016:34;7996:18;;;7989:62;-1:-1:-1;;;8067:18:1;;;8060:36;8113:19;;37040:113:0;7736:402:1;37040:113:0;37194:10;37176:29;;;;:17;:29;;;;;;37220:2;;37176:40;;37208:8;;37176:40;:::i;:::-;:46;;37160:108;;;;-1:-1:-1;;;37160:108:0;;11932:2:1;37160:108:0;;;11914:21:1;11971:2;11951:18;;;11944:30;12010;11990:18;;;11983:58;12058:18;;37160:108:0;11730:352:1;37160:108:0;37283:10;37297:9;37283:23;37275:49;;;;-1:-1:-1;;;37275:49:0;;14652:2:1;37275:49:0;;;14634:21:1;14691:2;14671:18;;;14664:30;-1:-1:-1;;;14710:18:1;;;14703:43;14763:18;;37275:49:0;14450:337:1;37275:49:0;37336:9;37331:182;37355:8;37351:1;:12;37331:182;;;37379:15;37397:33;37418:8;37428:1;37397:20;:33::i;:::-;37379:51;;37439:30;37449:10;37461:7;37439:9;:30::i;:::-;37478:27;;;;:::i;:::-;;;;37370:143;37365:3;;;;;:::i;:::-;;;;37331:182;;;-1:-1:-1;37519:18:0;:46;;;37622:10;37604:29;;;;:17;:29;;;;;;:40;;37636:8;;37604:40;:::i;:::-;37590:10;37572:29;;;;:17;:29;;;;;:72;-1:-1:-1;;36714:936:0:o;26135:295::-;-1:-1:-1;;;;;26238:24:0;;851:10;26238:24;;26230:62;;;;-1:-1:-1;;;26230:62:0;;9514:2:1;26230:62:0;;;9496:21:1;9553:2;9533:18;;;9526:30;9592:27;9572:18;;;9565:55;9637:18;;26230:62:0;9312:349:1;26230:62:0;851:10;26305:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26305:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26305:53:0;;;;;;;;;;26374:48;;7041:41:1;;;26305:42:0;;851:10;26374:48;;7014:18:1;26374:48:0;;;;;;;26135:295;;:::o;27398:328::-;27573:41;851:10;27606:7;27573:18;:41::i;:::-;27565:103;;;;-1:-1:-1;;;27565:103:0;;;;;;;:::i;:::-;27679:39;27693:4;27699:2;27703:7;27712:5;27679:13;:39::i;:::-;27398:328;;;;:::o;36198:391::-;36285:13;36310:18;36331:10;:8;:10::i;:::-;36310:31;;36348:23;36374:27;36391:9;36374:16;:27::i;:::-;36348:53;;36475:4;36469:18;36491:1;36469:23;36465:62;;;36510:9;36198:391;-1:-1:-1;;;36198:391:0:o;36465:62::-;36566:4;36572:9;36549:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36535:48;;;;36198:391;;;:::o;2912:192::-;2085:6;;-1:-1:-1;;;;;2085:6:0;851:10;2232:23;2224:68;;;;-1:-1:-1;;;2224:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3001:22:0;::::1;2993:73;;;::::0;-1:-1:-1;;;2993:73:0;;8345:2:1;2993:73:0::1;::::0;::::1;8327:21:1::0;8384:2;8364:18;;;8357:30;8423:34;8403:18;;;8396:62;-1:-1:-1;;;8474:18:1;;;8467:36;8520:19;;2993:73:0::1;8143:402:1::0;2993:73:0::1;3077:19;3087:8;3077:9;:19::i;:::-;2912:192:::0;:::o;33218:174::-;33293:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33293:29:0;-1:-1:-1;;;;;33293:29:0;;;;;;;;:24;;33347:23;33293:24;33347:14;:23::i;:::-;-1:-1:-1;;;;;33338:46:0;;;;;;;;;;;33218:174;;:::o;30220:110::-;30296:26;30306:2;30310:7;30296:26;;;;;;;;;;;;:9;:26::i;:::-;30220:110;;:::o;29530:348::-;29623:4;29325:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29325:16:0;29640:73;;;;-1:-1:-1;;;29640:73:0;;10273:2:1;29640:73:0;;;10255:21:1;10312:2;10292:18;;;10285:30;10351:34;10331:18;;;10324:62;-1:-1:-1;;;10402:18:1;;;10395:42;10454:19;;29640:73:0;10071:408:1;29640:73:0;29724:13;29740:23;29755:7;29740:14;:23::i;:::-;29724:39;;29793:5;-1:-1:-1;;;;;29782:16:0;:7;-1:-1:-1;;;;;29782:16:0;;:51;;;;29826:7;-1:-1:-1;;;;;29802:31:0;:20;29814:7;29802:11;:20::i;:::-;-1:-1:-1;;;;;29802:31:0;;29782:51;:87;;;-1:-1:-1;;;;;;26622:25:0;;;26598:4;26622:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29837:32;29774:96;29530:348;-1:-1:-1;;;;29530:348:0:o;32522:578::-;32681:4;-1:-1:-1;;;;;32654:31:0;:23;32669:7;32654:14;:23::i;:::-;-1:-1:-1;;;;;32654:31:0;;32646:85;;;;-1:-1:-1;;;32646:85:0;;13424:2:1;32646:85:0;;;13406:21:1;13463:2;13443:18;;;13436:30;13502:34;13482:18;;;13475:62;-1:-1:-1;;;13553:18:1;;;13546:39;13602:19;;32646:85:0;13222:405:1;32646:85:0;-1:-1:-1;;;;;32750:16:0;;32742:65;;;;-1:-1:-1;;;32742:65:0;;9109:2:1;32742:65:0;;;9091:21:1;9148:2;9128:18;;;9121:30;9187:34;9167:18;;;9160:62;-1:-1:-1;;;9238:18:1;;;9231:34;9282:19;;32742:65:0;8907:400:1;32742:65:0;32924:29;32941:1;32945:7;32924:8;:29::i;:::-;-1:-1:-1;;;;;32966:15:0;;;;;;:9;:15;;;;;:20;;32985:1;;32966:15;:20;;32985:1;;32966:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32997:13:0;;;;;;:9;:13;;;;;:18;;33014:1;;32997:13;:18;;33014:1;;32997:18;:::i;:::-;;;;-1:-1:-1;;33026:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33026:21:0;-1:-1:-1;;;;;33026:21:0;;;;;;;;;33065:27;;33026:16;;33065:27;;;;;;;32522:578;;;:::o;3112:173::-;3187:6;;;-1:-1:-1;;;;;3204:17:0;;;-1:-1:-1;;;;;;3204:17:0;;;;;;;3237:40;;3187:6;;;3204:17;3187:6;;3237:40;;3168:16;;3237:40;3157:128;3112:173;:::o;37996:1004::-;38087:7;;38185:10;38208:11;38232:12;38257:15;38295:16;38310:1;38232:12;38295:16;:::i;:::-;38162:200;;;-1:-1:-1;;;;;6596:32:1;;;38162:200:0;;;6578:51:1;6645:18;;6638:34;;;;6688:18;;;6681:34;;;;6731:18;;;6724:34;38285:27:0;6774:19:1;;;6767:35;6818:19;;;6811:35;;;6862:19;;;6855:35;;;6550:19;;38162:200:0;;;;;;;;;;;;38142:229;;;;;;38126:252;;38106:272;;38385:19;38419:18;;38407:9;:30;;;;:::i;:::-;38385:52;;38444:18;38465:16;38482:11;38465:29;;;;;;;:::i;:::-;;;;-1:-1:-1;38501:14:0;38526:15;38522:100;;-1:-1:-1;38561:11:0;38522:100;;;-1:-1:-1;38604:10:0;38522:100;38630:17;38671:1;38650:18;;:22;;;;:::i;:::-;38630:42;;38698:9;38683:11;:24;38679:267;;38718:22;38743:16;38760:9;38743:27;;;;;;;:::i;:::-;;;;-1:-1:-1;38783:19:0;38779:160;;38847:9;38815:16;38832:11;38815:29;;;;;;;:::i;:::-;;:41;38779:160;;;38915:14;38883:16;38900:11;38883:29;;;;;;;:::i;:::-;;:46;38779:160;38709:237;38679:267;38954:18;:20;;;:18;:20;;;:::i;:::-;;;;-1:-1:-1;38988:6:0;;37996:1004;-1:-1:-1;;;;;;;;37996:1004:0:o;28608:315::-;28765:28;28775:4;28781:2;28785:7;28765:9;:28::i;:::-;28812:48;28835:4;28841:2;28845:7;28854:5;28812:22;:48::i;:::-;28804:111;;;;-1:-1:-1;;;28804:111:0;;;;;;;:::i;36084:108::-;36144:13;36173;36166:20;;;;;:::i;19227:723::-;19283:13;19504:10;19500:53;;-1:-1:-1;;19531:10:0;;;;;;;;;;;;-1:-1:-1;;;19531:10:0;;;;;19227:723::o;19500:53::-;19578:5;19563:12;19619:78;19626:9;;19619:78;;19652:8;;;;:::i;:::-;;-1:-1:-1;19675:10:0;;-1:-1:-1;19683:2:0;19675:10;;:::i;:::-;;;19619:78;;;19707:19;19739:6;19729:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19729:17:0;;19707:39;;19757:154;19764:10;;19757:154;;19791:11;19801:1;19791:11;;:::i;:::-;;-1:-1:-1;19860:10:0;19868:2;19860:5;:10;:::i;:::-;19847:24;;:2;:24;:::i;:::-;19834:39;;19817:6;19824;19817:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;19817:56:0;;;;;;;;-1:-1:-1;19888:11:0;19897:2;19888:11;;:::i;:::-;;;19757:154;;30557:321;30687:18;30693:2;30697:7;30687:5;:18::i;:::-;30738:54;30769:1;30773:2;30777:7;30786:5;30738:22;:54::i;:::-;30716:154;;;;-1:-1:-1;;;30716:154:0;;;;;;;:::i;33957:799::-;34112:4;-1:-1:-1;;;;;34133:13:0;;11877:20;11925:8;34129:620;;34169:72;;-1:-1:-1;;;34169:72:0;;-1:-1:-1;;;;;34169:36:0;;;;;:72;;851:10;;34220:4;;34226:7;;34235:5;;34169:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34169:72:0;;;;;;;;-1:-1:-1;;34169:72:0;;;;;;;;;;;;:::i;:::-;;;34165:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34411:13:0;;34407:272;;34454:60;;-1:-1:-1;;;34454:60:0;;;;;;;:::i;34407:272::-;34629:6;34623:13;34614:6;34610:2;34606:15;34599:38;34165:529;-1:-1:-1;;;;;;34292:51:0;-1:-1:-1;;;34292:51:0;;-1:-1:-1;34285:58:0;;34129:620;-1:-1:-1;34733:4:0;33957:799;;;;;;:::o;31214:382::-;-1:-1:-1;;;;;31294:16:0;;31286:61;;;;-1:-1:-1;;;31286:61:0;;12289:2:1;31286:61:0;;;12271:21:1;;;12308:18;;;12301:30;12367:34;12347:18;;;12340:62;12419:18;;31286:61:0;12087:356:1;31286:61:0;29301:4;29325:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29325:16:0;:30;31358:58;;;;-1:-1:-1;;;31358:58:0;;8752:2:1;31358:58:0;;;8734:21:1;8791:2;8771:18;;;8764:30;8830;8810:18;;;8803:58;8878:18;;31358:58:0;8550:352:1;31358:58:0;-1:-1:-1;;;;;31487:13:0;;;;;;:9;:13;;;;;:18;;31504:1;;31487:13;:18;;31504:1;;31487:18;:::i;:::-;;;;-1:-1:-1;;31516:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31516:21:0;-1:-1:-1;;;;;31516:21:0;;;;;;;;31555:33;;31516:16;;;31555:33;;31516:16;;31555:33;31214:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:980::-;1076:6;1084;1092;1100;1153:3;1141:9;1132:7;1128:23;1124:33;1121:53;;;1170:1;1167;1160:12;1121:53;1193:29;1212:9;1193:29;:::i;:::-;1183:39;;1241:2;1262:38;1296:2;1285:9;1281:18;1262:38;:::i;:::-;1252:48;;1347:2;1336:9;1332:18;1319:32;1309:42;;1402:2;1391:9;1387:18;1374:32;1425:18;1466:2;1458:6;1455:14;1452:34;;;1482:1;1479;1472:12;1452:34;1520:6;1509:9;1505:22;1495:32;;1565:7;1558:4;1554:2;1550:13;1546:27;1536:55;;1587:1;1584;1577:12;1536:55;1623:2;1610:16;1645:2;1641;1638:10;1635:36;;;1651:18;;:::i;:::-;1693:53;1736:2;1717:13;;-1:-1:-1;;1713:27:1;1709:36;;1693:53;:::i;:::-;1680:66;;1769:2;1762:5;1755:17;1809:7;1804:2;1799;1795;1791:11;1787:20;1784:33;1781:53;;;1830:1;1827;1820:12;1781:53;1885:2;1880;1876;1872:11;1867:2;1860:5;1856:14;1843:45;1929:1;1924:2;1919;1912:5;1908:14;1904:23;1897:34;;1950:5;1940:15;;;;;981:980;;;;;;;:::o;1966:347::-;2031:6;2039;2092:2;2080:9;2071:7;2067:23;2063:32;2060:52;;;2108:1;2105;2098:12;2060:52;2131:29;2150:9;2131:29;:::i;:::-;2121:39;;2210:2;2199:9;2195:18;2182:32;2257:5;2250:13;2243:21;2236:5;2233:32;2223:60;;2279:1;2276;2269:12;2223:60;2302:5;2292:15;;;1966:347;;;;;:::o;2318:254::-;2386:6;2394;2447:2;2435:9;2426:7;2422:23;2418:32;2415:52;;;2463:1;2460;2453:12;2415:52;2486:29;2505:9;2486:29;:::i;:::-;2476:39;2562:2;2547:18;;;;2534:32;;-1:-1:-1;;;2318:254:1:o;2577:957::-;2661:6;2692:2;2735;2723:9;2714:7;2710:23;2706:32;2703:52;;;2751:1;2748;2741:12;2703:52;2791:9;2778:23;2820:18;2861:2;2853:6;2850:14;2847:34;;;2877:1;2874;2867:12;2847:34;2915:6;2904:9;2900:22;2890:32;;2960:7;2953:4;2949:2;2945:13;2941:27;2931:55;;2982:1;2979;2972:12;2931:55;3018:2;3005:16;3040:2;3036;3033:10;3030:36;;;3046:18;;:::i;:::-;3092:2;3089:1;3085:10;3075:20;;3115:28;3139:2;3135;3131:11;3115:28;:::i;:::-;3177:15;;;3208:12;;;;3240:11;;;3270;;;3266:20;;3263:33;-1:-1:-1;3260:53:1;;;3309:1;3306;3299:12;3260:53;3331:1;3322:10;;3341:163;3355:2;3352:1;3349:9;3341:163;;;3412:17;;3400:30;;3373:1;3366:9;;;;;3450:12;;;;3482;;3341:163;;;-1:-1:-1;3523:5:1;2577:957;-1:-1:-1;;;;;;;;2577:957:1:o;3539:245::-;3597:6;3650:2;3638:9;3629:7;3625:23;3621:32;3618:52;;;3666:1;3663;3656:12;3618:52;3705:9;3692:23;3724:30;3748:5;3724:30;:::i;3789:249::-;3858:6;3911:2;3899:9;3890:7;3886:23;3882:32;3879:52;;;3927:1;3924;3917:12;3879:52;3959:9;3953:16;3978:30;4002:5;3978:30;:::i;4043:592::-;4114:6;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4231:9;4218:23;4260:18;4301:2;4293:6;4290:14;4287:34;;;4317:1;4314;4307:12;4287:34;4355:6;4344:9;4340:22;4330:32;;4400:7;4393:4;4389:2;4385:13;4381:27;4371:55;;4422:1;4419;4412:12;4371:55;4462:2;4449:16;4488:2;4480:6;4477:14;4474:34;;;4504:1;4501;4494:12;4474:34;4549:7;4544:2;4535:6;4531:2;4527:15;4523:24;4520:37;4517:57;;;4570:1;4567;4560:12;4517:57;4601:2;4593:11;;;;;4623:6;;-1:-1:-1;4043:592:1;;-1:-1:-1;;;;4043:592:1:o;4640:180::-;4699:6;4752:2;4740:9;4731:7;4727:23;4723:32;4720:52;;;4768:1;4765;4758:12;4720:52;-1:-1:-1;4791:23:1;;4640:180;-1:-1:-1;4640:180:1:o;4825:257::-;4866:3;4904:5;4898:12;4931:6;4926:3;4919:19;4947:63;5003:6;4996:4;4991:3;4987:14;4980:4;4973:5;4969:16;4947:63;:::i;:::-;5064:2;5043:15;-1:-1:-1;;5039:29:1;5030:39;;;;5071:4;5026:50;;4825:257;-1:-1:-1;;4825:257:1:o;5087:470::-;5266:3;5304:6;5298:13;5320:53;5366:6;5361:3;5354:4;5346:6;5342:17;5320:53;:::i;:::-;5436:13;;5395:16;;;;5458:57;5436:13;5395:16;5492:4;5480:17;;5458:57;:::i;:::-;5531:20;;5087:470;-1:-1:-1;;;;5087:470:1:o;5770:488::-;-1:-1:-1;;;;;6039:15:1;;;6021:34;;6091:15;;6086:2;6071:18;;6064:43;6138:2;6123:18;;6116:34;;;6186:3;6181:2;6166:18;;6159:31;;;5964:4;;6207:45;;6232:19;;6224:6;6207:45;:::i;:::-;6199:53;5770:488;-1:-1:-1;;;;;;5770:488:1:o;7093:219::-;7242:2;7231:9;7224:21;7205:4;7262:44;7302:2;7291:9;7287:18;7279:6;7262:44;:::i;7317:414::-;7519:2;7501:21;;;7558:2;7538:18;;;7531:30;7597:34;7592:2;7577:18;;7570:62;-1:-1:-1;;;7663:2:1;7648:18;;7641:48;7721:3;7706:19;;7317:414::o;12861:356::-;13063:2;13045:21;;;13082:18;;;13075:30;13141:34;13136:2;13121:18;;13114:62;13208:2;13193:18;;12861:356::o;14792:413::-;14994:2;14976:21;;;15033:2;15013:18;;;15006:30;15072:34;15067:2;15052:18;;15045:62;-1:-1:-1;;;15138:2:1;15123:18;;15116:47;15195:3;15180:19;;14792:413::o;15748:275::-;15819:2;15813:9;15884:2;15865:13;;-1:-1:-1;;15861:27:1;15849:40;;15919:18;15904:34;;15940:22;;;15901:62;15898:88;;;15966:18;;:::i;:::-;16002:2;15995:22;15748:275;;-1:-1:-1;15748:275:1:o;16028:128::-;16068:3;16099:1;16095:6;16092:1;16089:13;16086:39;;;16105:18;;:::i;:::-;-1:-1:-1;16141:9:1;;16028:128::o;16161:120::-;16201:1;16227;16217:35;;16232:18;;:::i;:::-;-1:-1:-1;16266:9:1;;16161:120::o;16286:125::-;16326:4;16354:1;16351;16348:8;16345:34;;;16359:18;;:::i;:::-;-1:-1:-1;16396:9:1;;16286:125::o;16416:258::-;16488:1;16498:113;16512:6;16509:1;16506:13;16498:113;;;16588:11;;;16582:18;16569:11;;;16562:39;16534:2;16527:10;16498:113;;;16629:6;16626:1;16623:13;16620:48;;;-1:-1:-1;;16664:1:1;16646:16;;16639:27;16416:258::o;16679:136::-;16718:3;16746:5;16736:39;;16755:18;;:::i;:::-;-1:-1:-1;;;16791:18:1;;16679:136::o;16820:380::-;16899:1;16895:12;;;;16942;;;16963:61;;17017:4;17009:6;17005:17;16995:27;;16963:61;17070:2;17062:6;17059:14;17039:18;17036:38;17033:161;;;17116:10;17111:3;17107:20;17104:1;17097:31;17151:4;17148:1;17141:15;17179:4;17176:1;17169:15;17033:161;;16820:380;;;:::o;17205:135::-;17244:3;-1:-1:-1;;17265:17:1;;17262:43;;;17285:18;;:::i;:::-;-1:-1:-1;17332:1:1;17321:13;;17205:135::o;17345:112::-;17377:1;17403;17393:35;;17408:18;;:::i;:::-;-1:-1:-1;17442:9:1;;17345:112::o;17462:127::-;17523:10;17518:3;17514:20;17511:1;17504:31;17554:4;17551:1;17544:15;17578:4;17575:1;17568:15;17594:127;17655:10;17650:3;17646:20;17643:1;17636:31;17686:4;17683:1;17676:15;17710:4;17707:1;17700:15;17726:127;17787:10;17782:3;17778:20;17775:1;17768:31;17818:4;17815:1;17808:15;17842:4;17839:1;17832:15;17858:127;17919:10;17914:3;17910:20;17907:1;17900:31;17950:4;17947:1;17940:15;17974:4;17971:1;17964:15;17990:131;-1:-1:-1;;;;;;18064:32:1;;18054:43;;18044:71;;18111:1;18108;18101:12
Swarm Source
ipfs:https://bc32cf2ec999a7382bbf899f9fef68fbfb7a437fa3711c806b53608469629c45
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.