ERC-721
Overview
Max Total Supply
4,444 SKREAMAZ
Holders
858
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 SKREAMAZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SKREAMAZ
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-11 */ /* _ _ ______ _______ ______ __ __ ______ _ _ | \ | | ____|__ __| ____| /\ | \/ | | ____| | | | | \| | |__ | | | |__ / \ | \ / | | |__ | | | | | . ` | __| | | | __| / /\ \ | |\/| | | __| | | | | | |\ | | | | | |____ / ____ \| | | |_| |____| |__| | |_| \_|_| |_| |______/_/ \_\_| |_(_)______|\____/ */ // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: BSD-3-Clause 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/token/ERC721/[email protected] 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/[email protected] 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/token/ERC721/extensions/[email protected] 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); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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/utils/introspection/[email protected] 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/Blimpie/ERC721B.sol pragma solidity ^0.8.0; /******************** * @author: Squeebo * ********************/ abstract contract ERC721B is Context, ERC165, IERC721, IERC721Metadata { using Address for address; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address address[] internal _owners; // 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"); uint count = 0; uint length = _owners.length; for( uint i = 0; i < length; ++i ){ if( owner == _owners[i] ){ ++count; } } delete length; return count; } /** * @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 {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721B.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 tokenId < _owners.length && _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 = ERC721B.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); _owners.push(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 = ERC721B.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); 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(ERC721B.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); _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(ERC721B.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 @openzeppelin/contracts/utils/[email protected] 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/access/[email protected] 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); } } pragma solidity ^0.8.7; library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } pragma solidity ^0.8.7; contract SKREAMAZ is Ownable, ERC721B { using ECDSA for bytes32; using Strings for uint256; uint256 public constant maxSupply = 4444; uint256 public constant giftSupply = 300; uint256 public constant ogPurchaseLimit = 8; uint256 public constant wlPurchaseLimit = 6; uint256 public constant purchaseLimit = 4; uint256 public giftedAmount; string public provenance; string private _tokenBaseURI; address private signerAddress = 0xA9D6F77337827c4Cb6bc91d6E8891173a62A8862; bool public ogSaleLive; bool public presaleLive; bool public saleLive; mapping(address => uint256) private ogPurchases; mapping(address => uint256) private wlPurchases; mapping(address => uint256) private purchases; constructor( string memory baseUri ) ERC721B("SKREAMAZ", "SKREAMAZ") { _tokenBaseURI = baseUri; } /* ---- Functions ---- */ function ogMint(bytes32 _hashedMessage, uint8 _v, bytes32 _r, bytes32 _s, uint256 tokenQuantity) external payable { require(ogSaleLive, "OG_SALE_CLOSED"); require(tokenQuantity <= ogPurchaseLimit, "EXCEED_SKREAMAZ_PER_MINT"); require(totalSupply() + tokenQuantity < maxSupply, "EXCEED_MAX_SALE_SUPPLY"); require(ogPurchases[msg.sender] + tokenQuantity <= ogPurchaseLimit, "EXCEED_ALLOC"); require(verifyMessage(_hashedMessage, _v, _r, _s) == signerAddress, "NO_DIRECT_MINT"); ogPurchases[msg.sender] += tokenQuantity; for(uint256 i = 0; i < tokenQuantity; i++) { uint mintIndex = totalSupply(); _mint( msg.sender, mintIndex ); } } function wlMint(bytes32 _hashedMessage, uint8 _v, bytes32 _r, bytes32 _s, uint256 tokenQuantity) external payable { require(presaleLive, "PRESALE_CLOSED"); require(tokenQuantity <= wlPurchaseLimit, "EXCEED_SKREAMAZ_PER_MINT"); require(totalSupply() + tokenQuantity < maxSupply, "EXCEED_MAX_SALE_SUPPLY"); require(wlPurchases[msg.sender] + tokenQuantity <= wlPurchaseLimit, "EXCEED_ALLOC"); require(verifyMessage(_hashedMessage, _v, _r, _s) == signerAddress, "NO_DIRECT_MINT"); wlPurchases[msg.sender] += tokenQuantity; for (uint256 i = 0; i < tokenQuantity; i++) { uint mintIndex = totalSupply(); _mint( msg.sender, mintIndex ); } } function mint(bytes32 _hashedMessage, uint8 _v, bytes32 _r, bytes32 _s, uint256 tokenQuantity) external payable { require(saleLive, "SALE_CLOSED"); require(tokenQuantity <= purchaseLimit, "EXCEED_SKREAMAZ_PER_MINT"); require(totalSupply() + tokenQuantity < maxSupply, "EXCEED_MAX_SALE_SUPPLY"); require(purchases[msg.sender] + tokenQuantity <= purchaseLimit, "EXCEED_ALLOC"); require(verifyMessage(_hashedMessage, _v, _r, _s) == signerAddress, "NO_DIRECT_MINT"); purchases[msg.sender] += tokenQuantity; for (uint256 i = 0; i < tokenQuantity; i++) { uint mintIndex = totalSupply(); _mint( msg.sender, mintIndex ); } } function withdraw() external onlyOwner { uint balance = address(this).balance; _withdraw(msg.sender, balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function gift(address _to, uint256 _reserveAmount) external onlyOwner { require(totalSupply() + _reserveAmount <= maxSupply, "MAX_MINT"); require(giftedAmount + _reserveAmount <= giftSupply, "NO_GIFTS"); giftedAmount += _reserveAmount; for (uint256 i = 0; i < _reserveAmount; i++) { uint mintIndex = totalSupply(); _safeMint( _to, mintIndex ); } } /* ---- Setters ---- */ function togglePresaleStatus() external onlyOwner { presaleLive = !presaleLive; } function toggleSaleStatus() external onlyOwner { saleLive = !saleLive; } function toggleOGSaleStatus() external onlyOwner { ogSaleLive = !ogSaleLive; } function setBaseURI(string calldata URI) external onlyOwner { _tokenBaseURI = URI; } function setProvenanceHash(string calldata hash) external onlyOwner { provenance = hash; } function setSignerAddress(address _signerAddress) external onlyOwner { signerAddress = _signerAddress; } /* ---- Misc ---- */ function totalSupply() public view virtual returns (uint256) { return _owners.length; } function verifyMessage(bytes32 _hashedMessage, uint8 _v, bytes32 _r, bytes32 _s) public pure returns (address) { bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes32 prefixedHashMessage = keccak256(abi.encodePacked(prefix, _hashedMessage)); address signer = ecrecover(prefixedHashMessage, _v, _r, _s); return signer; } function tokenURI(uint256 tokenId) external view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giftSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giftedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hashedMessage","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hashedMessage","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"ogMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ogPurchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogSaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"presaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purchaseLimit","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":[],"name":"saleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"name":"setSignerAddress","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":"toggleOGSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hashedMessage","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"verifyMessage","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hashedMessage","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"wlMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlPurchaseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600980546001600160a01b03191673a9d6f77337827c4cb6bc91d6e8891173a62a88621790553480156200003757600080fd5b5060405162002920380380620029208339810160408190526200005a9162000211565b6040518060400160405280600881526020016729a5a922a0a6a0ad60c11b8152506040518060400160405280600881526020016729a5a922a0a6a0ad60c11b815250620000b6620000b06200010160201b60201c565b62000105565b8151620000cb90600190602085019062000155565b508051620000e190600290602084019062000155565b50508151620000f99150600890602084019062000155565b50506200032a565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200016390620002ed565b90600052602060002090601f016020900481019282620001875760008555620001d2565b82601f10620001a257805160ff1916838001178555620001d2565b82800160010185558215620001d2579182015b82811115620001d2578251825591602001919060010190620001b5565b50620001e0929150620001e4565b5090565b5b80821115620001e05760008155600101620001e5565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200022557600080fd5b82516001600160401b03808211156200023d57600080fd5b818501915085601f8301126200025257600080fd5b815181811115620002675762000267620001fb565b604051601f8201601f19908116603f01168101908382118183101715620002925762000292620001fb565b816040528281528886848701011115620002ab57600080fd5b600093505b82841015620002cf5784840186015181850187015292850192620002b0565b82841115620002e15760008684830101525b98975050505050505050565b600181811c908216806200030257607f821691505b602082108114156200032457634e487b7160e01b600052602260045260246000fd5b50919050565b6125e6806200033a6000396000f3fe6080604052600436106102305760003560e01c80636f73323b1161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb0114610609578063e081b7811461061f578063e985e9c514610640578063f2fde38b14610689578063fb1c9b92146106a957600080fd5b8063b88d4fde14610576578063bf48e50614610596578063c87b56dd146105a9578063cbce4c97146105c9578063d3cf32df146105e957600080fd5b806383a9e049116100f257806383a9e049146104ed5780638da5cb5b1461050e57806395d89b411461052c5780639dc504c514610541578063a22cb4651461055657600080fd5b80636f73323b1461046d57806370a0823114610482578063715018a6146104a2578063782c6add146104b75780637bffb4ce146104d857600080fd5b806318886657116101bc5780633907fcf1116101805780633907fcf1146103e55780633ccfd60b146103f857806342842e0e1461040d57806355f804b31461042d5780636352211e1461044d57600080fd5b8063188866571461036f5780631b57190e146103845780632254b0151461039a57806323b872dd146103b057806330e1975c146103d057600080fd5b8063081812fc11610203578063081812fc146102c3578063095ea7b3146102fb5780630f7309e81461031b578063109695231461033057806318160ddd1461035057600080fd5b806301ffc9a714610235578063046dc1661461026a578063049c5c491461028c57806306fdde03146102a1575b600080fd5b34801561024157600080fd5b50610255610250366004611e4b565b6106bc565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061028a610285366004611e8b565b61070e565b005b34801561029857600080fd5b5061028a610763565b3480156102ad57600080fd5b506102b66107ae565b6040516102619190611efe565b3480156102cf57600080fd5b506102e36102de366004611f11565b610840565b6040516001600160a01b039091168152602001610261565b34801561030757600080fd5b5061028a610316366004611f2a565b6108c8565b34801561032757600080fd5b506102b66109de565b34801561033c57600080fd5b5061028a61034b366004611f54565b610a6c565b34801561035c57600080fd5b506003545b604051908152602001610261565b34801561037b57600080fd5b50610361600481565b34801561039057600080fd5b5061036160065481565b3480156103a657600080fd5b5061036161012c81565b3480156103bc57600080fd5b5061028a6103cb366004611fc6565b610aa2565b3480156103dc57600080fd5b5061028a610ad3565b61028a6103f3366004612013565b610b1e565b34801561040457600080fd5b5061028a610c99565b34801561041957600080fd5b5061028a610428366004611fc6565b610cd1565b34801561043957600080fd5b5061028a610448366004611f54565b610cec565b34801561045957600080fd5b506102e3610468366004611f11565b610d22565b34801561047957600080fd5b50610361600881565b34801561048e57600080fd5b5061036161049d366004611e8b565b610dae565b3480156104ae57600080fd5b5061028a610e80565b3480156104c357600080fd5b5060095461025590600160a01b900460ff1681565b3480156104e457600080fd5b5061028a610eb6565b3480156104f957600080fd5b5060095461025590600160a81b900460ff1681565b34801561051a57600080fd5b506000546001600160a01b03166102e3565b34801561053857600080fd5b506102b6610f01565b34801561054d57600080fd5b50610361600681565b34801561056257600080fd5b5061028a610571366004612059565b610f10565b34801561058257600080fd5b5061028a6105913660046120ab565b610fd5565b61028a6105a4366004612013565b61100d565b3480156105b557600080fd5b506102b66105c4366004611f11565b611180565b3480156105d557600080fd5b5061028a6105e4366004611f2a565b611221565b3480156105f557600080fd5b506102e3610604366004612187565b611332565b34801561061557600080fd5b5061036161115c81565b34801561062b57600080fd5b5060095461025590600160b01b900460ff1681565b34801561064c57600080fd5b5061025561065b3660046121c2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561069557600080fd5b5061028a6106a4366004611e8b565b611406565b61028a6106b7366004612013565b61149e565b60006001600160e01b031982166380ac58cd60e01b14806106ed57506001600160e01b03198216635b5e139f60e01b145b8061070857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146107415760405162461bcd60e51b8152600401610738906121f5565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461078d5760405162461bcd60e51b8152600401610738906121f5565b6009805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6060600180546107bd9061222a565b80601f01602080910402602001604051908101604052809291908181526020018280546107e99061222a565b80156108365780601f1061080b57610100808354040283529160200191610836565b820191906000526020600020905b81548152906001019060200180831161081957829003601f168201915b5050505050905090565b600061084b8261160e565b6108ac5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610738565b506000908152600460205260409020546001600160a01b031690565b60006108d382610d22565b9050806001600160a01b0316836001600160a01b031614156109415760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610738565b336001600160a01b038216148061095d575061095d813361065b565b6109cf5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610738565b6109d98383611658565b505050565b600780546109eb9061222a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a179061222a565b8015610a645780601f10610a3957610100808354040283529160200191610a64565b820191906000526020600020905b815481529060010190602001808311610a4757829003601f168201915b505050505081565b6000546001600160a01b03163314610a965760405162461bcd60e51b8152600401610738906121f5565b6109d960078383611d9c565b610aac33826116c6565b610ac85760405162461bcd60e51b815260040161073890612265565b6109d98383836117ac565b6000546001600160a01b03163314610afd5760405162461bcd60e51b8152600401610738906121f5565b6009805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600954600160a01b900460ff16610b685760405162461bcd60e51b815260206004820152600e60248201526d13d1d7d4d0531157d0d313d4d15160921b6044820152606401610738565b6008811115610b895760405162461bcd60e51b8152600401610738906122b6565b61115c81610b9660035490565b610ba09190612303565b10610bbd5760405162461bcd60e51b81526004016107389061231b565b336000908152600a6020526040902054600890610bdb908390612303565b1115610bf95760405162461bcd60e51b81526004016107389061234b565b6009546001600160a01b0316610c1186868686611332565b6001600160a01b031614610c375760405162461bcd60e51b815260040161073890612371565b336000908152600a602052604081208054839290610c56908490612303565b90915550600090505b81811015610c91576000610c7260035490565b9050610c7e3382611902565b5080610c8981612399565b915050610c5f565b505050505050565b6000546001600160a01b03163314610cc35760405162461bcd60e51b8152600401610738906121f5565b47610cce3382611a2a565b50565b6109d983838360405180602001604052806000815250610fd5565b6000546001600160a01b03163314610d165760405162461bcd60e51b8152600401610738906121f5565b6109d960088383611d9c565b60008060038381548110610d3857610d386123b4565b6000918252602090912001546001600160a01b03169050806107085760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610738565b60006001600160a01b038216610e195760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610738565b600354600090815b81811015610e775760038181548110610e3c57610e3c6123b4565b6000918252602090912001546001600160a01b0386811691161415610e6757610e6483612399565b92505b610e7081612399565b9050610e21565b50909392505050565b6000546001600160a01b03163314610eaa5760405162461bcd60e51b8152600401610738906121f5565b610eb46000611ac0565b565b6000546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610738906121f5565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6060600280546107bd9061222a565b6001600160a01b038216331415610f695760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610738565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fdf33836116c6565b610ffb5760405162461bcd60e51b815260040161073890612265565b61100784848484611b10565b50505050565b600954600160a81b900460ff166110575760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b6044820152606401610738565b60068111156110785760405162461bcd60e51b8152600401610738906122b6565b61115c8161108560035490565b61108f9190612303565b106110ac5760405162461bcd60e51b81526004016107389061231b565b336000908152600b60205260409020546006906110ca908390612303565b11156110e85760405162461bcd60e51b81526004016107389061234b565b6009546001600160a01b031661110086868686611332565b6001600160a01b0316146111265760405162461bcd60e51b815260040161073890612371565b336000908152600b602052604081208054839290611145908490612303565b90915550600090505b81811015610c9157600061116160035490565b905061116d3382611902565b508061117881612399565b91505061114e565b606061118b8261160e565b6111ef5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610738565b60086111fa83611b43565b60405160200161120b9291906123e6565b6040516020818303038152906040529050919050565b6000546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610738906121f5565b61115c8161125860035490565b6112629190612303565b111561129b5760405162461bcd60e51b815260206004820152600860248201526713505617d352539560c21b6044820152606401610738565b61012c816006546112ac9190612303565b11156112e55760405162461bcd60e51b81526020600482015260086024820152674e4f5f474946545360c01b6044820152606401610738565b80600660008282546112f79190612303565b90915550600090505b818110156109d957600061131360035490565b905061131f8482611c41565b508061132a81612399565b915050611300565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818760405160200161138292919061248d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156113ed573d6000803e3d6000fd5b5050604051601f1901519450505050505b949350505050565b6000546001600160a01b031633146114305760405162461bcd60e51b8152600401610738906121f5565b6001600160a01b0381166114955760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610738565b610cce81611ac0565b600954600160b01b900460ff166114e55760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b6044820152606401610738565b60048111156115065760405162461bcd60e51b8152600401610738906122b6565b61115c8161151360035490565b61151d9190612303565b1061153a5760405162461bcd60e51b81526004016107389061231b565b336000908152600c6020526040902054600490611558908390612303565b11156115765760405162461bcd60e51b81526004016107389061234b565b6009546001600160a01b031661158e86868686611332565b6001600160a01b0316146115b45760405162461bcd60e51b815260040161073890612371565b336000908152600c6020526040812080548392906115d3908490612303565b90915550600090505b81811015610c915760006115ef60035490565b90506115fb3382611902565b508061160681612399565b9150506115dc565b60035460009082108015610708575060006001600160a01b03166003838154811061163b5761163b6123b4565b6000918252602090912001546001600160a01b0316141592915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061168d82610d22565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116d18261160e565b6117325760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610738565b600061173d83610d22565b9050806001600160a01b0316846001600160a01b031614806117785750836001600160a01b031661176d84610840565b6001600160a01b0316145b806113fe57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166113fe565b826001600160a01b03166117bf82610d22565b6001600160a01b0316146118275760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610738565b6001600160a01b0382166118895760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610738565b611894600082611658565b81600382815481106118a8576118a86123b4565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6001600160a01b0382166119585760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610738565b6119618161160e565b156119ae5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610738565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a77576040519150601f19603f3d011682016040523d82523d6000602084013e611a7c565b606091505b50509050806109d95760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610738565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b1b8484846117ac565b611b2784848484611c5f565b6110075760405162461bcd60e51b8152600401610738906124af565b606081611b675750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b915780611b7b81612399565b9150611b8a9050600a83612517565b9150611b6b565b60008167ffffffffffffffff811115611bac57611bac612095565b6040519080825280601f01601f191660200182016040528015611bd6576020820181803683370190505b5090505b84156113fe57611beb60018361252b565b9150611bf8600a86612542565b611c03906030612303565b60f81b818381518110611c1857611c186123b4565b60200101906001600160f81b031916908160001a905350611c3a600a86612517565b9450611bda565b611c5b828260405180602001604052806000815250611d69565b5050565b60006001600160a01b0384163b15611d6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ca3903390899088908890600401612556565b602060405180830381600087803b158015611cbd57600080fd5b505af1925050508015611ced575060408051601f3d908101601f19168201909252611cea91810190612593565b60015b611d47573d808015611d1b576040519150601f19603f3d011682016040523d82523d6000602084013e611d20565b606091505b508051611d3f5760405162461bcd60e51b8152600401610738906124af565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113fe565b5060016113fe565b611d738383611902565b611d806000848484611c5f565b6109d95760405162461bcd60e51b8152600401610738906124af565b828054611da89061222a565b90600052602060002090601f016020900481019282611dca5760008555611e10565b82601f10611de35782800160ff19823516178555611e10565b82800160010185558215611e10579182015b82811115611e10578235825591602001919060010190611df5565b50611e1c929150611e20565b5090565b5b80821115611e1c5760008155600101611e21565b6001600160e01b031981168114610cce57600080fd5b600060208284031215611e5d57600080fd5b8135611e6881611e35565b9392505050565b80356001600160a01b0381168114611e8657600080fd5b919050565b600060208284031215611e9d57600080fd5b611e6882611e6f565b60005b83811015611ec1578181015183820152602001611ea9565b838111156110075750506000910152565b60008151808452611eea816020860160208601611ea6565b601f01601f19169290920160200192915050565b602081526000611e686020830184611ed2565b600060208284031215611f2357600080fd5b5035919050565b60008060408385031215611f3d57600080fd5b611f4683611e6f565b946020939093013593505050565b60008060208385031215611f6757600080fd5b823567ffffffffffffffff80821115611f7f57600080fd5b818501915085601f830112611f9357600080fd5b813581811115611fa257600080fd5b866020828501011115611fb457600080fd5b60209290920196919550909350505050565b600080600060608486031215611fdb57600080fd5b611fe484611e6f565b9250611ff260208501611e6f565b9150604084013590509250925092565b803560ff81168114611e8657600080fd5b600080600080600060a0868803121561202b57600080fd5b8535945061203b60208701612002565b94979496505050506040830135926060810135926080909101359150565b6000806040838503121561206c57600080fd5b61207583611e6f565b91506020830135801515811461208a57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156120c157600080fd5b6120ca85611e6f565b93506120d860208601611e6f565b925060408501359150606085013567ffffffffffffffff808211156120fc57600080fd5b818701915087601f83011261211057600080fd5b81358181111561212257612122612095565b604051601f8201601f19908116603f0116810190838211818310171561214a5761214a612095565b816040528281528a602084870101111561216357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806000806080858703121561219d57600080fd5b843593506121ad60208601612002565b93969395505050506040820135916060013590565b600080604083850312156121d557600080fd5b6121de83611e6f565b91506121ec60208401611e6f565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061223e57607f821691505b6020821081141561225f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526018908201527f4558434545445f534b5245414d415a5f5045525f4d494e540000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612316576123166122ed565b500190565b6020808252601690820152754558434545445f4d41585f53414c455f535550504c5960501b604082015260600190565b6020808252600c908201526b4558434545445f414c4c4f4360a01b604082015260600190565b6020808252600e908201526d1393d7d112549150d517d352539560921b604082015260600190565b60006000198214156123ad576123ad6122ed565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600081516123dc818560208601611ea6565b9290920192915050565b600080845481600182811c91508083168061240257607f831692505b602080841082141561242257634e487b7160e01b86526022600452602486fd5b818015612436576001811461244757612474565b60ff19861689528489019650612474565b60008b81526020902060005b8681101561246c5781548b820152908501908301612453565b505084890196505b50505050505061248481856123ca565b95945050505050565b6000835161249f818460208801611ea6565b9190910191825250602001919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261252657612526612501565b500490565b60008282101561253d5761253d6122ed565b500390565b60008261255157612551612501565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061258990830184611ed2565b9695505050505050565b6000602082840312156125a557600080fd5b8151611e6881611e3556fea2646970667358221220410a46616955d8250bff5a2f2012457c17e061e47064136c017aad567f5528dc64736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f736b7265616d617a2e6865726f6b756170702e636f6d2f6170692f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c80636f73323b1161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb0114610609578063e081b7811461061f578063e985e9c514610640578063f2fde38b14610689578063fb1c9b92146106a957600080fd5b8063b88d4fde14610576578063bf48e50614610596578063c87b56dd146105a9578063cbce4c97146105c9578063d3cf32df146105e957600080fd5b806383a9e049116100f257806383a9e049146104ed5780638da5cb5b1461050e57806395d89b411461052c5780639dc504c514610541578063a22cb4651461055657600080fd5b80636f73323b1461046d57806370a0823114610482578063715018a6146104a2578063782c6add146104b75780637bffb4ce146104d857600080fd5b806318886657116101bc5780633907fcf1116101805780633907fcf1146103e55780633ccfd60b146103f857806342842e0e1461040d57806355f804b31461042d5780636352211e1461044d57600080fd5b8063188866571461036f5780631b57190e146103845780632254b0151461039a57806323b872dd146103b057806330e1975c146103d057600080fd5b8063081812fc11610203578063081812fc146102c3578063095ea7b3146102fb5780630f7309e81461031b578063109695231461033057806318160ddd1461035057600080fd5b806301ffc9a714610235578063046dc1661461026a578063049c5c491461028c57806306fdde03146102a1575b600080fd5b34801561024157600080fd5b50610255610250366004611e4b565b6106bc565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061028a610285366004611e8b565b61070e565b005b34801561029857600080fd5b5061028a610763565b3480156102ad57600080fd5b506102b66107ae565b6040516102619190611efe565b3480156102cf57600080fd5b506102e36102de366004611f11565b610840565b6040516001600160a01b039091168152602001610261565b34801561030757600080fd5b5061028a610316366004611f2a565b6108c8565b34801561032757600080fd5b506102b66109de565b34801561033c57600080fd5b5061028a61034b366004611f54565b610a6c565b34801561035c57600080fd5b506003545b604051908152602001610261565b34801561037b57600080fd5b50610361600481565b34801561039057600080fd5b5061036160065481565b3480156103a657600080fd5b5061036161012c81565b3480156103bc57600080fd5b5061028a6103cb366004611fc6565b610aa2565b3480156103dc57600080fd5b5061028a610ad3565b61028a6103f3366004612013565b610b1e565b34801561040457600080fd5b5061028a610c99565b34801561041957600080fd5b5061028a610428366004611fc6565b610cd1565b34801561043957600080fd5b5061028a610448366004611f54565b610cec565b34801561045957600080fd5b506102e3610468366004611f11565b610d22565b34801561047957600080fd5b50610361600881565b34801561048e57600080fd5b5061036161049d366004611e8b565b610dae565b3480156104ae57600080fd5b5061028a610e80565b3480156104c357600080fd5b5060095461025590600160a01b900460ff1681565b3480156104e457600080fd5b5061028a610eb6565b3480156104f957600080fd5b5060095461025590600160a81b900460ff1681565b34801561051a57600080fd5b506000546001600160a01b03166102e3565b34801561053857600080fd5b506102b6610f01565b34801561054d57600080fd5b50610361600681565b34801561056257600080fd5b5061028a610571366004612059565b610f10565b34801561058257600080fd5b5061028a6105913660046120ab565b610fd5565b61028a6105a4366004612013565b61100d565b3480156105b557600080fd5b506102b66105c4366004611f11565b611180565b3480156105d557600080fd5b5061028a6105e4366004611f2a565b611221565b3480156105f557600080fd5b506102e3610604366004612187565b611332565b34801561061557600080fd5b5061036161115c81565b34801561062b57600080fd5b5060095461025590600160b01b900460ff1681565b34801561064c57600080fd5b5061025561065b3660046121c2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561069557600080fd5b5061028a6106a4366004611e8b565b611406565b61028a6106b7366004612013565b61149e565b60006001600160e01b031982166380ac58cd60e01b14806106ed57506001600160e01b03198216635b5e139f60e01b145b8061070857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146107415760405162461bcd60e51b8152600401610738906121f5565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461078d5760405162461bcd60e51b8152600401610738906121f5565b6009805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6060600180546107bd9061222a565b80601f01602080910402602001604051908101604052809291908181526020018280546107e99061222a565b80156108365780601f1061080b57610100808354040283529160200191610836565b820191906000526020600020905b81548152906001019060200180831161081957829003601f168201915b5050505050905090565b600061084b8261160e565b6108ac5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610738565b506000908152600460205260409020546001600160a01b031690565b60006108d382610d22565b9050806001600160a01b0316836001600160a01b031614156109415760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610738565b336001600160a01b038216148061095d575061095d813361065b565b6109cf5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610738565b6109d98383611658565b505050565b600780546109eb9061222a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a179061222a565b8015610a645780601f10610a3957610100808354040283529160200191610a64565b820191906000526020600020905b815481529060010190602001808311610a4757829003601f168201915b505050505081565b6000546001600160a01b03163314610a965760405162461bcd60e51b8152600401610738906121f5565b6109d960078383611d9c565b610aac33826116c6565b610ac85760405162461bcd60e51b815260040161073890612265565b6109d98383836117ac565b6000546001600160a01b03163314610afd5760405162461bcd60e51b8152600401610738906121f5565b6009805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600954600160a01b900460ff16610b685760405162461bcd60e51b815260206004820152600e60248201526d13d1d7d4d0531157d0d313d4d15160921b6044820152606401610738565b6008811115610b895760405162461bcd60e51b8152600401610738906122b6565b61115c81610b9660035490565b610ba09190612303565b10610bbd5760405162461bcd60e51b81526004016107389061231b565b336000908152600a6020526040902054600890610bdb908390612303565b1115610bf95760405162461bcd60e51b81526004016107389061234b565b6009546001600160a01b0316610c1186868686611332565b6001600160a01b031614610c375760405162461bcd60e51b815260040161073890612371565b336000908152600a602052604081208054839290610c56908490612303565b90915550600090505b81811015610c91576000610c7260035490565b9050610c7e3382611902565b5080610c8981612399565b915050610c5f565b505050505050565b6000546001600160a01b03163314610cc35760405162461bcd60e51b8152600401610738906121f5565b47610cce3382611a2a565b50565b6109d983838360405180602001604052806000815250610fd5565b6000546001600160a01b03163314610d165760405162461bcd60e51b8152600401610738906121f5565b6109d960088383611d9c565b60008060038381548110610d3857610d386123b4565b6000918252602090912001546001600160a01b03169050806107085760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610738565b60006001600160a01b038216610e195760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610738565b600354600090815b81811015610e775760038181548110610e3c57610e3c6123b4565b6000918252602090912001546001600160a01b0386811691161415610e6757610e6483612399565b92505b610e7081612399565b9050610e21565b50909392505050565b6000546001600160a01b03163314610eaa5760405162461bcd60e51b8152600401610738906121f5565b610eb46000611ac0565b565b6000546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610738906121f5565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6060600280546107bd9061222a565b6001600160a01b038216331415610f695760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610738565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fdf33836116c6565b610ffb5760405162461bcd60e51b815260040161073890612265565b61100784848484611b10565b50505050565b600954600160a81b900460ff166110575760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b6044820152606401610738565b60068111156110785760405162461bcd60e51b8152600401610738906122b6565b61115c8161108560035490565b61108f9190612303565b106110ac5760405162461bcd60e51b81526004016107389061231b565b336000908152600b60205260409020546006906110ca908390612303565b11156110e85760405162461bcd60e51b81526004016107389061234b565b6009546001600160a01b031661110086868686611332565b6001600160a01b0316146111265760405162461bcd60e51b815260040161073890612371565b336000908152600b602052604081208054839290611145908490612303565b90915550600090505b81811015610c9157600061116160035490565b905061116d3382611902565b508061117881612399565b91505061114e565b606061118b8261160e565b6111ef5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610738565b60086111fa83611b43565b60405160200161120b9291906123e6565b6040516020818303038152906040529050919050565b6000546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610738906121f5565b61115c8161125860035490565b6112629190612303565b111561129b5760405162461bcd60e51b815260206004820152600860248201526713505617d352539560c21b6044820152606401610738565b61012c816006546112ac9190612303565b11156112e55760405162461bcd60e51b81526020600482015260086024820152674e4f5f474946545360c01b6044820152606401610738565b80600660008282546112f79190612303565b90915550600090505b818110156109d957600061131360035490565b905061131f8482611c41565b508061132a81612399565b915050611300565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818760405160200161138292919061248d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156113ed573d6000803e3d6000fd5b5050604051601f1901519450505050505b949350505050565b6000546001600160a01b031633146114305760405162461bcd60e51b8152600401610738906121f5565b6001600160a01b0381166114955760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610738565b610cce81611ac0565b600954600160b01b900460ff166114e55760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b6044820152606401610738565b60048111156115065760405162461bcd60e51b8152600401610738906122b6565b61115c8161151360035490565b61151d9190612303565b1061153a5760405162461bcd60e51b81526004016107389061231b565b336000908152600c6020526040902054600490611558908390612303565b11156115765760405162461bcd60e51b81526004016107389061234b565b6009546001600160a01b031661158e86868686611332565b6001600160a01b0316146115b45760405162461bcd60e51b815260040161073890612371565b336000908152600c6020526040812080548392906115d3908490612303565b90915550600090505b81811015610c915760006115ef60035490565b90506115fb3382611902565b508061160681612399565b9150506115dc565b60035460009082108015610708575060006001600160a01b03166003838154811061163b5761163b6123b4565b6000918252602090912001546001600160a01b0316141592915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061168d82610d22565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116d18261160e565b6117325760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610738565b600061173d83610d22565b9050806001600160a01b0316846001600160a01b031614806117785750836001600160a01b031661176d84610840565b6001600160a01b0316145b806113fe57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166113fe565b826001600160a01b03166117bf82610d22565b6001600160a01b0316146118275760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610738565b6001600160a01b0382166118895760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610738565b611894600082611658565b81600382815481106118a8576118a86123b4565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6001600160a01b0382166119585760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610738565b6119618161160e565b156119ae5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610738565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a77576040519150601f19603f3d011682016040523d82523d6000602084013e611a7c565b606091505b50509050806109d95760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610738565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b1b8484846117ac565b611b2784848484611c5f565b6110075760405162461bcd60e51b8152600401610738906124af565b606081611b675750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b915780611b7b81612399565b9150611b8a9050600a83612517565b9150611b6b565b60008167ffffffffffffffff811115611bac57611bac612095565b6040519080825280601f01601f191660200182016040528015611bd6576020820181803683370190505b5090505b84156113fe57611beb60018361252b565b9150611bf8600a86612542565b611c03906030612303565b60f81b818381518110611c1857611c186123b4565b60200101906001600160f81b031916908160001a905350611c3a600a86612517565b9450611bda565b611c5b828260405180602001604052806000815250611d69565b5050565b60006001600160a01b0384163b15611d6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ca3903390899088908890600401612556565b602060405180830381600087803b158015611cbd57600080fd5b505af1925050508015611ced575060408051601f3d908101601f19168201909252611cea91810190612593565b60015b611d47573d808015611d1b576040519150601f19603f3d011682016040523d82523d6000602084013e611d20565b606091505b508051611d3f5760405162461bcd60e51b8152600401610738906124af565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113fe565b5060016113fe565b611d738383611902565b611d806000848484611c5f565b6109d95760405162461bcd60e51b8152600401610738906124af565b828054611da89061222a565b90600052602060002090601f016020900481019282611dca5760008555611e10565b82601f10611de35782800160ff19823516178555611e10565b82800160010185558215611e10579182015b82811115611e10578235825591602001919060010190611df5565b50611e1c929150611e20565b5090565b5b80821115611e1c5760008155600101611e21565b6001600160e01b031981168114610cce57600080fd5b600060208284031215611e5d57600080fd5b8135611e6881611e35565b9392505050565b80356001600160a01b0381168114611e8657600080fd5b919050565b600060208284031215611e9d57600080fd5b611e6882611e6f565b60005b83811015611ec1578181015183820152602001611ea9565b838111156110075750506000910152565b60008151808452611eea816020860160208601611ea6565b601f01601f19169290920160200192915050565b602081526000611e686020830184611ed2565b600060208284031215611f2357600080fd5b5035919050565b60008060408385031215611f3d57600080fd5b611f4683611e6f565b946020939093013593505050565b60008060208385031215611f6757600080fd5b823567ffffffffffffffff80821115611f7f57600080fd5b818501915085601f830112611f9357600080fd5b813581811115611fa257600080fd5b866020828501011115611fb457600080fd5b60209290920196919550909350505050565b600080600060608486031215611fdb57600080fd5b611fe484611e6f565b9250611ff260208501611e6f565b9150604084013590509250925092565b803560ff81168114611e8657600080fd5b600080600080600060a0868803121561202b57600080fd5b8535945061203b60208701612002565b94979496505050506040830135926060810135926080909101359150565b6000806040838503121561206c57600080fd5b61207583611e6f565b91506020830135801515811461208a57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156120c157600080fd5b6120ca85611e6f565b93506120d860208601611e6f565b925060408501359150606085013567ffffffffffffffff808211156120fc57600080fd5b818701915087601f83011261211057600080fd5b81358181111561212257612122612095565b604051601f8201601f19908116603f0116810190838211818310171561214a5761214a612095565b816040528281528a602084870101111561216357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806000806080858703121561219d57600080fd5b843593506121ad60208601612002565b93969395505050506040820135916060013590565b600080604083850312156121d557600080fd5b6121de83611e6f565b91506121ec60208401611e6f565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061223e57607f821691505b6020821081141561225f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526018908201527f4558434545445f534b5245414d415a5f5045525f4d494e540000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612316576123166122ed565b500190565b6020808252601690820152754558434545445f4d41585f53414c455f535550504c5960501b604082015260600190565b6020808252600c908201526b4558434545445f414c4c4f4360a01b604082015260600190565b6020808252600e908201526d1393d7d112549150d517d352539560921b604082015260600190565b60006000198214156123ad576123ad6122ed565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600081516123dc818560208601611ea6565b9290920192915050565b600080845481600182811c91508083168061240257607f831692505b602080841082141561242257634e487b7160e01b86526022600452602486fd5b818015612436576001811461244757612474565b60ff19861689528489019650612474565b60008b81526020902060005b8681101561246c5781548b820152908501908301612453565b505084890196505b50505050505061248481856123ca565b95945050505050565b6000835161249f818460208801611ea6565b9190910191825250602001919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261252657612526612501565b500490565b60008282101561253d5761253d6122ed565b500390565b60008261255157612551612501565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061258990830184611ed2565b9695505050505050565b6000602082840312156125a557600080fd5b8151611e6881611e3556fea2646970667358221220410a46616955d8250bff5a2f2012457c17e061e47064136c017aad567f5528dc64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f736b7265616d617a2e6865726f6b756170702e636f6d2f6170692f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseUri (string): https://skreamaz.herokuapp.com/api/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [2] : 68747470733a2f2f736b7265616d617a2e6865726f6b756170702e636f6d2f61
Arg [3] : 70692f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44688:5430:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19631:305;;;;;;;;;;-1:-1:-1;19631:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;19631:305:0;;;;;;;;49209:118;;;;;;;;;;-1:-1:-1;49209:118:0;;;;;:::i;:::-;;:::i;:::-;;48792:86;;;;;;;;;;;;;:::i;20786:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21599:221::-;;;;;;;;;;-1:-1:-1;21599:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2083:32:1;;;2065:51;;2053:2;2038:18;21599:221:0;1919:203:1;21121:412:0;;;;;;;;;;-1:-1:-1;21121:412:0;;;;;:::i;:::-;;:::i;45081:24::-;;;;;;;;;;;;;:::i;49096:104::-;;;;;;;;;;-1:-1:-1;49096:104:0;;;;;:::i;:::-;;:::i;49364:101::-;;;;;;;;;;-1:-1:-1;49443:7:0;:14;49364:101;;;3129:25:1;;;3117:2;3102:18;49364:101:0;2983:177:1;44995:41:0;;;;;;;;;;;;45035:1;44995:41;;45045:27;;;;;;;;;;;;;;;;44846:40;;;;;;;;;;;;44883:3;44846:40;;22491:339;;;;;;;;;;-1:-1:-1;22491:339:0;;;;;:::i;:::-;;:::i;48886:92::-;;;;;;;;;;;;;:::i;45655:736::-;;;;;;:::i;:::-;;:::i;47879:135::-;;;;;;;;;;;;;:::i;22901:185::-;;;;;;;;;;-1:-1:-1;22901:185:0;;;;;:::i;:::-;;:::i;48986:98::-;;;;;;;;;;-1:-1:-1;48986:98:0;;;;;:::i;:::-;;:::i;20480:239::-;;;;;;;;;;-1:-1:-1;20480:239:0;;;;;:::i;:::-;;:::i;44895:43::-;;;;;;;;;;;;44937:1;44895:43;;20000:418;;;;;;;;;;-1:-1:-1;20000:418:0;;;;;:::i;:::-;;:::i;34861:94::-;;;;;;;;;;;;;:::i;45234:22::-;;;;;;;;;;-1:-1:-1;45234:22:0;;;;-1:-1:-1;;;45234:22:0;;;;;;48688:95;;;;;;;;;;;;;:::i;45263:23::-;;;;;;;;;;-1:-1:-1;45263:23:0;;;;-1:-1:-1;;;45263:23:0;;;;;;34210:87;;;;;;;;;;-1:-1:-1;34256:7:0;34283:6;-1:-1:-1;;;;;34283:6:0;34210:87;;20955:104;;;;;;;;;;;;;:::i;44945:43::-;;;;;;;;;;;;44987:1;44945:43;;21892:295;;;;;;;;;;-1:-1:-1;21892:295:0;;;;;:::i;:::-;;:::i;23157:328::-;;;;;;;;;;-1:-1:-1;23157:328:0;;;;;:::i;:::-;;:::i;46399:739::-;;;;;;:::i;:::-;;:::i;49853:262::-;;;;;;;;;;-1:-1:-1;49853:262:0;;;;;:::i;:::-;;:::i;48210:435::-;;;;;;;;;;-1:-1:-1;48210:435:0;;;;;:::i;:::-;;:::i;49473:372::-;;;;;;;;;;-1:-1:-1;49473:372:0;;;;;:::i;:::-;;:::i;44799:40::-;;;;;;;;;;;;44835:4;44799:40;;45293:20;;;;;;;;;;-1:-1:-1;45293:20:0;;;;-1:-1:-1;;;45293:20:0;;;;;;22258:164;;;;;;;;;;-1:-1:-1;22258:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;22379:25:0;;;22355:4;22379:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22258:164;35110:192;;;;;;;;;;-1:-1:-1;35110:192:0;;;;;:::i;:::-;;:::i;47147:723::-;;;;;;:::i;:::-;;:::i;19631:305::-;19733:4;-1:-1:-1;;;;;;19770:40:0;;-1:-1:-1;;;19770:40:0;;:105;;-1:-1:-1;;;;;;;19827:48:0;;-1:-1:-1;;;19827:48:0;19770:105;:158;;;-1:-1:-1;;;;;;;;;;18597:40:0;;;19892:36;19750:178;19631:305;-1:-1:-1;;19631:305:0:o;49209:118::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;;;;;;;;;49289:13:::1;:30:::0;;-1:-1:-1;;;;;;49289:30:0::1;-1:-1:-1::0;;;;;49289:30:0;;;::::1;::::0;;;::::1;::::0;;49209:118::o;48792:86::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;48862:8:::1;::::0;;-1:-1:-1;;;;48850:20:0;::::1;-1:-1:-1::0;;;48862:8:0;;;::::1;;;48861:9;48850:20:::0;;::::1;;::::0;;48792:86::o;20786:100::-;20840:13;20873:5;20866:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20786:100;:::o;21599:221::-;21675:7;21703:16;21711:7;21703;:16::i;:::-;21695:73;;;;-1:-1:-1;;;21695:73:0;;7352:2:1;21695:73:0;;;7334:21:1;7391:2;7371:18;;;7364:30;7430:34;7410:18;;;7403:62;-1:-1:-1;;;7481:18:1;;;7474:42;7533:19;;21695:73:0;7150:408:1;21695:73:0;-1:-1:-1;21788:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;21788:24:0;;21599:221::o;21121:412::-;21202:13;21218:24;21234:7;21218:15;:24::i;:::-;21202:40;;21267:5;-1:-1:-1;;;;;21261:11:0;:2;-1:-1:-1;;;;;21261:11:0;;;21253:57;;;;-1:-1:-1;;;21253:57:0;;7765:2:1;21253:57:0;;;7747:21:1;7804:2;7784:18;;;7777:30;7843:34;7823:18;;;7816:62;-1:-1:-1;;;7894:18:1;;;7887:31;7935:19;;21253:57:0;7563:397:1;21253:57:0;17550:10;-1:-1:-1;;;;;21345:21:0;;;;:62;;-1:-1:-1;21370:37:0;21387:5;17550:10;22258:164;:::i;21370:37::-;21323:168;;;;-1:-1:-1;;;21323:168:0;;8167:2:1;21323:168:0;;;8149:21:1;8206:2;8186:18;;;8179:30;8245:34;8225:18;;;8218:62;8316:26;8296:18;;;8289:54;8360:19;;21323:168:0;7965:420:1;21323:168:0;21504:21;21513:2;21517:7;21504:8;:21::i;:::-;21191:342;21121:412;;:::o;45081:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49096:104::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;49175:17:::1;:10;49188:4:::0;;49175:17:::1;:::i;22491:339::-:0;22686:41;17550:10;22719:7;22686:18;:41::i;:::-;22678:103;;;;-1:-1:-1;;;22678:103:0;;;;;;;:::i;:::-;22794:28;22804:4;22810:2;22814:7;22794:9;:28::i;48886:92::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;48960:10:::1;::::0;;-1:-1:-1;;;;48946:24:0;::::1;-1:-1:-1::0;;;48960:10:0;;;::::1;;;48959:11;48946:24:::0;;::::1;;::::0;;48886:92::o;45655:736::-;45788:10;;-1:-1:-1;;;45788:10:0;;;;45780:37;;;;-1:-1:-1;;;45780:37:0;;9010:2:1;45780:37:0;;;8992:21:1;9049:2;9029:18;;;9022:30;-1:-1:-1;;;9068:18:1;;;9061:44;9122:18;;45780:37:0;8808:338:1;45780:37:0;44937:1;45836:13;:32;;45828:69;;;;-1:-1:-1;;;45828:69:0;;;;;;;:::i;:::-;44835:4;45932:13;45916;49443:7;:14;;49364:101;45916:13;:29;;;;:::i;:::-;:41;45908:76;;;;-1:-1:-1;;;45908:76:0;;;;;;;:::i;:::-;46015:10;46003:23;;;;:11;:23;;;;;;44937:1;;46003:39;;46029:13;;46003:39;:::i;:::-;:58;;45995:83;;;;-1:-1:-1;;;45995:83:0;;;;;;;:::i;:::-;46142:13;;-1:-1:-1;;;;;46142:13:0;46097:41;46111:14;46127:2;46131;46135;46097:13;:41::i;:::-;-1:-1:-1;;;;;46097:58:0;;46089:85;;;;-1:-1:-1;;;46089:85:0;;;;;;;:::i;:::-;46199:10;46187:23;;;;:11;:23;;;;;:40;;46214:13;;46187:23;:40;;46214:13;;46187:40;:::i;:::-;;;;-1:-1:-1;46244:9:0;;-1:-1:-1;46240:144:0;46263:13;46259:1;:17;46240:144;;;46298:14;46315:13;49443:7;:14;;49364:101;46315:13;46298:30;;46342;46349:10;46361:9;46342:5;:30::i;:::-;-1:-1:-1;46278:3:0;;;;:::i;:::-;;;;46240:144;;;;45655:736;;;;;:::o;47879:135::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;47944:21:::1;47976:30;47986:10;47944:21:::0;47976:9:::1;:30::i;:::-;47918:96;47879:135::o:0;22901:185::-;23039:39;23056:4;23062:2;23066:7;23039:39;;;;;;;;;;;;:16;:39::i;48986:98::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;49057:19:::1;:13;49073:3:::0;;49057:19:::1;:::i;20480:239::-:0;20552:7;20572:13;20588:7;20596;20588:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20588:16:0;;-1:-1:-1;20623:19:0;20615:73;;;;-1:-1:-1;;;20615:73:0;;11278:2:1;20615:73:0;;;11260:21:1;11317:2;11297:18;;;11290:30;11356:34;11336:18;;;11329:62;-1:-1:-1;;;11407:18:1;;;11400:39;11456:19;;20615:73:0;11076:405:1;20000:418:0;20072:7;-1:-1:-1;;;;;20100:19:0;;20092:74;;;;-1:-1:-1;;;20092:74:0;;11688:2:1;20092:74:0;;;11670:21:1;11727:2;11707:18;;;11700:30;11766:34;11746:18;;;11739:62;-1:-1:-1;;;11817:18:1;;;11810:40;11867:19;;20092:74:0;11486:406:1;20092:74:0;20218:7;:14;20179:10;;;20243:119;20264:6;20260:1;:10;20243:119;;;20303:7;20311:1;20303:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20294:19:0;;;20303:10;;20294:19;20290:61;;;20330:7;;;:::i;:::-;;;20290:61;20272:3;;;:::i;:::-;;;20243:119;;;-1:-1:-1;20405:5:0;;20000:418;-1:-1:-1;;;20000:418:0:o;34861:94::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;34926:21:::1;34944:1;34926:9;:21::i;:::-;34861:94::o:0;48688:95::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;48764:11:::1;::::0;;-1:-1:-1;;;;48749:26:0;::::1;-1:-1:-1::0;;;48764:11:0;;;::::1;;;48763:12;48749:26:::0;;::::1;;::::0;;48688:95::o;20955:104::-;21011:13;21044:7;21037:14;;;;;:::i;21892:295::-;-1:-1:-1;;;;;21995:24:0;;17550:10;21995:24;;21987:62;;;;-1:-1:-1;;;21987:62:0;;12099:2:1;21987:62:0;;;12081:21:1;12138:2;12118:18;;;12111:30;12177:27;12157:18;;;12150:55;12222:18;;21987:62:0;11897:349:1;21987:62:0;17550:10;22062:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22062:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22062:53:0;;;;;;;;;;22131:48;;540:41:1;;;22062:42:0;;17550:10;22131:48;;513:18:1;22131:48:0;;;;;;;21892:295;;:::o;23157:328::-;23332:41;17550:10;23365:7;23332:18;:41::i;:::-;23324:103;;;;-1:-1:-1;;;23324:103:0;;;;;;;:::i;:::-;23438:39;23452:4;23458:2;23462:7;23471:5;23438:13;:39::i;:::-;23157:328;;;;:::o;46399:739::-;46532:11;;-1:-1:-1;;;46532:11:0;;;;46524:38;;;;-1:-1:-1;;;46524:38:0;;12453:2:1;46524:38:0;;;12435:21:1;12492:2;12472:18;;;12465:30;-1:-1:-1;;;12511:18:1;;;12504:44;12565:18;;46524:38:0;12251:338:1;46524:38:0;44987:1;46581:13;:32;;46573:69;;;;-1:-1:-1;;;46573:69:0;;;;;;;:::i;:::-;44835:4;46677:13;46661;49443:7;:14;;49364:101;46661:13;:29;;;;:::i;:::-;:41;46653:76;;;;-1:-1:-1;;;46653:76:0;;;;;;;:::i;:::-;46760:10;46748:23;;;;:11;:23;;;;;;44987:1;;46748:39;;46774:13;;46748:39;:::i;:::-;:58;;46740:83;;;;-1:-1:-1;;;46740:83:0;;;;;;;:::i;:::-;46887:13;;-1:-1:-1;;;;;46887:13:0;46842:41;46856:14;46872:2;46876;46880;46842:13;:41::i;:::-;-1:-1:-1;;;;;46842:58:0;;46834:85;;;;-1:-1:-1;;;46834:85:0;;;;;;;:::i;:::-;46944:10;46932:23;;;;:11;:23;;;;;:40;;46959:13;;46932:23;:40;;46959:13;;46932:40;:::i;:::-;;;;-1:-1:-1;46990:9:0;;-1:-1:-1;46985:146:0;47009:13;47005:1;:17;46985:146;;;47044:14;47061:13;49443:7;:14;;49364:101;47061:13;47044:30;;47089;47096:10;47108:9;47089:5;:30::i;:::-;-1:-1:-1;47024:3:0;;;;:::i;:::-;;;;46985:146;;49853:262;49928:13;49962:16;49970:7;49962;:16::i;:::-;49954:76;;;;-1:-1:-1;;;49954:76:0;;12796:2:1;49954:76:0;;;12778:21:1;12835:2;12815:18;;;12808:30;12874:34;12854:18;;;12847:62;-1:-1:-1;;;12925:18:1;;;12918:45;12980:19;;49954:76:0;12594:411:1;49954:76:0;50072:13;50087:18;:7;:16;:18::i;:::-;50055:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50041:66;;49853:262;;;:::o;48210:435::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;44835:4:::1;48315:14;48299:13;49443:7:::0;:14;;49364:101;48299:13:::1;:30;;;;:::i;:::-;:43;;48291:64;;;::::0;-1:-1:-1;;;48291:64:0;;14707:2:1;48291:64:0::1;::::0;::::1;14689:21:1::0;14746:1;14726:18;;;14719:29;-1:-1:-1;;;14764:18:1;;;14757:38;14812:18;;48291:64:0::1;14505:331:1::0;48291:64:0::1;44883:3;48389:14;48374:12;;:29;;;;:::i;:::-;:43;;48366:64;;;::::0;-1:-1:-1;;;48366:64:0;;15043:2:1;48366:64:0::1;::::0;::::1;15025:21:1::0;15082:1;15062:18;;;15055:29;-1:-1:-1;;;15100:18:1;;;15093:38;15148:18;;48366:64:0::1;14841:331:1::0;48366:64:0::1;48467:14;48451:12;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;48499:9:0::1;::::0;-1:-1:-1;48494:144:0::1;48518:14;48514:1;:18;48494:144;;;48554:14;48571:13;49443:7:::0;:14;;49364:101;48571:13:::1;48554:30;;48599:27;48610:3;48615:9;48599;:27::i;:::-;-1:-1:-1::0;48534:3:0;::::1;::::0;::::1;:::i;:::-;;;;48494:144;;49473:372:::0;49575:7;49595:19;:56;;;;;;;;;;;;;;;;;;;49662:27;49719:6;49727:14;49702:40;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49702:40:0;;;;;;;;;49692:51;;49702:40;49692:51;;;;49754:14;49771:42;;;;;;;;;15779:25:1;;;15852:4;15840:17;;15820:18;;;15813:45;;;;15874:18;;;15867:34;;;15917:18;;;15910:34;;;49692:51:0;;-1:-1:-1;49754:14:0;49771:42;;15751:19:1;;49771:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49771:42:0;;-1:-1:-1;;49771:42:0;;;-1:-1:-1;;;;;49473:372:0;;;;;;;:::o;35110:192::-;34256:7;34283:6;-1:-1:-1;;;;;34283:6:0;17550:10;34430:23;34422:68;;;;-1:-1:-1;;;34422:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35199:22:0;::::1;35191:73;;;::::0;-1:-1:-1;;;35191:73:0;;16157:2:1;35191:73:0::1;::::0;::::1;16139:21:1::0;16196:2;16176:18;;;16169:30;16235:34;16215:18;;;16208:62;-1:-1:-1;;;16286:18:1;;;16279:36;16332:19;;35191:73:0::1;15955:402:1::0;35191:73:0::1;35275:19;35285:8;35275:9;:19::i;47147:723::-:0;47278:8;;-1:-1:-1;;;47278:8:0;;;;47270:32;;;;-1:-1:-1;;;47270:32:0;;16564:2:1;47270:32:0;;;16546:21:1;16603:2;16583:18;;;16576:30;-1:-1:-1;;;16622:18:1;;;16615:41;16673:18;;47270:32:0;16362:335:1;47270:32:0;45035:1;47321:13;:30;;47313:67;;;;-1:-1:-1;;;47313:67:0;;;;;;;:::i;:::-;44835:4;47415:13;47399;49443:7;:14;;49364:101;47399:13;:29;;;;:::i;:::-;:41;47391:76;;;;-1:-1:-1;;;47391:76:0;;;;;;;:::i;:::-;47496:10;47486:21;;;;:9;:21;;;;;;45035:1;;47486:37;;47510:13;;47486:37;:::i;:::-;:54;;47478:79;;;;-1:-1:-1;;;47478:79:0;;;;;;;:::i;:::-;47621:13;;-1:-1:-1;;;;;47621:13:0;47576:41;47590:14;47606:2;47610;47614;47576:13;:41::i;:::-;-1:-1:-1;;;;;47576:58:0;;47568:85;;;;-1:-1:-1;;;47568:85:0;;;;;;;:::i;:::-;47676:10;47666:21;;;;:9;:21;;;;;:38;;47691:13;;47666:21;:38;;47691:13;;47666:38;:::i;:::-;;;;-1:-1:-1;47722:9:0;;-1:-1:-1;47717:146:0;47741:13;47737:1;:17;47717:146;;;47776:14;47793:13;49443:7;:14;;49364:101;47793:13;47776:30;;47821;47828:10;47840:9;47821:5;:30::i;:::-;-1:-1:-1;47756:3:0;;;;:::i;:::-;;;;47717:146;;24995:155;25094:7;:14;25060:4;;25084:24;;:58;;;;;25140:1;-1:-1:-1;;;;;25112:30:0;:7;25120;25112:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;25112:16:0;:30;;25077:65;24995:155;-1:-1:-1;;24995:155:0:o;28884:175::-;28959:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;28959:29:0;-1:-1:-1;;;;;28959:29:0;;;;;;;;:24;;29013;28959;29013:15;:24::i;:::-;-1:-1:-1;;;;;29004:47:0;;;;;;;;;;;28884:175;;:::o;25317:349::-;25410:4;25435:16;25443:7;25435;:16::i;:::-;25427:73;;;;-1:-1:-1;;;25427:73:0;;16904:2:1;25427:73:0;;;16886:21:1;16943:2;16923:18;;;16916:30;16982:34;16962:18;;;16955:62;-1:-1:-1;;;17033:18:1;;;17026:42;17085:19;;25427:73:0;16702:408:1;25427:73:0;25511:13;25527:24;25543:7;25527:15;:24::i;:::-;25511:40;;25581:5;-1:-1:-1;;;;;25570:16:0;:7;-1:-1:-1;;;;;25570:16:0;;:51;;;;25614:7;-1:-1:-1;;;;;25590:31:0;:20;25602:7;25590:11;:20::i;:::-;-1:-1:-1;;;;;25590:31:0;;25570:51;:87;;;-1:-1:-1;;;;;;22379:25:0;;;22355:4;22379:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;25625:32;22258:164;28249:517;28409:4;-1:-1:-1;;;;;28381:32:0;:24;28397:7;28381:15;:24::i;:::-;-1:-1:-1;;;;;28381:32:0;;28373:86;;;;-1:-1:-1;;;28373:86:0;;17317:2:1;28373:86:0;;;17299:21:1;17356:2;17336:18;;;17329:30;17395:34;17375:18;;;17368:62;-1:-1:-1;;;17446:18:1;;;17439:39;17495:19;;28373:86:0;17115:405:1;28373:86:0;-1:-1:-1;;;;;28478:16:0;;28470:65;;;;-1:-1:-1;;;28470:65:0;;17727:2:1;28470:65:0;;;17709:21:1;17766:2;17746:18;;;17739:30;17805:34;17785:18;;;17778:62;-1:-1:-1;;;17856:18:1;;;17849:34;17900:19;;28470:65:0;17525:400:1;28470:65:0;28652:29;28669:1;28673:7;28652:8;:29::i;:::-;28711:2;28692:7;28700;28692:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;28692:21:0;-1:-1:-1;;;;;28692:21:0;;;;;;28731:27;;28750:7;;28731:27;;;;;;;;;;28692:16;28731:27;28249:517;;;:::o;27004:346::-;-1:-1:-1;;;;;27084:16:0;;27076:61;;;;-1:-1:-1;;;27076:61:0;;18132:2:1;27076:61:0;;;18114:21:1;;;18151:18;;;18144:30;18210:34;18190:18;;;18183:62;18262:18;;27076:61:0;17930:356:1;27076:61:0;27157:16;27165:7;27157;:16::i;:::-;27156:17;27148:58;;;;-1:-1:-1;;;27148:58:0;;18493:2:1;27148:58:0;;;18475:21:1;18532:2;18512:18;;;18505:30;18571;18551:18;;;18544:58;18619:18;;27148:58:0;18291:352:1;27148:58:0;27275:7;:16;;;;;;;-1:-1:-1;27275:16:0;;;;;;;-1:-1:-1;;;;;;27275:16:0;-1:-1:-1;;;;;27275:16:0;;;;;;;;27309:33;;27334:7;;-1:-1:-1;27309:33:0;;-1:-1:-1;;27309:33:0;27004:346;;:::o;48022:180::-;48096:12;48114:8;-1:-1:-1;;;;;48114:13:0;48135:7;48114:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48095:52;;;48166:7;48158:36;;;;-1:-1:-1;;;48158:36:0;;19060:2:1;48158:36:0;;;19042:21:1;19099:2;19079:18;;;19072:30;-1:-1:-1;;;19118:18:1;;;19111:46;19174:18;;48158:36:0;18858:340:1;35310:173:0;35366:16;35385:6;;-1:-1:-1;;;;;35402:17:0;;;-1:-1:-1;;;;;;35402:17:0;;;;;;35435:40;;35385:6;;;;;;;35435:40;;35366:16;35435:40;35355:128;35310:173;:::o;24367:315::-;24524:28;24534:4;24540:2;24544:7;24524:9;:28::i;:::-;24571:48;24594:4;24600:2;24604:7;24613:5;24571:22;:48::i;:::-;24563:111;;;;-1:-1:-1;;;24563:111:0;;;;;;;:::i;31447:723::-;31503:13;31724:10;31720:53;;-1:-1:-1;;31751:10:0;;;;;;;;;;;;-1:-1:-1;;;31751:10:0;;;;;31447:723::o;31720:53::-;31798:5;31783:12;31839:78;31846:9;;31839:78;;31872:8;;;;:::i;:::-;;-1:-1:-1;31895:10:0;;-1:-1:-1;31903:2:0;31895:10;;:::i;:::-;;;31839:78;;;31927:19;31959:6;31949:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31949:17:0;;31927:39;;31977:154;31984:10;;31977:154;;32011:11;32021:1;32011:11;;:::i;:::-;;-1:-1:-1;32080:10:0;32088:2;32080:5;:10;:::i;:::-;32067:24;;:2;:24;:::i;:::-;32054:39;;32037:6;32044;32037:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;32037:56:0;;;;;;;;-1:-1:-1;32108:11:0;32117:2;32108:11;;:::i;:::-;;;31977:154;;26008:110;26084:26;26094:2;26098:7;26084:26;;;;;;;;;;;;:9;:26::i;:::-;26008:110;;:::o;29626:799::-;29781:4;-1:-1:-1;;;;;29802:13:0;;9829:20;9877:8;29798:620;;29838:72;;-1:-1:-1;;;29838:72:0;;-1:-1:-1;;;;;29838:36:0;;;;;:72;;17550:10;;29889:4;;29895:7;;29904:5;;29838:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29838:72:0;;;;;;;;-1:-1:-1;;29838:72:0;;;;;;;;;;;;:::i;:::-;;;29834:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30080:13:0;;30076:272;;30123:60;;-1:-1:-1;;;30123:60:0;;;;;;;:::i;30076:272::-;30298:6;30292:13;30283:6;30279:2;30275:15;30268:38;29834:529;-1:-1:-1;;;;;;29961:51:0;-1:-1:-1;;;29961:51:0;;-1:-1:-1;29954:58:0;;29798:620;-1:-1:-1;30402:4:0;30395:11;;26347:321;26477:18;26483:2;26487:7;26477:5;:18::i;:::-;26528:54;26559:1;26563:2;26567:7;26576:5;26528:22;:54::i;:::-;26506:154;;;;-1:-1:-1;;;26506:154:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:173::-;660:20;;-1:-1:-1;;;;;709:31:1;;699:42;;689:70;;755:1;752;745:12;689:70;592:173;;;:::o;770:186::-;829:6;882:2;870:9;861:7;857:23;853:32;850:52;;;898:1;895;888:12;850:52;921:29;940:9;921:29;:::i;961:258::-;1033:1;1043:113;1057:6;1054:1;1051:13;1043:113;;;1133:11;;;1127:18;1114:11;;;1107:39;1079:2;1072:10;1043:113;;;1174:6;1171:1;1168:13;1165:48;;;-1:-1:-1;;1209:1:1;1191:16;;1184:27;961:258::o;1224:269::-;1277:3;1315:5;1309:12;1342:6;1337:3;1330:19;1358:63;1414:6;1407:4;1402:3;1398:14;1391:4;1384:5;1380:16;1358:63;:::i;:::-;1475:2;1454:15;-1:-1:-1;;1450:29:1;1441:39;;;;1482:4;1437:50;;1224:269;-1:-1:-1;;1224:269:1:o;1498:231::-;1647:2;1636:9;1629:21;1610:4;1667:56;1719:2;1708:9;1704:18;1696:6;1667:56;:::i;1734:180::-;1793:6;1846:2;1834:9;1825:7;1821:23;1817:32;1814:52;;;1862:1;1859;1852:12;1814:52;-1:-1:-1;1885:23:1;;1734:180;-1:-1:-1;1734:180:1:o;2127:254::-;2195:6;2203;2256:2;2244:9;2235:7;2231:23;2227:32;2224:52;;;2272:1;2269;2262:12;2224:52;2295:29;2314:9;2295:29;:::i;:::-;2285:39;2371:2;2356:18;;;;2343:32;;-1:-1:-1;;;2127:254:1:o;2386:592::-;2457:6;2465;2518:2;2506:9;2497:7;2493:23;2489:32;2486:52;;;2534:1;2531;2524:12;2486:52;2574:9;2561:23;2603:18;2644:2;2636:6;2633:14;2630:34;;;2660:1;2657;2650:12;2630:34;2698:6;2687:9;2683:22;2673:32;;2743:7;2736:4;2732:2;2728:13;2724:27;2714:55;;2765:1;2762;2755:12;2714:55;2805:2;2792:16;2831:2;2823:6;2820:14;2817:34;;;2847:1;2844;2837:12;2817:34;2892:7;2887:2;2878:6;2874:2;2870:15;2866:24;2863:37;2860:57;;;2913:1;2910;2903:12;2860:57;2944:2;2936:11;;;;;2966:6;;-1:-1:-1;2386:592:1;;-1:-1:-1;;;;2386:592:1:o;3165:328::-;3242:6;3250;3258;3311:2;3299:9;3290:7;3286:23;3282:32;3279:52;;;3327:1;3324;3317:12;3279:52;3350:29;3369:9;3350:29;:::i;:::-;3340:39;;3398:38;3432:2;3421:9;3417:18;3398:38;:::i;:::-;3388:48;;3483:2;3472:9;3468:18;3455:32;3445:42;;3165:328;;;;;:::o;3498:156::-;3564:20;;3624:4;3613:16;;3603:27;;3593:55;;3644:1;3641;3634:12;3659:456;3752:6;3760;3768;3776;3784;3837:3;3825:9;3816:7;3812:23;3808:33;3805:53;;;3854:1;3851;3844:12;3805:53;3890:9;3877:23;3867:33;;3919:36;3951:2;3940:9;3936:18;3919:36;:::i;:::-;3659:456;;3909:46;;-1:-1:-1;;;;4002:2:1;3987:18;;3974:32;;4053:2;4038:18;;4025:32;;4104:3;4089:19;;;4076:33;;-1:-1:-1;3659:456:1:o;4120:347::-;4185:6;4193;4246:2;4234:9;4225:7;4221:23;4217:32;4214:52;;;4262:1;4259;4252:12;4214:52;4285:29;4304:9;4285:29;:::i;:::-;4275:39;;4364:2;4353:9;4349:18;4336:32;4411:5;4404:13;4397:21;4390:5;4387:32;4377:60;;4433:1;4430;4423:12;4377:60;4456:5;4446:15;;;4120:347;;;;;:::o;4472:127::-;4533:10;4528:3;4524:20;4521:1;4514:31;4564:4;4561:1;4554:15;4588:4;4585:1;4578:15;4604:1138;4699:6;4707;4715;4723;4776:3;4764:9;4755:7;4751:23;4747:33;4744:53;;;4793:1;4790;4783:12;4744:53;4816:29;4835:9;4816:29;:::i;:::-;4806:39;;4864:38;4898:2;4887:9;4883:18;4864:38;:::i;:::-;4854:48;;4949:2;4938:9;4934:18;4921:32;4911:42;;5004:2;4993:9;4989:18;4976:32;5027:18;5068:2;5060:6;5057:14;5054:34;;;5084:1;5081;5074:12;5054:34;5122:6;5111:9;5107:22;5097:32;;5167:7;5160:4;5156:2;5152:13;5148:27;5138:55;;5189:1;5186;5179:12;5138:55;5225:2;5212:16;5247:2;5243;5240:10;5237:36;;;5253:18;;:::i;:::-;5328:2;5322:9;5296:2;5382:13;;-1:-1:-1;;5378:22:1;;;5402:2;5374:31;5370:40;5358:53;;;5426:18;;;5446:22;;;5423:46;5420:72;;;5472:18;;:::i;:::-;5512:10;5508:2;5501:22;5547:2;5539:6;5532:18;5587:7;5582:2;5577;5573;5569:11;5565:20;5562:33;5559:53;;;5608:1;5605;5598:12;5559:53;5664:2;5659;5655;5651:11;5646:2;5638:6;5634:15;5621:46;5709:1;5704:2;5699;5691:6;5687:15;5683:24;5676:35;5730:6;5720:16;;;;;;;4604:1138;;;;;;;:::o;5747:387::-;5831:6;5839;5847;5855;5908:3;5896:9;5887:7;5883:23;5879:33;5876:53;;;5925:1;5922;5915:12;5876:53;5961:9;5948:23;5938:33;;5990:36;6022:2;6011:9;6007:18;5990:36;:::i;:::-;5747:387;;5980:46;;-1:-1:-1;;;;6073:2:1;6058:18;;6045:32;;6124:2;6109:18;6096:32;;5747:387::o;6139:260::-;6207:6;6215;6268:2;6256:9;6247:7;6243:23;6239:32;6236:52;;;6284:1;6281;6274:12;6236:52;6307:29;6326:9;6307:29;:::i;:::-;6297:39;;6355:38;6389:2;6378:9;6374:18;6355:38;:::i;:::-;6345:48;;6139:260;;;;;:::o;6404:356::-;6606:2;6588:21;;;6625:18;;;6618:30;6684:34;6679:2;6664:18;;6657:62;6751:2;6736:18;;6404:356::o;6765:380::-;6844:1;6840:12;;;;6887;;;6908:61;;6962:4;6954:6;6950:17;6940:27;;6908:61;7015:2;7007:6;7004:14;6984:18;6981:38;6978:161;;;7061:10;7056:3;7052:20;7049:1;7042:31;7096:4;7093:1;7086:15;7124:4;7121:1;7114:15;6978:161;;6765:380;;;:::o;8390:413::-;8592:2;8574:21;;;8631:2;8611:18;;;8604:30;8670:34;8665:2;8650:18;;8643:62;-1:-1:-1;;;8736:2:1;8721:18;;8714:47;8793:3;8778:19;;8390:413::o;9151:348::-;9353:2;9335:21;;;9392:2;9372:18;;;9365:30;9431:26;9426:2;9411:18;;9404:54;9490:2;9475:18;;9151:348::o;9504:127::-;9565:10;9560:3;9556:20;9553:1;9546:31;9596:4;9593:1;9586:15;9620:4;9617:1;9610:15;9636:128;9676:3;9707:1;9703:6;9700:1;9697:13;9694:39;;;9713:18;;:::i;:::-;-1:-1:-1;9749:9:1;;9636:128::o;9769:346::-;9971:2;9953:21;;;10010:2;9990:18;;;9983:30;-1:-1:-1;;;10044:2:1;10029:18;;10022:52;10106:2;10091:18;;9769:346::o;10120:336::-;10322:2;10304:21;;;10361:2;10341:18;;;10334:30;-1:-1:-1;;;10395:2:1;10380:18;;10373:42;10447:2;10432:18;;10120:336::o;10461:338::-;10663:2;10645:21;;;10702:2;10682:18;;;10675:30;-1:-1:-1;;;10736:2:1;10721:18;;10714:44;10790:2;10775:18;;10461:338::o;10804:135::-;10843:3;-1:-1:-1;;10864:17:1;;10861:43;;;10884:18;;:::i;:::-;-1:-1:-1;10931:1:1;10920:13;;10804:135::o;10944:127::-;11005:10;11000:3;10996:20;10993:1;10986:31;11036:4;11033:1;11026:15;11060:4;11057:1;11050:15;13136:185;13178:3;13216:5;13210:12;13231:52;13276:6;13271:3;13264:4;13257:5;13253:16;13231:52;:::i;:::-;13299:16;;;;;13136:185;-1:-1:-1;;13136:185:1:o;13326:1174::-;13502:3;13531:1;13564:6;13558:13;13594:3;13616:1;13644:9;13640:2;13636:18;13626:28;;13704:2;13693:9;13689:18;13726;13716:61;;13770:4;13762:6;13758:17;13748:27;;13716:61;13796:2;13844;13836:6;13833:14;13813:18;13810:38;13807:165;;;-1:-1:-1;;;13871:33:1;;13927:4;13924:1;13917:15;13957:4;13878:3;13945:17;13807:165;13988:18;14015:104;;;;14133:1;14128:320;;;;13981:467;;14015:104;-1:-1:-1;;14048:24:1;;14036:37;;14093:16;;;;-1:-1:-1;14015:104:1;;14128:320;13083:1;13076:14;;;13120:4;13107:18;;14223:1;14237:165;14251:6;14248:1;14245:13;14237:165;;;14329:14;;14316:11;;;14309:35;14372:16;;;;14266:10;;14237:165;;;14241:3;;14431:6;14426:3;14422:16;14415:23;;13981:467;;;;;;;14464:30;14490:3;14482:6;14464:30;:::i;:::-;14457:37;13326:1174;-1:-1:-1;;;;;13326:1174:1:o;15177:370::-;15334:3;15372:6;15366:13;15388:53;15434:6;15429:3;15422:4;15414:6;15410:17;15388:53;:::i;:::-;15463:16;;;;15488:21;;;-1:-1:-1;15536:4:1;15525:16;;15177:370;-1:-1:-1;15177:370:1:o;19203:414::-;19405:2;19387:21;;;19444:2;19424:18;;;19417:30;19483:34;19478:2;19463:18;;19456:62;-1:-1:-1;;;19549:2:1;19534:18;;19527:48;19607:3;19592:19;;19203:414::o;19622:127::-;19683:10;19678:3;19674:20;19671:1;19664:31;19714:4;19711:1;19704:15;19738:4;19735:1;19728:15;19754:120;19794:1;19820;19810:35;;19825:18;;:::i;:::-;-1:-1:-1;19859:9:1;;19754:120::o;19879:125::-;19919:4;19947:1;19944;19941:8;19938:34;;;19952:18;;:::i;:::-;-1:-1:-1;19989:9:1;;19879:125::o;20009:112::-;20041:1;20067;20057:35;;20072:18;;:::i;:::-;-1:-1:-1;20106:9:1;;20009:112::o;20126:500::-;-1:-1:-1;;;;;20395:15:1;;;20377:34;;20447:15;;20442:2;20427:18;;20420:43;20494:2;20479:18;;20472:34;;;20542:3;20537:2;20522:18;;20515:31;;;20320:4;;20563:57;;20600:19;;20592:6;20563:57;:::i;:::-;20555:65;20126:500;-1:-1:-1;;;;;;20126:500:1:o;20631:249::-;20700:6;20753:2;20741:9;20732:7;20728:23;20724:32;20721:52;;;20769:1;20766;20759:12;20721:52;20801:9;20795:16;20820:30;20844:5;20820:30;:::i
Swarm Source
ipfs://410a46616955d8250bff5a2f2012457c17e061e47064136c017aad567f5528dc
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.