ERC-721
Overview
Max Total Supply
5,557 CBCP
Holders
458
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CBCPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PixelBears
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; // File: IOperatorFilterRegistry.sol interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } // File: OperatorFilterer721.sol abstract contract OperatorFilterer721 { error OperatorNotAllowed(address operator); IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); mapping(address => bool) internal allowedContracts; constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(operatorFilterRegistry).code.length > 0) { if (subscribe) { operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { operatorFilterRegistry.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(operatorFilterRegistry).code.length > 0) { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from == msg.sender) { _; return; } if (allowedContracts[msg.sender]) { _; return; } if ( !( operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender) && operatorFilterRegistry.isOperatorAllowed(address(this), from) ) ) { revert OperatorNotAllowed(msg.sender); } } _; } } // File: DefaultOperatorFilterer721.sol abstract contract DefaultOperatorFilterer721 is OperatorFilterer721 { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer721(DEFAULT_SUBSCRIPTION, true) {} } // File: contracts/Ownable.sol /** * @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. * * Source: openzeppelin */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(msg.sender); } /** * @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() == msg.sender, "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() external 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) external virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: Strings.sol /** * Source: Openzeppelin */ /** * @dev String operations. */ library Strings { /** * @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); } } // File: ECDSA.sol // OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol) /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @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) { // 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)); } } /** * @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) = tryRecover(hash, signature); 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) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @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) { // 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)); } if (v != 27 && v != 28) { return (address(0)); } // 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)); } return (signer); } /** * @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)); } } // File: Address.sol /** * Source: Openzeppelin */ /** * @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; } } // File: IERC721Receiver.sol /** * @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: IERC165.sol // https://eips.ethereum.org/EIPS/eip-165 interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); } // File: IERC2981.sol /** * Source: Openzeppelin */ /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: ERC165.sol /** * Source: Openzeppelin */ /** * @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: IERC721.sol // https://eips.ethereum.org/EIPS/eip-721, http://erc721.org/ /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x80ac58cd. interface IERC721 is IERC165 { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } // File: IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension * Made for efficiancy! */ contract ERC721 is ERC165, IERC721, IERC721Metadata, Ownable { using Address for address; using Strings for uint256; uint16 public totalSupply; address public proxyRegistryAddress; string public baseURI; // Mapping from token ID to owner address mapping(uint256 => address) internal _owners; // Mapping owner address to token count mapping(address => uint256) internal _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(address _openseaProxyRegistry, string memory _baseURI) { proxyRegistryAddress = _openseaProxyRegistry; baseURI = _baseURI; } /** * @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) external view override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view 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() external pure override returns (string memory) { return "Chill Bear Club Pixels"; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() external pure override returns (string memory) { return "CBCP"; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) external view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(baseURI, tokenId.toString(), ".json")); } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) external override { address owner = _owners[tokenId]; require(to != owner, "ERC721: approval to current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view 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) external override { _setApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return _operatorApprovals[owner][operator]; } function setOpenseaProxyRegistry(address addr) external onlyOwner { proxyRegistryAddress = addr; } function setBaseURI(string calldata _baseURI) external onlyOwner { baseURI = _baseURI; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, 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 override virtual { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override virtual { require(_isApprovedOrOwner(msg.sender, 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 */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = _owners[tokenId]; return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _mintQty(uint16 qty, address to) internal { uint tokenId = totalSupply; _balances[to] += qty; for (uint i; i < qty; i++) { tokenId++; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } totalSupply += qty; require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); // checking it once will make sure that the address can recieve NFTs } /** * @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 _mint2(address to) internal { uint tokenId = totalSupply; _balances[to] += 2; for (uint i; i < 2; i++) { tokenId++; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } totalSupply += 2; require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); // checking it once will make sure that the address can recieve NFTs } function _mint1(address to) internal { uint tokenId = totalSupply + 1; _balances[to]++; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); totalSupply++; require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @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(_owners[tokenId] == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from]--; _balances[to]++; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(msg.sender, 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; } } } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } // File: PixelBears.sol contract PixelBears is IERC2981, ERC721, DefaultOperatorFilterer721 { bool private _whitelistEnabled; bool private _publicEnabled; uint private _supply; uint private _whitelistSalePrice; uint private _publicSalePrice; address private _whitelistSigner; uint private _EIP2981RoyaltyPercentage; uint public maxFreeMint = 20; mapping(address => uint) public whitelistMinted; mapping(address => uint) public freeAmountMinted; event WhitelistSalePriceChanged(uint indexed prevPrice, uint indexed newPrice); event PublicSalePriceChanged(uint indexed prevPrice, uint indexed newPrice); event EIP2981RoyaltyPercentageChanged(uint indexed prevRoyalty, uint indexed newRoyalty); constructor( address _openseaProxyRegistry, uint supply, uint whitelistSalePrice, uint publicSalePrice, uint EIP2981RoyaltyPercentage, address whitelistSigner, string memory _baseURI ) ERC721(_openseaProxyRegistry, _baseURI) { require(EIP2981RoyaltyPercentage <= 1000, "royalty cannot be more than 10 percent"); _EIP2981RoyaltyPercentage = EIP2981RoyaltyPercentage; _supply = supply; _whitelistSigner = whitelistSigner; _whitelistSalePrice = whitelistSalePrice; _publicSalePrice = publicSalePrice; } function mintFromReserve(address to) external onlyOwner { require(totalSupply < 1); _mint1(to); } function getMintingInfo() external view returns( uint supply, uint publicSalePrice, uint whitelistSalePrice, uint EIP2981RoyaltyPercentage ) { supply = _supply; whitelistSalePrice = _whitelistSalePrice; publicSalePrice = _publicSalePrice; EIP2981RoyaltyPercentage = _EIP2981RoyaltyPercentage; } function setWhitelistPrice(uint priceInWei) external onlyOwner { uint prev = _whitelistSalePrice; _whitelistSalePrice = priceInWei; emit WhitelistSalePriceChanged(prev, priceInWei); } function setPublicSalePrice(uint priceInWei) external onlyOwner { uint prev = _publicSalePrice; _publicSalePrice = priceInWei; emit PublicSalePriceChanged(prev, priceInWei); } function setMaxFreeMint(uint _maxFreeMint) external onlyOwner { maxFreeMint = _maxFreeMint; } function setWhitelistSigner(address whitelistSigner) external onlyOwner { _whitelistSigner = whitelistSigner; } /** * @notice In basis points (parts per 10K). Eg. 500 = 5% */ function setEIP2981RoyaltyPercentage(uint percentage) external onlyOwner { require(percentage <= 1000, "royalty cannot be more than 10 percent"); uint prev = _EIP2981RoyaltyPercentage; _EIP2981RoyaltyPercentage = percentage; emit EIP2981RoyaltyPercentageChanged(prev, percentage); } modifier mintFunc(uint16 qty, uint supply, uint price) { require(supply >= qty, "Request exceeds max supply!"); require(msg.value == price * qty, "ETH Amount is not correct!"); _; } function mint(uint16 qty) external payable mintFunc(qty, _supply, _publicSalePrice) { require(_publicEnabled, "Public minting is not enabled!"); if (_publicSalePrice == 0) { require(freeAmountMinted[msg.sender] + qty <= maxFreeMint, "Can't mint more than max free quantity tokens!"); freeAmountMinted[msg.sender] += qty; } _supply -= qty; _mintQty(qty, msg.sender); } function whitelistMint(bytes calldata sig, uint16 qty, uint16 maxQty) external payable mintFunc(qty, _supply, _whitelistSalePrice) { require(_whitelistEnabled, "Whitelist sale is not enabled!"); require(_isWhitelisted(msg.sender, maxQty, sig), "User not whitelisted!"); require(whitelistMinted[msg.sender] + qty <= maxQty, "Can't mint more than whitelisted amount of tokens!"); _supply -= qty; whitelistMinted[msg.sender] += qty; _mintQty(qty, msg.sender); } function _isWhitelisted(address _wallet, uint16 _maxQty, bytes memory _signature) private view returns(bool) { return ECDSA.recover( ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(_wallet, _maxQty))), _signature ) == _whitelistSigner; } function isWhitelisted(address _wallet, uint16 _maxQty, bytes memory _signature) external view returns(bool) { return _isWhitelisted(_wallet, _maxQty, _signature); } function getSalesStatus() external view returns(bool whitelistEnabled, bool publicEnabled, uint whitelistSalePrice, uint publicSalePrice) { whitelistEnabled = _whitelistEnabled; publicEnabled = _publicEnabled; whitelistSalePrice = _whitelistSalePrice; publicSalePrice = _publicSalePrice; } /** * @notice returns royalty info for EIP2981 supporting marketplaces * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint tokenId, uint salePrice) external view override returns(address receiver, uint256 royaltyAmount) { require(_exists(tokenId), "Royality querry for non-existant token!"); return(owner(), salePrice * _EIP2981RoyaltyPercentage / 10000); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function withdraw() onlyOwner external { (bool success, ) = payable(msg.sender).call{value: address(this).balance, gas: 2600}(""); require(success, "Failed to withdraw payment!"); } function toggleWhitelistSale() external onlyOwner { _whitelistEnabled = !_whitelistEnabled; } function togglePublicSale() external onlyOwner { _publicEnabled = !_publicEnabled; } function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } function setOperaterFilterBypass(address sender, bool approved) external onlyOwner { allowedContracts[sender] = approved; } function tokensOfOwner(address owner) external view returns(uint[] memory) { uint owned = _balances[owner]; uint[] memory tokens = new uint[](owned); uint x; if (owned == 0) return tokens; for (uint i = 1; i <= totalSupply; i++) { if (ownerOf(i) == owner) { tokens[x] = i; x++; if (x >= owned) { break; } } } return tokens; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_openseaProxyRegistry","type":"address"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"whitelistSalePrice","type":"uint256"},{"internalType":"uint256","name":"publicSalePrice","type":"uint256"},{"internalType":"uint256","name":"EIP2981RoyaltyPercentage","type":"uint256"},{"internalType":"address","name":"whitelistSigner","type":"address"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"prevRoyalty","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newRoyalty","type":"uint256"}],"name":"EIP2981RoyaltyPercentageChanged","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":"uint256","name":"prevPrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PublicSalePriceChanged","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"prevPrice","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"WhitelistSalePriceChanged","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeAmountMinted","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":[],"name":"getMintingInfo","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"publicSalePrice","type":"uint256"},{"internalType":"uint256","name":"whitelistSalePrice","type":"uint256"},{"internalType":"uint256","name":"EIP2981RoyaltyPercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesStatus","outputs":[{"internalType":"bool","name":"whitelistEnabled","type":"bool"},{"internalType":"bool","name":"publicEnabled","type":"bool"},{"internalType":"uint256","name":"whitelistSalePrice","type":"uint256"},{"internalType":"uint256","name":"publicSalePrice","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":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint16","name":"_maxQty","type":"uint16"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"qty","type":"uint16"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mintFromReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setEIP2981RoyaltyPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMint","type":"uint256"}],"name":"setMaxFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOpenseaProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setOperaterFilterBypass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setPublicSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whitelistSigner","type":"address"}],"name":"setWhitelistSigner","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":"pure","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhitelistSale","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"bytes","name":"sig","type":"bytes"},{"internalType":"uint16","name":"qty","type":"uint16"},{"internalType":"uint16","name":"maxQty","type":"uint16"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526014600e553480156200001657600080fd5b50604051620037d6380380620037d68339810160408190526200003991620002f3565b733cc6cdda760b79bafa08df41ecfa224f810dceb6600188836200005d3362000270565b600180546001600160a01b0319166001600160a01b0384161790556002620000868282620004a3565b5050506daaeb6d7670e522a718067333cd4e3b15620001ce5780156200011c57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620000fd57600080fd5b505af115801562000112573d6000803e3d6000fd5b50505050620001ce565b6001600160a01b038216156200016d5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000e2565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001b457600080fd5b505af1158015620001c9573d6000803e3d6000fd5b505050505b50506103e8831115620002365760405162461bcd60e51b815260206004820152602660248201527f726f79616c74792063616e6e6f74206265206d6f7265207468616e2031302070604482015265195c98d95b9d60d21b606482015260840160405180910390fd5b50600d91909155600993909355600c80546001600160a01b0319166001600160a01b0390941693909317909255600a55600b55506200056f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620002d857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a0312156200030f57600080fd5b6200031a88620002c0565b965060208089015196506040890151955060608901519450608089015193506200034760a08a01620002c0565b60c08a01519093506001600160401b03808211156200036557600080fd5b818b0191508b601f8301126200037a57600080fd5b8151818111156200038f576200038f620002dd565b604051601f8201601f19908116603f01168101908382118183101715620003ba57620003ba620002dd565b816040528281528e86848701011115620003d357600080fd5b600093505b82841015620003f75784840186015181850187015292850192620003d8565b600086848301015280965050505050505092959891949750929550565b600181811c908216806200042957607f821691505b6020821081036200044a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200049e57600081815260208120601f850160051c81016020861015620004795750805b601f850160051c820191505b818110156200049a5782815560010162000485565b5050505b505050565b81516001600160401b03811115620004bf57620004bf620002dd565b620004d781620004d0845462000414565b8462000450565b602080601f8311600181146200050f5760008415620004f65750858301515b600019600386901b1c1916600185901b1785556200049a565b600085815260208120601f198616915b8281101562000540578886015182559484019460019091019084016200051f565b50858210156200055f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613257806200057f6000396000f3fe6080604052600436106102465760003560e01c8063717d57d311610139578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd1461076d578063cd7c03261461078d578063d3381438146107ad578063e222c7f9146107cd578063e985e9c5146107e2578063f2fde38b1461080257600080fd5b8063a22cb465146106d7578063a591252d146106f7578063b0413beb1461070d578063b88d4fde1461072d578063bd2f52441461074d57600080fd5b80638da5cb5b116100fd5780638da5cb5b1461061257806395d89b41146106305780639652f8fa1461065d57806398a8cffe1461067d5780639b4c27a0146106aa57600080fd5b8063717d57d31461053a578063742a4c9b1461055a578063791a25191461057a5780638462151c1461059a5780638b2c92ab146105c757600080fd5b80633ccfd60b116101c75780636352211e1161018b5780636352211e146104865780636c0360eb146104a65780636cafd0df146104bb57806370a08231146104f7578063715018a61461052557600080fd5b80633ccfd60b146103fc57806342842e0e146104115780634fbf54e81461043157806355f804b31461045157806359eda1b51461047157600080fd5b806318160ddd1161020e57806318160ddd1461034257806323b872dd1461037757806323cf0a2214610397578063252be8ef146103aa5780632a55205a146103bd57600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102c85780630913d98414610300578063095ea7b314610322575b600080fd5b34801561025757600080fd5b5061026b610266366004612922565b610822565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506040805180820190915260168152754368696c6c204265617220436c756220506978656c7360501b60208201525b6040516102779190612996565b3480156102d457600080fd5b506102e86102e33660046129a9565b61084d565b6040516001600160a01b039091168152602001610277565b34801561030c57600080fd5b5061032061031b3660046129a9565b6108e7565b005b34801561032e57600080fd5b5061032061033d3660046129d7565b6109ba565b34801561034e57600080fd5b5060005461036490600160a01b900461ffff1681565b60405161ffff9091168152602001610277565b34801561038357600080fd5b50610320610392366004612a03565b610acd565b6103206103a5366004612a5b565b610c4c565b6103206103b8366004612ab8565b610e3a565b3480156103c957600080fd5b506103dd6103d8366004612b1d565b6110ab565b604080516001600160a01b039093168352602083019190915201610277565b34801561040857600080fd5b50610320611154565b34801561041d57600080fd5b5061032061042c366004612a03565b61122d565b34801561043d57600080fd5b5061032061044c366004612b4d565b6113a1565b34801561045d57600080fd5b5061032061046c366004612b86565b611405565b34801561047d57600080fd5b5061032061144b565b34801561049257600080fd5b506102e86104a13660046129a9565b611498565b3480156104b257600080fd5b506102bb61150f565b3480156104c757600080fd5b50600954600a54600b54600d54909190604080519485526020850193909352918301526060820152608001610277565b34801561050357600080fd5b50610517610512366004612bc8565b61159d565b604051908152602001610277565b34801561053157600080fd5b50610320611624565b34801561054657600080fd5b506103206105553660046129a9565b611669565b34801561056657600080fd5b506103206105753660046129a9565b6116db565b34801561058657600080fd5b506103206105953660046129a9565b611719565b3480156105a657600080fd5b506105ba6105b5366004612bc8565b61178b565b6040516102779190612be5565b3480156105d357600080fd5b506105f0600854600a54600b5460ff808416946101009094041692565b6040805194151585529215156020850152918301526060820152608001610277565b34801561061e57600080fd5b506000546001600160a01b03166102e8565b34801561063c57600080fd5b506040805180820190915260048152630434243560e41b60208201526102bb565b34801561066957600080fd5b5061026b610678366004612ccc565b611886565b34801561068957600080fd5b50610517610698366004612bc8565b600f6020526000908152604090205481565b3480156106b657600080fd5b506105176106c5366004612bc8565b60106020526000908152604090205481565b3480156106e357600080fd5b506103206106f2366004612b4d565b61189b565b34801561070357600080fd5b50610517600e5481565b34801561071957600080fd5b50610320610728366004612bc8565b6118aa565b34801561073957600080fd5b50610320610748366004612d2c565b611907565b34801561075957600080fd5b50610320610768366004612bc8565b611a8a565b34801561077957600080fd5b506102bb6107883660046129a9565b611ae5565b34801561079957600080fd5b506001546102e8906001600160a01b031681565b3480156107b957600080fd5b506103206107c8366004612bc8565b611b96565b3480156107d957600080fd5b50610320611bf1565b3480156107ee57600080fd5b5061026b6107fd366004612d98565b611c47565b34801561080e57600080fd5b5061032061081d366004612bc8565b611d05565b60006001600160e01b0319821663152a902d60e11b1480610847575061084782611dac565b92915050565b6000818152600360205260408120546001600160a01b03166108cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b336108fa6000546001600160a01b031690565b6001600160a01b0316146109205760405162461bcd60e51b81526004016108c290612dc6565b6103e88111156109815760405162461bcd60e51b815260206004820152602660248201527f726f79616c74792063616e6e6f74206265206d6f7265207468616e2031302070604482015265195c98d95b9d60d21b60648201526084016108c2565b600d805490829055604051829082907fb4fb93f70c244a4a5ccc896856ac486b87475e23f8050e29a7c790c456cbddc590600090a35050565b6000818152600360205260409020546001600160a01b03908116908316819003610a305760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108c2565b336001600160a01b0382161480610a4c5750610a4c8133611c47565b610abe5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108c2565b610ac88383611dfc565b505050565b826daaeb6d7670e522a718067333cd4e3b15610c3b57336001600160a01b03821603610b0357610afe848484611e6a565b610c46565b3360009081526007602052604090205460ff1615610b2657610afe848484611e6a565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b999190612dfb565b8015610c1c5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c9190612dfb565b610c3b57604051633b79c77360e21b81523360048201526024016108c2565b610c46848484611e6a565b50505050565b80600954600b548261ffff16821015610ca75760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c7921000000000060448201526064016108c2565b610cb561ffff841682612e2e565b3414610d035760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f72726563742100000000000060448201526064016108c2565b600854610100900460ff16610d5a5760405162461bcd60e51b815260206004820152601e60248201527f5075626c6963206d696e74696e67206973206e6f7420656e61626c656421000060448201526064016108c2565b600b54600003610e1457600e5433600090815260106020526040902054610d869061ffff871690612e45565b1115610deb5760405162461bcd60e51b815260206004820152602e60248201527f43616e2774206d696e74206d6f7265207468616e206d6178206672656520717560448201526d616e7469747920746f6b656e732160901b60648201526084016108c2565b336000908152601060205260408120805461ffff87169290610e0e908490612e45565b90915550505b8361ffff1660096000828254610e2a9190612e58565b90915550610c4690508433611e9b565b81600954600a548261ffff16821015610e955760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c7921000000000060448201526064016108c2565b610ea361ffff841682612e2e565b3414610ef15760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f72726563742100000000000060448201526064016108c2565b60085460ff16610f435760405162461bcd60e51b815260206004820152601e60248201527f57686974656c6973742073616c65206973206e6f7420656e61626c656421000060448201526064016108c2565b610f84338589898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fd092505050565b610fc85760405162461bcd60e51b815260206004820152601560248201527455736572206e6f742077686974656c69737465642160581b60448201526064016108c2565b336000908152600f602052604090205461ffff80861691610feb91881690612e45565b11156110545760405162461bcd60e51b815260206004820152603260248201527f43616e2774206d696e74206d6f7265207468616e2077686974656c697374656460448201527120616d6f756e74206f6620746f6b656e732160701b60648201526084016108c2565b8461ffff166009600082825461106a9190612e58565b9091555050336000908152600f60205260408120805461ffff88169290611092908490612e45565b909155506110a290508533611e9b565b50505050505050565b60008281526003602052604081205481906001600160a01b03166111215760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201526620746f6b656e2160c81b60648201526084016108c2565b6000546001600160a01b0316612710600d548561113e9190612e2e565b6111489190612e81565b915091505b9250929050565b336111676000546001600160a01b031690565b6001600160a01b03161461118d5760405162461bcd60e51b81526004016108c290612dc6565b6040516000903390610a2890479084818181858888f193505050503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b505090508061122a5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f207769746864726177207061796d656e7421000000000060448201526064016108c2565b50565b826daaeb6d7670e522a718067333cd4e3b1561139657336001600160a01b0382160361125e57610afe84848461208d565b3360009081526007602052604090205460ff161561128157610afe84848461208d565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f49190612dfb565b80156113775750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113779190612dfb565b61139657604051633b79c77360e21b81523360048201526024016108c2565b610c4684848461208d565b336113b46000546001600160a01b031690565b6001600160a01b0316146113da5760405162461bcd60e51b81526004016108c290612dc6565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b336114186000546001600160a01b031690565b6001600160a01b03161461143e5760405162461bcd60e51b81526004016108c290612dc6565b6002610ac8828483612f1d565b3361145e6000546001600160a01b031690565b6001600160a01b0316146114845760405162461bcd60e51b81526004016108c290612dc6565b6008805460ff19811660ff90911615179055565b6000818152600360205260408120546001600160a01b0316806108475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108c2565b6002805461151c90612e95565b80601f016020809104026020016040519081016040528092919081815260200182805461154890612e95565b80156115955780601f1061156a57610100808354040283529160200191611595565b820191906000526020600020905b81548152906001019060200180831161157857829003601f168201915b505050505081565b60006001600160a01b0382166116085760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108c2565b506001600160a01b031660009081526004602052604090205490565b336116376000546001600160a01b031690565b6001600160a01b03161461165d5760405162461bcd60e51b81526004016108c290612dc6565b61166760006120a8565b565b3361167c6000546001600160a01b031690565b6001600160a01b0316146116a25760405162461bcd60e51b81526004016108c290612dc6565b600a805490829055604051829082907fa1497bc90c48e3a1f7aa6e49f2f6645b740375eb437fad25ba455e12d81c12ea90600090a35050565b336116ee6000546001600160a01b031690565b6001600160a01b0316146117145760405162461bcd60e51b81526004016108c290612dc6565b600e55565b3361172c6000546001600160a01b031690565b6001600160a01b0316146117525760405162461bcd60e51b81526004016108c290612dc6565b600b805490829055604051829082907f2942d24204aedd5f258e57ff591497e39deebe8432cc5fe60afc6e54fcf036a890600090a35050565b6001600160a01b0381166000908152600460205260408120546060918167ffffffffffffffff8111156117c0576117c0612c29565b6040519080825280602002602001820160405280156117e9578160200160208202803683370190505b5090506000826000036117fe57509392505050565b60015b600054600160a01b900461ffff16811161187c57856001600160a01b031661182882611498565b6001600160a01b03160361186a578083838151811061184957611849612fdd565b60209081029190910101528161185e81612ff3565b9250508382101561187c575b8061187481612ff3565b915050611801565b5090949350505050565b6000611893848484611fd0565b949350505050565b6118a63383836120f8565b5050565b336118bd6000546001600160a01b031690565b6001600160a01b0316146118e35760405162461bcd60e51b81526004016108c290612dc6565b6000546001600160a01b90910461ffff16106118fe57600080fd5b61122a816121c6565b836daaeb6d7670e522a718067333cd4e3b15611a7757336001600160a01b0382160361193e57611939858585856122d5565b611a83565b3360009081526007602052604090205460ff161561196257611939858585856122d5565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156119b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d59190612dfb565b8015611a585750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a589190612dfb565b611a7757604051633b79c77360e21b81523360048201526024016108c2565b611a83858585856122d5565b5050505050565b33611a9d6000546001600160a01b031690565b6001600160a01b031614611ac35760405162461bcd60e51b81526004016108c290612dc6565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600360205260409020546060906001600160a01b0316611b645760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108c2565b6002611b6f83612307565b604051602001611b8092919061300c565b6040516020818303038152906040529050919050565b33611ba96000546001600160a01b031690565b6001600160a01b031614611bcf5760405162461bcd60e51b81526004016108c290612dc6565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b33611c046000546001600160a01b031690565b6001600160a01b031614611c2a5760405162461bcd60e51b81526004016108c290612dc6565b6008805461ff001981166101009182900460ff1615909102179055565b60015460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c455279190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd91906130a3565b6001600160a01b031603611cd5576001915050610847565b50506001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b33611d186000546001600160a01b031690565b6001600160a01b031614611d3e5760405162461bcd60e51b81526004016108c290612dc6565b6001600160a01b038116611da35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c2565b61122a816120a8565b60006001600160e01b031982166380ac58cd60e01b1480611ddd57506001600160e01b03198216635b5e139f60e01b145b8061084757506301ffc9a760e01b6001600160e01b0319831614610847565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e3182611498565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e743382612408565b611e905760405162461bcd60e51b81526004016108c2906130c0565b610ac88383836124d4565b600080546001600160a01b0383168252600460205260408220805461ffff600160a01b9093048316939286169290611ed4908490612e45565b90915550600090505b8361ffff16811015611f5e5781611ef381612ff3565b60008181526003602052604080822080546001600160a01b0319166001600160a01b0389169081179091559051929550859350917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480611f5681612ff3565b915050611edd565b5082600060148282829054906101000a900461ffff16611f7e9190613111565b92506101000a81548161ffff021916908361ffff160217905550611fb46000838360405180602001604052806000815250612666565b610ac85760405162461bcd60e51b81526004016108c290613133565b600c5460408051606086901b6bffffffffffffffffffffffff191660208083019190915260f086901b6001600160f01b0319166034830152825160168184030181526036830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a333200000000605684015260728084019190915283518084039091018152609290920190925280519101206000916001600160a01b03169061207b9084612767565b6001600160a01b031614949350505050565b610ac883838360405180602001604052806000815250611907565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b0316036121595760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108c2565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600080546121e090600160a01b900461ffff166001613111565b6001600160a01b0383166000908152600460205260408120805461ffff9390931693509061220d83612ff3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460008054600160a01b900461ffff1690601461228283613185565b91906101000a81548161ffff021916908361ffff160217905550506122b96000838360405180602001604052806000815250612666565b6118a65760405162461bcd60e51b81526004016108c290613133565b6122df3383612408565b6122fb5760405162461bcd60e51b81526004016108c2906130c0565b610c4684848484612774565b60608160000361232e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612358578061234281612ff3565b91506123519050600a83612e81565b9150612332565b60008167ffffffffffffffff81111561237357612373612c29565b6040519080825280601f01601f19166020018201604052801561239d576020820181803683370190505b5090505b8415611893576123b2600183612e58565b91506123bf600a866131a6565b6123ca906030612e45565b60f81b8183815181106123df576123df612fdd565b60200101906001600160f81b031916908160001a905350612401600a86612e81565b94506123a1565b6000818152600360205260408120546001600160a01b03166124815760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108c2565b6000828152600360205260409020546001600160a01b039081169084168114806124c45750836001600160a01b03166124b98461084d565b6001600160a01b0316145b8061189357506118938185611c47565b6000818152600360205260409020546001600160a01b0384811691161461254b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108c2565b6001600160a01b0382166125ad5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108c2565b6125b8600082611dfc565b6001600160a01b03831660009081526004602052604081208054916125dc836131ba565b90915550506001600160a01b038216600090815260046020526040812080549161260583612ff3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b1561275c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126aa9033908990889088906004016131d1565b6020604051808303816000875af19250505080156126e5575060408051601f3d908101601f191682019092526126e291810190613204565b60015b612742573d808015612713576040519150601f19603f3d011682016040523d82523d6000602084013e612718565b606091505b50805160000361273a5760405162461bcd60e51b81526004016108c290613133565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611893565b506001949350505050565b60008061189384846127a7565b61277f8484846124d4565b61278b84848484612666565b610c465760405162461bcd60e51b81526004016108c290613133565b600081516041036127da5760208201516040830151606084015160001a6127d086828585612809565b9350505050610847565b815160400361280157602082015160408301516127f88583836128e2565b92505050610847565b506000610847565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561283b57506000611893565b8360ff16601b1415801561285357508360ff16601c14155b1561286057506000611893565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa1580156128b4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166128d9576000915050611893565b95945050505050565b60006001600160ff1b03821660ff83901c601b0161290286828785612809565b9695505050505050565b6001600160e01b03198116811461122a57600080fd5b60006020828403121561293457600080fd5b813561293f8161290c565b9392505050565b60005b83811015612961578181015183820152602001612949565b50506000910152565b60008151808452612982816020860160208601612946565b601f01601f19169290920160200192915050565b60208152600061293f602083018461296a565b6000602082840312156129bb57600080fd5b5035919050565b6001600160a01b038116811461122a57600080fd5b600080604083850312156129ea57600080fd5b82356129f5816129c2565b946020939093013593505050565b600080600060608486031215612a1857600080fd5b8335612a23816129c2565b92506020840135612a33816129c2565b929592945050506040919091013590565b803561ffff81168114612a5657600080fd5b919050565b600060208284031215612a6d57600080fd5b61293f82612a44565b60008083601f840112612a8857600080fd5b50813567ffffffffffffffff811115612aa057600080fd5b60208301915083602082850101111561114d57600080fd5b60008060008060608587031215612ace57600080fd5b843567ffffffffffffffff811115612ae557600080fd5b612af187828801612a76565b9095509350612b04905060208601612a44565b9150612b1260408601612a44565b905092959194509250565b60008060408385031215612b3057600080fd5b50508035926020909101359150565b801515811461122a57600080fd5b60008060408385031215612b6057600080fd5b8235612b6b816129c2565b91506020830135612b7b81612b3f565b809150509250929050565b60008060208385031215612b9957600080fd5b823567ffffffffffffffff811115612bb057600080fd5b612bbc85828601612a76565b90969095509350505050565b600060208284031215612bda57600080fd5b813561293f816129c2565b6020808252825182820181905260009190848201906040850190845b81811015612c1d57835183529284019291840191600101612c01565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612c5057600080fd5b813567ffffffffffffffff80821115612c6b57612c6b612c29565b604051601f8301601f19908116603f01168101908282118183101715612c9357612c93612c29565b81604052838152866020858801011115612cac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612ce157600080fd5b8335612cec816129c2565b9250612cfa60208501612a44565b9150604084013567ffffffffffffffff811115612d1657600080fd5b612d2286828701612c3f565b9150509250925092565b60008060008060808587031215612d4257600080fd5b8435612d4d816129c2565b93506020850135612d5d816129c2565b925060408501359150606085013567ffffffffffffffff811115612d8057600080fd5b612d8c87828801612c3f565b91505092959194509250565b60008060408385031215612dab57600080fd5b8235612db6816129c2565b91506020830135612b7b816129c2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612e0d57600080fd5b815161293f81612b3f565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761084757610847612e18565b8082018082111561084757610847612e18565b8181038181111561084757610847612e18565b634e487b7160e01b600052601260045260246000fd5b600082612e9057612e90612e6b565b500490565b600181811c90821680612ea957607f821691505b602082108103612ec957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ac857600081815260208120601f850160051c81016020861015612ef65750805b601f850160051c820191505b81811015612f1557828155600101612f02565b505050505050565b67ffffffffffffffff831115612f3557612f35612c29565b612f4983612f438354612e95565b83612ecf565b6000601f841160018114612f7d5760008515612f655750838201355b600019600387901b1c1916600186901b178355611a83565b600083815260209020601f19861690835b82811015612fae5786850135825560209485019460019092019101612f8e565b5086821015612fcb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161300557613005612e18565b5060010190565b600080845461301a81612e95565b60018281168015613032576001811461304757613076565b60ff1984168752821515830287019450613076565b8860005260208060002060005b8581101561306d5781548a820152908401908201613054565b50505082870194505b50505050835161308a818360208801612946565b64173539b7b760d91b9101908152600501949350505050565b6000602082840312156130b557600080fd5b815161293f816129c2565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b61ffff81811683821601908082111561312c5761312c612e18565b5092915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600061ffff80831681810361319c5761319c612e18565b6001019392505050565b6000826131b5576131b5612e6b565b500690565b6000816131c9576131c9612e18565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129029083018461296a565b60006020828403121561321657600080fd5b815161293f8161290c56fea26469706673582212207104f734a3474b03784ea9c4ab99351f1f07db801c708692f2c22b4cf21ce2e964736f6c63430008110033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000015b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000002ee000000000000000000000000c75a80d33c10ad083fb4692f6ec9030592e504ed00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f706978656c732e6170692e6368696c6c626561722e636c75622f746f6b656e2f000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c8063717d57d311610139578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd1461076d578063cd7c03261461078d578063d3381438146107ad578063e222c7f9146107cd578063e985e9c5146107e2578063f2fde38b1461080257600080fd5b8063a22cb465146106d7578063a591252d146106f7578063b0413beb1461070d578063b88d4fde1461072d578063bd2f52441461074d57600080fd5b80638da5cb5b116100fd5780638da5cb5b1461061257806395d89b41146106305780639652f8fa1461065d57806398a8cffe1461067d5780639b4c27a0146106aa57600080fd5b8063717d57d31461053a578063742a4c9b1461055a578063791a25191461057a5780638462151c1461059a5780638b2c92ab146105c757600080fd5b80633ccfd60b116101c75780636352211e1161018b5780636352211e146104865780636c0360eb146104a65780636cafd0df146104bb57806370a08231146104f7578063715018a61461052557600080fd5b80633ccfd60b146103fc57806342842e0e146104115780634fbf54e81461043157806355f804b31461045157806359eda1b51461047157600080fd5b806318160ddd1161020e57806318160ddd1461034257806323b872dd1461037757806323cf0a2214610397578063252be8ef146103aa5780632a55205a146103bd57600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102c85780630913d98414610300578063095ea7b314610322575b600080fd5b34801561025757600080fd5b5061026b610266366004612922565b610822565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506040805180820190915260168152754368696c6c204265617220436c756220506978656c7360501b60208201525b6040516102779190612996565b3480156102d457600080fd5b506102e86102e33660046129a9565b61084d565b6040516001600160a01b039091168152602001610277565b34801561030c57600080fd5b5061032061031b3660046129a9565b6108e7565b005b34801561032e57600080fd5b5061032061033d3660046129d7565b6109ba565b34801561034e57600080fd5b5060005461036490600160a01b900461ffff1681565b60405161ffff9091168152602001610277565b34801561038357600080fd5b50610320610392366004612a03565b610acd565b6103206103a5366004612a5b565b610c4c565b6103206103b8366004612ab8565b610e3a565b3480156103c957600080fd5b506103dd6103d8366004612b1d565b6110ab565b604080516001600160a01b039093168352602083019190915201610277565b34801561040857600080fd5b50610320611154565b34801561041d57600080fd5b5061032061042c366004612a03565b61122d565b34801561043d57600080fd5b5061032061044c366004612b4d565b6113a1565b34801561045d57600080fd5b5061032061046c366004612b86565b611405565b34801561047d57600080fd5b5061032061144b565b34801561049257600080fd5b506102e86104a13660046129a9565b611498565b3480156104b257600080fd5b506102bb61150f565b3480156104c757600080fd5b50600954600a54600b54600d54909190604080519485526020850193909352918301526060820152608001610277565b34801561050357600080fd5b50610517610512366004612bc8565b61159d565b604051908152602001610277565b34801561053157600080fd5b50610320611624565b34801561054657600080fd5b506103206105553660046129a9565b611669565b34801561056657600080fd5b506103206105753660046129a9565b6116db565b34801561058657600080fd5b506103206105953660046129a9565b611719565b3480156105a657600080fd5b506105ba6105b5366004612bc8565b61178b565b6040516102779190612be5565b3480156105d357600080fd5b506105f0600854600a54600b5460ff808416946101009094041692565b6040805194151585529215156020850152918301526060820152608001610277565b34801561061e57600080fd5b506000546001600160a01b03166102e8565b34801561063c57600080fd5b506040805180820190915260048152630434243560e41b60208201526102bb565b34801561066957600080fd5b5061026b610678366004612ccc565b611886565b34801561068957600080fd5b50610517610698366004612bc8565b600f6020526000908152604090205481565b3480156106b657600080fd5b506105176106c5366004612bc8565b60106020526000908152604090205481565b3480156106e357600080fd5b506103206106f2366004612b4d565b61189b565b34801561070357600080fd5b50610517600e5481565b34801561071957600080fd5b50610320610728366004612bc8565b6118aa565b34801561073957600080fd5b50610320610748366004612d2c565b611907565b34801561075957600080fd5b50610320610768366004612bc8565b611a8a565b34801561077957600080fd5b506102bb6107883660046129a9565b611ae5565b34801561079957600080fd5b506001546102e8906001600160a01b031681565b3480156107b957600080fd5b506103206107c8366004612bc8565b611b96565b3480156107d957600080fd5b50610320611bf1565b3480156107ee57600080fd5b5061026b6107fd366004612d98565b611c47565b34801561080e57600080fd5b5061032061081d366004612bc8565b611d05565b60006001600160e01b0319821663152a902d60e11b1480610847575061084782611dac565b92915050565b6000818152600360205260408120546001600160a01b03166108cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b336108fa6000546001600160a01b031690565b6001600160a01b0316146109205760405162461bcd60e51b81526004016108c290612dc6565b6103e88111156109815760405162461bcd60e51b815260206004820152602660248201527f726f79616c74792063616e6e6f74206265206d6f7265207468616e2031302070604482015265195c98d95b9d60d21b60648201526084016108c2565b600d805490829055604051829082907fb4fb93f70c244a4a5ccc896856ac486b87475e23f8050e29a7c790c456cbddc590600090a35050565b6000818152600360205260409020546001600160a01b03908116908316819003610a305760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108c2565b336001600160a01b0382161480610a4c5750610a4c8133611c47565b610abe5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108c2565b610ac88383611dfc565b505050565b826daaeb6d7670e522a718067333cd4e3b15610c3b57336001600160a01b03821603610b0357610afe848484611e6a565b610c46565b3360009081526007602052604090205460ff1615610b2657610afe848484611e6a565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b999190612dfb565b8015610c1c5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c9190612dfb565b610c3b57604051633b79c77360e21b81523360048201526024016108c2565b610c46848484611e6a565b50505050565b80600954600b548261ffff16821015610ca75760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c7921000000000060448201526064016108c2565b610cb561ffff841682612e2e565b3414610d035760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f72726563742100000000000060448201526064016108c2565b600854610100900460ff16610d5a5760405162461bcd60e51b815260206004820152601e60248201527f5075626c6963206d696e74696e67206973206e6f7420656e61626c656421000060448201526064016108c2565b600b54600003610e1457600e5433600090815260106020526040902054610d869061ffff871690612e45565b1115610deb5760405162461bcd60e51b815260206004820152602e60248201527f43616e2774206d696e74206d6f7265207468616e206d6178206672656520717560448201526d616e7469747920746f6b656e732160901b60648201526084016108c2565b336000908152601060205260408120805461ffff87169290610e0e908490612e45565b90915550505b8361ffff1660096000828254610e2a9190612e58565b90915550610c4690508433611e9b565b81600954600a548261ffff16821015610e955760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c7921000000000060448201526064016108c2565b610ea361ffff841682612e2e565b3414610ef15760405162461bcd60e51b815260206004820152601a60248201527f45544820416d6f756e74206973206e6f7420636f72726563742100000000000060448201526064016108c2565b60085460ff16610f435760405162461bcd60e51b815260206004820152601e60248201527f57686974656c6973742073616c65206973206e6f7420656e61626c656421000060448201526064016108c2565b610f84338589898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fd092505050565b610fc85760405162461bcd60e51b815260206004820152601560248201527455736572206e6f742077686974656c69737465642160581b60448201526064016108c2565b336000908152600f602052604090205461ffff80861691610feb91881690612e45565b11156110545760405162461bcd60e51b815260206004820152603260248201527f43616e2774206d696e74206d6f7265207468616e2077686974656c697374656460448201527120616d6f756e74206f6620746f6b656e732160701b60648201526084016108c2565b8461ffff166009600082825461106a9190612e58565b9091555050336000908152600f60205260408120805461ffff88169290611092908490612e45565b909155506110a290508533611e9b565b50505050505050565b60008281526003602052604081205481906001600160a01b03166111215760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201526620746f6b656e2160c81b60648201526084016108c2565b6000546001600160a01b0316612710600d548561113e9190612e2e565b6111489190612e81565b915091505b9250929050565b336111676000546001600160a01b031690565b6001600160a01b03161461118d5760405162461bcd60e51b81526004016108c290612dc6565b6040516000903390610a2890479084818181858888f193505050503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b505090508061122a5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f207769746864726177207061796d656e7421000000000060448201526064016108c2565b50565b826daaeb6d7670e522a718067333cd4e3b1561139657336001600160a01b0382160361125e57610afe84848461208d565b3360009081526007602052604090205460ff161561128157610afe84848461208d565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f49190612dfb565b80156113775750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113779190612dfb565b61139657604051633b79c77360e21b81523360048201526024016108c2565b610c4684848461208d565b336113b46000546001600160a01b031690565b6001600160a01b0316146113da5760405162461bcd60e51b81526004016108c290612dc6565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b336114186000546001600160a01b031690565b6001600160a01b03161461143e5760405162461bcd60e51b81526004016108c290612dc6565b6002610ac8828483612f1d565b3361145e6000546001600160a01b031690565b6001600160a01b0316146114845760405162461bcd60e51b81526004016108c290612dc6565b6008805460ff19811660ff90911615179055565b6000818152600360205260408120546001600160a01b0316806108475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108c2565b6002805461151c90612e95565b80601f016020809104026020016040519081016040528092919081815260200182805461154890612e95565b80156115955780601f1061156a57610100808354040283529160200191611595565b820191906000526020600020905b81548152906001019060200180831161157857829003601f168201915b505050505081565b60006001600160a01b0382166116085760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108c2565b506001600160a01b031660009081526004602052604090205490565b336116376000546001600160a01b031690565b6001600160a01b03161461165d5760405162461bcd60e51b81526004016108c290612dc6565b61166760006120a8565b565b3361167c6000546001600160a01b031690565b6001600160a01b0316146116a25760405162461bcd60e51b81526004016108c290612dc6565b600a805490829055604051829082907fa1497bc90c48e3a1f7aa6e49f2f6645b740375eb437fad25ba455e12d81c12ea90600090a35050565b336116ee6000546001600160a01b031690565b6001600160a01b0316146117145760405162461bcd60e51b81526004016108c290612dc6565b600e55565b3361172c6000546001600160a01b031690565b6001600160a01b0316146117525760405162461bcd60e51b81526004016108c290612dc6565b600b805490829055604051829082907f2942d24204aedd5f258e57ff591497e39deebe8432cc5fe60afc6e54fcf036a890600090a35050565b6001600160a01b0381166000908152600460205260408120546060918167ffffffffffffffff8111156117c0576117c0612c29565b6040519080825280602002602001820160405280156117e9578160200160208202803683370190505b5090506000826000036117fe57509392505050565b60015b600054600160a01b900461ffff16811161187c57856001600160a01b031661182882611498565b6001600160a01b03160361186a578083838151811061184957611849612fdd565b60209081029190910101528161185e81612ff3565b9250508382101561187c575b8061187481612ff3565b915050611801565b5090949350505050565b6000611893848484611fd0565b949350505050565b6118a63383836120f8565b5050565b336118bd6000546001600160a01b031690565b6001600160a01b0316146118e35760405162461bcd60e51b81526004016108c290612dc6565b6000546001600160a01b90910461ffff16106118fe57600080fd5b61122a816121c6565b836daaeb6d7670e522a718067333cd4e3b15611a7757336001600160a01b0382160361193e57611939858585856122d5565b611a83565b3360009081526007602052604090205460ff161561196257611939858585856122d5565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156119b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d59190612dfb565b8015611a585750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a589190612dfb565b611a7757604051633b79c77360e21b81523360048201526024016108c2565b611a83858585856122d5565b5050505050565b33611a9d6000546001600160a01b031690565b6001600160a01b031614611ac35760405162461bcd60e51b81526004016108c290612dc6565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600360205260409020546060906001600160a01b0316611b645760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108c2565b6002611b6f83612307565b604051602001611b8092919061300c565b6040516020818303038152906040529050919050565b33611ba96000546001600160a01b031690565b6001600160a01b031614611bcf5760405162461bcd60e51b81526004016108c290612dc6565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b33611c046000546001600160a01b031690565b6001600160a01b031614611c2a5760405162461bcd60e51b81526004016108c290612dc6565b6008805461ff001981166101009182900460ff1615909102179055565b60015460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c455279190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd91906130a3565b6001600160a01b031603611cd5576001915050610847565b50506001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b33611d186000546001600160a01b031690565b6001600160a01b031614611d3e5760405162461bcd60e51b81526004016108c290612dc6565b6001600160a01b038116611da35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c2565b61122a816120a8565b60006001600160e01b031982166380ac58cd60e01b1480611ddd57506001600160e01b03198216635b5e139f60e01b145b8061084757506301ffc9a760e01b6001600160e01b0319831614610847565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e3182611498565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e743382612408565b611e905760405162461bcd60e51b81526004016108c2906130c0565b610ac88383836124d4565b600080546001600160a01b0383168252600460205260408220805461ffff600160a01b9093048316939286169290611ed4908490612e45565b90915550600090505b8361ffff16811015611f5e5781611ef381612ff3565b60008181526003602052604080822080546001600160a01b0319166001600160a01b0389169081179091559051929550859350917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480611f5681612ff3565b915050611edd565b5082600060148282829054906101000a900461ffff16611f7e9190613111565b92506101000a81548161ffff021916908361ffff160217905550611fb46000838360405180602001604052806000815250612666565b610ac85760405162461bcd60e51b81526004016108c290613133565b600c5460408051606086901b6bffffffffffffffffffffffff191660208083019190915260f086901b6001600160f01b0319166034830152825160168184030181526036830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a333200000000605684015260728084019190915283518084039091018152609290920190925280519101206000916001600160a01b03169061207b9084612767565b6001600160a01b031614949350505050565b610ac883838360405180602001604052806000815250611907565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b0316036121595760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108c2565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600080546121e090600160a01b900461ffff166001613111565b6001600160a01b0383166000908152600460205260408120805461ffff9390931693509061220d83612ff3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460008054600160a01b900461ffff1690601461228283613185565b91906101000a81548161ffff021916908361ffff160217905550506122b96000838360405180602001604052806000815250612666565b6118a65760405162461bcd60e51b81526004016108c290613133565b6122df3383612408565b6122fb5760405162461bcd60e51b81526004016108c2906130c0565b610c4684848484612774565b60608160000361232e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612358578061234281612ff3565b91506123519050600a83612e81565b9150612332565b60008167ffffffffffffffff81111561237357612373612c29565b6040519080825280601f01601f19166020018201604052801561239d576020820181803683370190505b5090505b8415611893576123b2600183612e58565b91506123bf600a866131a6565b6123ca906030612e45565b60f81b8183815181106123df576123df612fdd565b60200101906001600160f81b031916908160001a905350612401600a86612e81565b94506123a1565b6000818152600360205260408120546001600160a01b03166124815760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108c2565b6000828152600360205260409020546001600160a01b039081169084168114806124c45750836001600160a01b03166124b98461084d565b6001600160a01b0316145b8061189357506118938185611c47565b6000818152600360205260409020546001600160a01b0384811691161461254b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108c2565b6001600160a01b0382166125ad5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108c2565b6125b8600082611dfc565b6001600160a01b03831660009081526004602052604081208054916125dc836131ba565b90915550506001600160a01b038216600090815260046020526040812080549161260583612ff3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b1561275c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126aa9033908990889088906004016131d1565b6020604051808303816000875af19250505080156126e5575060408051601f3d908101601f191682019092526126e291810190613204565b60015b612742573d808015612713576040519150601f19603f3d011682016040523d82523d6000602084013e612718565b606091505b50805160000361273a5760405162461bcd60e51b81526004016108c290613133565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611893565b506001949350505050565b60008061189384846127a7565b61277f8484846124d4565b61278b84848484612666565b610c465760405162461bcd60e51b81526004016108c290613133565b600081516041036127da5760208201516040830151606084015160001a6127d086828585612809565b9350505050610847565b815160400361280157602082015160408301516127f88583836128e2565b92505050610847565b506000610847565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561283b57506000611893565b8360ff16601b1415801561285357508360ff16601c14155b1561286057506000611893565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa1580156128b4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166128d9576000915050611893565b95945050505050565b60006001600160ff1b03821660ff83901c601b0161290286828785612809565b9695505050505050565b6001600160e01b03198116811461122a57600080fd5b60006020828403121561293457600080fd5b813561293f8161290c565b9392505050565b60005b83811015612961578181015183820152602001612949565b50506000910152565b60008151808452612982816020860160208601612946565b601f01601f19169290920160200192915050565b60208152600061293f602083018461296a565b6000602082840312156129bb57600080fd5b5035919050565b6001600160a01b038116811461122a57600080fd5b600080604083850312156129ea57600080fd5b82356129f5816129c2565b946020939093013593505050565b600080600060608486031215612a1857600080fd5b8335612a23816129c2565b92506020840135612a33816129c2565b929592945050506040919091013590565b803561ffff81168114612a5657600080fd5b919050565b600060208284031215612a6d57600080fd5b61293f82612a44565b60008083601f840112612a8857600080fd5b50813567ffffffffffffffff811115612aa057600080fd5b60208301915083602082850101111561114d57600080fd5b60008060008060608587031215612ace57600080fd5b843567ffffffffffffffff811115612ae557600080fd5b612af187828801612a76565b9095509350612b04905060208601612a44565b9150612b1260408601612a44565b905092959194509250565b60008060408385031215612b3057600080fd5b50508035926020909101359150565b801515811461122a57600080fd5b60008060408385031215612b6057600080fd5b8235612b6b816129c2565b91506020830135612b7b81612b3f565b809150509250929050565b60008060208385031215612b9957600080fd5b823567ffffffffffffffff811115612bb057600080fd5b612bbc85828601612a76565b90969095509350505050565b600060208284031215612bda57600080fd5b813561293f816129c2565b6020808252825182820181905260009190848201906040850190845b81811015612c1d57835183529284019291840191600101612c01565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612c5057600080fd5b813567ffffffffffffffff80821115612c6b57612c6b612c29565b604051601f8301601f19908116603f01168101908282118183101715612c9357612c93612c29565b81604052838152866020858801011115612cac57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612ce157600080fd5b8335612cec816129c2565b9250612cfa60208501612a44565b9150604084013567ffffffffffffffff811115612d1657600080fd5b612d2286828701612c3f565b9150509250925092565b60008060008060808587031215612d4257600080fd5b8435612d4d816129c2565b93506020850135612d5d816129c2565b925060408501359150606085013567ffffffffffffffff811115612d8057600080fd5b612d8c87828801612c3f565b91505092959194509250565b60008060408385031215612dab57600080fd5b8235612db6816129c2565b91506020830135612b7b816129c2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612e0d57600080fd5b815161293f81612b3f565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761084757610847612e18565b8082018082111561084757610847612e18565b8181038181111561084757610847612e18565b634e487b7160e01b600052601260045260246000fd5b600082612e9057612e90612e6b565b500490565b600181811c90821680612ea957607f821691505b602082108103612ec957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ac857600081815260208120601f850160051c81016020861015612ef65750805b601f850160051c820191505b81811015612f1557828155600101612f02565b505050505050565b67ffffffffffffffff831115612f3557612f35612c29565b612f4983612f438354612e95565b83612ecf565b6000601f841160018114612f7d5760008515612f655750838201355b600019600387901b1c1916600186901b178355611a83565b600083815260209020601f19861690835b82811015612fae5786850135825560209485019460019092019101612f8e565b5086821015612fcb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161300557613005612e18565b5060010190565b600080845461301a81612e95565b60018281168015613032576001811461304757613076565b60ff1984168752821515830287019450613076565b8860005260208060002060005b8581101561306d5781548a820152908401908201613054565b50505082870194505b50505050835161308a818360208801612946565b64173539b7b760d91b9101908152600501949350505050565b6000602082840312156130b557600080fd5b815161293f816129c2565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b61ffff81811683821601908082111561312c5761312c612e18565b5092915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600061ffff80831681810361319c5761319c612e18565b6001019392505050565b6000826131b5576131b5612e6b565b500690565b6000816131c9576131c9612e18565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129029083018461296a565b60006020828403121561321657600080fd5b815161293f8161290c56fea26469706673582212207104f734a3474b03784ea9c4ab99351f1f07db801c708692f2c22b4cf21ce2e964736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000015b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000002ee000000000000000000000000c75a80d33c10ad083fb4692f6ec9030592e504ed00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f706978656c732e6170692e6368696c6c626561722e636c75622f746f6b656e2f000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _openseaProxyRegistry (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : supply (uint256): 5556
Arg [2] : whitelistSalePrice (uint256): 0
Arg [3] : publicSalePrice (uint256): 10000000000000000
Arg [4] : EIP2981RoyaltyPercentage (uint256): 750
Arg [5] : whitelistSigner (address): 0xc75A80D33C10Ad083FB4692F6eC9030592e504ed
Arg [6] : _baseURI (string): https://pixels.api.chillbear.club/token/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 00000000000000000000000000000000000000000000000000000000000015b4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000002ee
Arg [5] : 000000000000000000000000c75a80d33c10ad083fb4692f6ec9030592e504ed
Arg [6] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [8] : 68747470733a2f2f706978656c732e6170692e6368696c6c626561722e636c75
Arg [9] : 622f746f6b656e2f000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
37640:7807:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43519:241;;;;;;;;;;-1:-1:-1;43519:241:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;43519:241:0;;;;;;;;27282:113;;;;;;;;;;-1:-1:-1;27356:31:0;;;;;;;;;;;;-1:-1:-1;;;27356:31:0;;;;27282:113;;;;;;;:::i;28413:213::-;;;;;;;;;;-1:-1:-1;28413:213:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;28413:213:0;1533:203:1;40318:323:0;;;;;;;;;;-1:-1:-1;40318:323:0;;;;;:::i;:::-;;:::i;:::-;;27953:394;;;;;;;;;;-1:-1:-1;27953:394:0;;;;;:::i;:::-;;:::i;25571:25::-;;;;;;;;;;-1:-1:-1;25571:25:0;;;;-1:-1:-1;;;25571:25:0;;;;;;;;;2371:6:1;2359:19;;;2341:38;;2329:2;2314:18;25571:25:0;2197:188:1;44201:163:0;;;;;;;;;;-1:-1:-1;44201:163:0;;;;;:::i;:::-;;:::i;40870:445::-;;;;;;:::i;:::-;;:::i;41323:519::-;;;;;;:::i;:::-;;:::i;43164:283::-;;;;;;;;;;-1:-1:-1;43164:283:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4559:32:1;;;4541:51;;4623:2;4608:18;;4601:34;;;;4514:18;43164:283:0;4367:274:1;43768:204:0;;;;;;;;;;;;;:::i;44372:171::-;;;;;;;;;;-1:-1:-1;44372:171:0;;;;;:::i;:::-;;:::i;44787:137::-;;;;;;;;;;-1:-1:-1;44787:137:0;;;;;:::i;:::-;;:::i;29444:102::-;;;;;;;;;;-1:-1:-1;29444:102:0;;;;;:::i;:::-;;:::i;43980:107::-;;;;;;;;;;;;;:::i;26984:231::-;;;;;;;;;;-1:-1:-1;26984:231:0;;;;;:::i;:::-;;:::i;25649:21::-;;;;;;;;;;;;;:::i;39166:376::-;;;;;;;;;;-1:-1:-1;39368:7:0;;39407:19;;39455:16;;39509:25;;39455:16;;39407:19;39166:376;;;5802:25:1;;;5858:2;5843:18;;5836:34;;;;5886:18;;;5879:34;5944:2;5929:18;;5922:34;5789:3;5774:19;39166:376:0;5571:391:1;26720:202:0;;;;;;;;;;-1:-1:-1;26720:202:0;;;;;:::i;:::-;;:::i;:::-;;;6365:25:1;;;6353:2;6338:18;26720:202:0;6219:177:1;6320:96:0;;;;;;;;;;;;;:::i;39550:215::-;;;;;;;;;;-1:-1:-1;39550:215:0;;;;;:::i;:::-;;:::i;39988:107::-;;;;;;;;;;-1:-1:-1;39988:107:0;;;;;:::i;:::-;;:::i;39773:207::-;;;;;;;;;;-1:-1:-1;39773:207:0;;;;;:::i;:::-;;:::i;44932:512::-;;;;;;;;;;-1:-1:-1;44932:512:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42339:330::-;;;;;;;;;;;;42507:17;;42597:19;;42645:16;;42507:17;;;;;;42551:14;;;;;42339:330;;;;;7282:14:1;;7275:22;7257:41;;7341:14;;7334:22;7329:2;7314:18;;7307:50;7373:18;;;7366:34;7431:2;7416:18;;7409:34;7244:3;7229:19;42339:330:0;7038:411:1;5671:87:0;;;;;;;;;;-1:-1:-1;5717:7:0;5744:6;-1:-1:-1;;;;;5744:6:0;5671:87;;27464:97;;;;;;;;;;-1:-1:-1;27540:13:0;;;;;;;;;;;;-1:-1:-1;;;27540:13:0;;;;27464:97;;42152:179;;;;;;;;;;-1:-1:-1;42152:179:0;;;;;:::i;:::-;;:::i;38021:47::-;;;;;;;;;;-1:-1:-1;38021:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;38075:48;;;;;;;;;;-1:-1:-1;38075:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;28698:147;;;;;;;;;;-1:-1:-1;28698:147:0;;;;;:::i;:::-;;:::i;37984:28::-;;;;;;;;;;;;;;;;39036:120;;;;;;;;;;-1:-1:-1;39036:120:0;;;;;:::i;:::-;;:::i;44551:228::-;;;;;;;;;;-1:-1:-1;44551:228:0;;;;;:::i;:::-;;:::i;29324:112::-;;;;;;;;;;-1:-1:-1;29324:112:0;;;;;:::i;:::-;;:::i;27632:259::-;;;;;;;;;;-1:-1:-1;27632:259:0;;;;;:::i;:::-;;:::i;25605:35::-;;;;;;;;;;-1:-1:-1;25605:35:0;;;;-1:-1:-1;;;;;25605:35:0;;;40105:125;;;;;;;;;;-1:-1:-1;40105:125:0;;;;;:::i;:::-;;:::i;44095:98::-;;;;;;;;;;;;;:::i;28916:400::-;;;;;;;;;;-1:-1:-1;28916:400:0;;;;;:::i;:::-;;:::i;6571:194::-;;;;;;;;;;-1:-1:-1;6571:194:0;;;;;:::i;:::-;;:::i;43519:241::-;43621:4;-1:-1:-1;;;;;;43658:41:0;;-1:-1:-1;;;43658:41:0;;:94;;;43716:36;43740:11;43716:23;:36::i;:::-;43638:114;43519:241;-1:-1:-1;;43519:241:0:o;28413:213::-;28481:7;32133:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32133:16:0;28501:73;;;;-1:-1:-1;;;28501:73:0;;10106:2:1;28501:73:0;;;10088:21:1;10145:2;10125:18;;;10118:30;10184:34;10164:18;;;10157:62;-1:-1:-1;;;10235:18:1;;;10228:42;10287:19;;28501:73:0;;;;;;;;;-1:-1:-1;28594:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28594:24:0;;28413:213::o;40318:323::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;40424:4:::1;40410:10;:18;;40402:69;;;::::0;-1:-1:-1;;;40402:69:0;;10880:2:1;40402:69:0::1;::::0;::::1;10862:21:1::0;10919:2;10899:18;;;10892:30;10958:34;10938:18;;;10931:62;-1:-1:-1;;;11009:18:1;;;11002:36;11055:19;;40402:69:0::1;10678:402:1::0;40402:69:0::1;40494:25;::::0;;40530:38;;;;40584:49:::1;::::0;40558:10;;40494:25;;40584:49:::1;::::0;40482:9:::1;::::0;40584:49:::1;40391:250;40318:323:::0;:::o;27953:394::-;28028:13;28044:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28044:16:0;;;;28079:11;;;;;28071:57;;;;-1:-1:-1;;;28071:57:0;;11287:2:1;28071:57:0;;;11269:21:1;11326:2;11306:18;;;11299:30;11365:34;11345:18;;;11338:62;-1:-1:-1;;;11416:18:1;;;11409:31;11457:19;;28071:57:0;11085:397:1;28071:57:0;28163:10;-1:-1:-1;;;;;28163:19:0;;;;:58;;;28186:35;28203:5;28210:10;28186:16;:35::i;:::-;28141:164;;;;-1:-1:-1;;;28141:164:0;;11689:2:1;28141:164:0;;;11671:21:1;11728:2;11708:18;;;11701:30;11767:34;11747:18;;;11740:62;11838:26;11818:18;;;11811:54;11882:19;;28141:164:0;11487:420:1;28141:164:0;28318:21;28327:2;28331:7;28318:8;:21::i;:::-;28017:330;27953:394;;:::o;44201:163::-;44302:4;2393:42;3592:43;:47;3588:808;;3879:10;-1:-1:-1;;;;;3871:18:0;;;3867:85;;44319:37:::1;44338:4;44344:2;44348:7;44319:18;:37::i;:::-;3930:7:::0;;3867:85;3987:10;3970:28;;;;:16;:28;;;;;;;;3966:95;;;44319:37:::1;44338:4;44344:2;44348:7;44319:18;:37::i;3966:95::-:0;4121:67;;-1:-1:-1;;;4121:67:0;;4170:4;4121:67;;;12124:34:1;4177:10:0;12174:18:1;;;12167:43;2393:42:0;;4121:40;;12059:18:1;;4121:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;4217:61:0;;-1:-1:-1;;;4217:61:0;;4266:4;4217:61;;;12124:34:1;-1:-1:-1;;;;;12194:15:1;;12174:18;;;12167:43;2393:42:0;;4217:40;;12059:18:1;;4217:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4075:310;;4339:30;;-1:-1:-1;;;4339:30:0;;4358:10;4339:30;;;1679:51:1;1652:18;;4339:30:0;1533:203:1;4075:310:0;44319:37:::1;44338:4;44344:2;44348:7;44319:18;:37::i;:::-;44201:163:::0;;;;:::o;40870:445::-;40922:3;40927:7;;40936:16;;40733:3;40723:13;;:6;:13;;40715:53;;;;-1:-1:-1;;;40715:53:0;;12673:2:1;40715:53:0;;;12655:21:1;12712:2;12692:18;;;12685:30;12751:29;12731:18;;;12724:57;12798:18;;40715:53:0;12471:351:1;40715:53:0;40800:11;;;;:5;:11;:::i;:::-;40787:9;:24;40779:63;;;;-1:-1:-1;;;40779:63:0;;13334:2:1;40779:63:0;;;13316:21:1;13373:2;13353:18;;;13346:30;13412:28;13392:18;;;13385:56;13458:18;;40779:63:0;13132:350:1;40779:63:0;40973:14:::1;::::0;::::1;::::0;::::1;;;40965:57;;;::::0;-1:-1:-1;;;40965:57:0;;13689:2:1;40965:57:0::1;::::0;::::1;13671:21:1::0;13728:2;13708:18;;;13701:30;13767:32;13747:18;;;13740:60;13817:18;;40965:57:0::1;13487:354:1::0;40965:57:0::1;41037:16;;41057:1;41037:21:::0;41033:212:::1;;41121:11;::::0;41100:10:::1;41083:28;::::0;;;:16:::1;:28;::::0;;;;;:34:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:49;;41075:108;;;::::0;-1:-1:-1;;;41075:108:0;;14178:2:1;41075:108:0::1;::::0;::::1;14160:21:1::0;14217:2;14197:18;;;14190:30;14256:34;14236:18;;;14229:62;-1:-1:-1;;;14307:18:1;;;14300:44;14361:19;;41075:108:0::1;13976:410:1::0;41075:108:0::1;41215:10;41198:28;::::0;;;:16:::1;:28;::::0;;;;:35;;::::1;::::0;::::1;::::0;:28;:35:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;41033:212:0::1;41268:3;41257:14;;:7;;:14;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;41282:25:0::1;::::0;-1:-1:-1;41291:3:0;41296:10:::1;41282:8;:25::i;41323:519::-:0;41419:3;41424:7;;41433:19;;40733:3;40723:13;;:6;:13;;40715:53;;;;-1:-1:-1;;;40715:53:0;;12673:2:1;40715:53:0;;;12655:21:1;12712:2;12692:18;;;12685:30;12751:29;12731:18;;;12724:57;12798:18;;40715:53:0;12471:351:1;40715:53:0;40800:11;;;;:5;:11;:::i;:::-;40787:9;:24;40779:63;;;;-1:-1:-1;;;40779:63:0;;13334:2:1;40779:63:0;;;13316:21:1;13373:2;13353:18;;;13346:30;13412:28;13392:18;;;13385:56;13458:18;;40779:63:0;13132:350:1;40779:63:0;41473:17:::1;::::0;::::1;;41465:60;;;::::0;-1:-1:-1;;;41465:60:0;;14726:2:1;41465:60:0::1;::::0;::::1;14708:21:1::0;14765:2;14745:18;;;14738:30;14804:32;14784:18;;;14777:60;14854:18;;41465:60:0::1;14524:354:1::0;41465:60:0::1;41544:39;41559:10;41571:6;41579:3;;41544:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;41544:14:0::1;::::0;-1:-1:-1;;;41544:39:0:i:1;:::-;41536:73;;;::::0;-1:-1:-1;;;41536:73:0;;15085:2:1;41536:73:0::1;::::0;::::1;15067:21:1::0;15124:2;15104:18;;;15097:30;-1:-1:-1;;;15143:18:1;;;15136:51;15204:18;;41536:73:0::1;14883:345:1::0;41536:73:0::1;41644:10;41628:27;::::0;;;:15:::1;:27;::::0;;;;;:43:::1;::::0;;::::1;::::0;:33:::1;::::0;;::::1;::::0;::::1;:::i;:::-;:43;;41620:106;;;::::0;-1:-1:-1;;;41620:106:0;;15435:2:1;41620:106:0::1;::::0;::::1;15417:21:1::0;15474:2;15454:18;;;15447:30;15513:34;15493:18;;;15486:62;-1:-1:-1;;;15564:18:1;;;15557:48;15622:19;;41620:106:0::1;15233:414:1::0;41620:106:0::1;41750:3;41739:14;;:7;;:14;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;41780:10:0::1;41764:27;::::0;;;:15:::1;:27;::::0;;;;:34;;::::1;::::0;::::1;::::0;:27;:34:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;41809:25:0::1;::::0;-1:-1:-1;41818:3:0;41823:10:::1;41809:8;:25::i;:::-;41323:519:::0;;;;;;;:::o;43164:283::-;43246:16;32133;;;:7;:16;;;;;;43246;;-1:-1:-1;;;;;32133:16:0;43298:68;;;;-1:-1:-1;;;43298:68:0;;15854:2:1;43298:68:0;;;15836:21:1;15893:2;15873:18;;;15866:30;15932:34;15912:18;;;15905:62;-1:-1:-1;;;15983:18:1;;;15976:37;16030:19;;43298:68:0;15652:403:1;43298:68:0;5717:7;5744:6;-1:-1:-1;;;;;5744:6:0;43433:5;43405:25;;43393:9;:37;;;;:::i;:::-;:45;;;;:::i;:::-;43377:62;;;;43164:283;;;;;;:::o;43768:204::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;43837:69:::1;::::0;43819:12:::1;::::0;43845:10:::1;::::0;43897:4:::1;::::0;43869:21:::1;::::0;43819:12;43837:69;43819:12;43837:69;43869:21;43845:10;43897:4;43837:69:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43818:88;;;43925:7;43917:47;;;::::0;-1:-1:-1;;;43917:47:0;;16729:2:1;43917:47:0::1;::::0;::::1;16711:21:1::0;16768:2;16748:18;;;16741:30;16807:29;16787:18;;;16780:57;16854:18;;43917:47:0::1;16527:351:1::0;43917:47:0::1;43807:165;43768:204::o:0;44372:171::-;44477:4;2393:42;3592:43;:47;3588:808;;3879:10;-1:-1:-1;;;;;3871:18:0;;;3867:85;;44494:41:::1;44517:4;44523:2;44527:7;44494:22;:41::i;3867:85::-:0;3987:10;3970:28;;;;:16;:28;;;;;;;;3966:95;;;44494:41:::1;44517:4;44523:2;44527:7;44494:22;:41::i;3966:95::-:0;4121:67;;-1:-1:-1;;;4121:67:0;;4170:4;4121:67;;;12124:34:1;4177:10:0;12174:18:1;;;12167:43;2393:42:0;;4121:40;;12059:18:1;;4121:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;4217:61:0;;-1:-1:-1;;;4217:61:0;;4266:4;4217:61;;;12124:34:1;-1:-1:-1;;;;;12194:15:1;;12174:18;;;12167:43;2393:42:0;;4217:40;;12059:18:1;;4217:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4075:310;;4339:30;;-1:-1:-1;;;4339:30:0;;4358:10;4339:30;;;1679:51:1;1652:18;;4339:30:0;1533:203:1;4075:310:0;44494:41:::1;44517:4;44523:2;44527:7;44494:22;:41::i;44787:137::-:0;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44881:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:35;;-1:-1:-1;;44881:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44787:137::o;29444:102::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;29520:7:::1;:18;29530:8:::0;;29520:7;:18:::1;:::i;43980:107::-:0;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;44062:17:::1;::::0;;-1:-1:-1;;44041:38:0;::::1;44062:17;::::0;;::::1;44061:18;44041:38;::::0;;43980:107::o;26984:231::-;27048:7;27084:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27084:16:0;;27111:73;;;;-1:-1:-1;;;27111:73:0;;19528:2:1;27111:73:0;;;19510:21:1;19567:2;19547:18;;;19540:30;19606:34;19586:18;;;19579:62;-1:-1:-1;;;19657:18:1;;;19650:39;19706:19;;27111:73:0;19326:405:1;25649:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26720:202::-;26786:7;-1:-1:-1;;;;;26814:19:0;;26806:74;;;;-1:-1:-1;;;26806:74:0;;19938:2:1;26806:74:0;;;19920:21:1;19977:2;19957:18;;;19950:30;20016:34;19996:18;;;19989:62;-1:-1:-1;;;20067:18:1;;;20060:40;20117:19;;26806:74:0;19736:406:1;26806:74:0;-1:-1:-1;;;;;;26898:16:0;;;;;:9;:16;;;;;;;26720:202::o;6320:96::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;6387:21:::1;6405:1;6387:9;:21::i;:::-;6320:96::o:0;39550:215::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;39636:19:::1;::::0;;39666:32;;;;39714:43:::1;::::0;39688:10;;39636:19;;39714:43:::1;::::0;39624:9:::1;::::0;39714:43:::1;39613:152;39550:215:::0;:::o;39988:107::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;40061:11:::1;:26:::0;39988:107::o;39773:207::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;39860:16:::1;::::0;;39887:29;;;;39932:40:::1;::::0;39906:10;;39860:16;;39932:40:::1;::::0;39848:9:::1;::::0;39932:40:::1;39837:143;39773:207:::0;:::o;44932:512::-;-1:-1:-1;;;;;45031:16:0;;45018:10;45031:16;;;:9;:16;;;;;;44992:13;;45031:16;45081:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45081:17:0;;45058:40;;45109:6;45132:5;45141:1;45132:10;45128:29;;-1:-1:-1;45151:6:0;44932:512;-1:-1:-1;;;44932:512:0:o;45128:29::-;45184:1;45170:243;45192:11;;-1:-1:-1;;;45192:11:0;;;;45187:16;;45170:243;;45243:5;-1:-1:-1;;;;;45229:19:0;:10;45237:1;45229:7;:10::i;:::-;-1:-1:-1;;;;;45229:19:0;;45225:177;;45281:1;45269:6;45276:1;45269:9;;;;;;;;:::i;:::-;;;;;;;;;;:13;45301:3;;;;:::i;:::-;;;;45332:5;45327:1;:10;45323:64;45362:5;45323:64;;45205:3;;;;:::i;:::-;;;;45170:243;;;-1:-1:-1;45430:6:0;;44932:512;-1:-1:-1;;;;44932:512:0:o;42152:179::-;42255:4;42279:44;42294:7;42303;42312:10;42279:14;:44::i;:::-;42272:51;42152:179;-1:-1:-1;;;;42152:179:0:o;28698:147::-;28787:50;28806:10;28818:8;28828;28787:18;:50::i;:::-;28698:147;;:::o;39036:120::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;39111:11:::1;::::0;39125:1:::1;-1:-1:-1::0;;;39111:11:0;;::::1;;;:15;39103:24;;;::::0;::::1;;39138:10;39145:2;39138:6;:10::i;44551:228::-:0;44702:4;2393:42;3592:43;:47;3588:808;;3879:10;-1:-1:-1;;;;;3871:18:0;;;3867:85;;44724:47:::1;44747:4;44753:2;44757:7;44766:4;44724:22;:47::i;:::-;3930:7:::0;;3867:85;3987:10;3970:28;;;;:16;:28;;;;;;;;3966:95;;;44724:47:::1;44747:4;44753:2;44757:7;44766:4;44724:22;:47::i;3966:95::-:0;4121:67;;-1:-1:-1;;;4121:67:0;;4170:4;4121:67;;;12124:34:1;4177:10:0;12174:18:1;;;12167:43;2393:42:0;;4121:40;;12059:18:1;;4121:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;4217:61:0;;-1:-1:-1;;;4217:61:0;;4266:4;4217:61;;;12124:34:1;-1:-1:-1;;;;;12194:15:1;;12174:18;;;12167:43;2393:42:0;;4217:40;;12059:18:1;;4217:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4075:310;;4339:30;;-1:-1:-1;;;4339:30:0;;4358:10;4339:30;;;1679:51:1;1652:18;;4339:30:0;1533:203:1;4075:310:0;44724:47:::1;44747:4;44753:2;44757:7;44766:4;44724:22;:47::i;:::-;44551:228:::0;;;;;:::o;29324:112::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;29401:20:::1;:27:::0;;-1:-1:-1;;;;;;29401:27:0::1;-1:-1:-1::0;;;;;29401:27:0;;;::::1;::::0;;;::::1;::::0;;29324:112::o;27632:259::-;32109:4;32133:16;;;:7;:16;;;;;;27699:13;;-1:-1:-1;;;;;32133:16:0;27725:76;;;;-1:-1:-1;;;27725:76:0;;20621:2:1;27725:76:0;;;20603:21:1;20660:2;20640:18;;;20633:30;20699:34;20679:18;;;20672:62;-1:-1:-1;;;20750:18:1;;;20743:45;20805:19;;27725:76:0;20419:411:1;27725:76:0;27845:7;27854:18;:7;:16;:18::i;:::-;27828:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27814:69;;27632:259;;;:::o;40105:125::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;40188:16:::1;:34:::0;;-1:-1:-1;;;;;;40188:34:0::1;-1:-1:-1::0;;;;;40188:34:0;;;::::1;::::0;;;::::1;::::0;;40105:125::o;44095:98::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;44171:14:::1;::::0;;-1:-1:-1;;44153:32:0;::::1;44171:14;::::0;;;::::1;;;44170:15;44153:32:::0;;::::1;;::::0;;44095:98::o;28916:400::-;29129:20;;29173:28;;-1:-1:-1;;;29173:28:0;;-1:-1:-1;;;;;1697:32:1;;;29173:28:0;;;1679:51:1;29005:4:0;;29129:20;;;29165:49;;;;29129:20;;29173:21;;1652:18:1;;29173:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29165:49:0;;29161:93;;29238:4;29231:11;;;;;29161:93;-1:-1:-1;;;;;;;29273:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28916:400::o;6571:194::-;5902:10;5891:7;5717;5744:6;-1:-1:-1;;;;;5744:6:0;;5671:87;5891:7;-1:-1:-1;;;;;5891:21:0;;5883:66;;;;-1:-1:-1;;;5883:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6662:22:0;::::1;6654:73;;;::::0;-1:-1:-1;;;6654:73:0;;22514:2:1;6654:73:0::1;::::0;::::1;22496:21:1::0;22553:2;22533:18;;;22526:30;22592:34;22572:18;;;22565:62;-1:-1:-1;;;22643:18:1;;;22636:36;22689:19;;6654:73:0::1;22312:402:1::0;6654:73:0::1;6738:19;6748:8;6738:9;:19::i;26351:305::-:0;26453:4;-1:-1:-1;;;;;;26490:40:0;;-1:-1:-1;;;26490:40:0;;:105;;-1:-1:-1;;;;;;;26547:48:0;;-1:-1:-1;;;26547:48:0;26490:105;:158;;;-1:-1:-1;;;;;;;;;;18645:40:0;;;26612:36;18536:157;35478:174;35553:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35553:29:0;-1:-1:-1;;;;;35553:29:0;;;;;;;;:24;;35607:23;35553:24;35607:14;:23::i;:::-;-1:-1:-1;;;;;35598:46:0;;;;;;;;;;;35478:174;;:::o;29613:337::-;29808:39;29827:10;29839:7;29808:18;:39::i;:::-;29800:101;;;;-1:-1:-1;;;29800:101:0;;;;;;;:::i;:::-;29914:28;29924:4;29930:2;29934:7;29914:9;:28::i;32687:559::-;32749:12;32764:11;;-1:-1:-1;;;;;32788:13:0;;;;:9;:13;;;;;:20;;32764:11;-1:-1:-1;;;32764:11:0;;;;;;32788:20;;;;32749:12;32788:20;;;;;:::i;:::-;;;;-1:-1:-1;32826:6:0;;-1:-1:-1;32821:154:0;32838:3;32834:7;;:1;:7;32821:154;;;32863:9;;;;:::i;:::-;32887:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32887:21:0;-1:-1:-1;;;;;32887:21:0;;;;;;;;32928:33;;32887:16;;-1:-1:-1;32887:16:0;;-1:-1:-1;32887:21:0;32928:33;;32887:16;;32928:33;32843:3;;;;:::i;:::-;;;;32821:154;;;;33002:3;32987:11;;:18;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33040:51;33071:1;33075:2;33079:7;33040:51;;;;;;;;;;;;:22;:51::i;:::-;33018:151;;;;-1:-1:-1;;;33018:151:0;;;;;;;:::i;41850:294::-;42120:16;;42044:34;;;23904:2:1;23900:15;;;-1:-1:-1;;23896:53:1;42044:34:0;;;;23884:66:1;;;;24006:3;23984:16;;;-1:-1:-1;;;;;;23980:38:1;23966:12;;;23959:60;42044:34:0;;;;;;;;;24035:12:1;;;42044:34:0;;42034:45;;;;;;27086:66:1;14375:58:0;;;27074:79:1;27169:12;;;;27162:28;;;;14375:58:0;;;;;;;;;;27206:12:1;;;;14375:58:0;;;14365:69;;;;;-1:-1:-1;;;;;;;42120:16:0;;41977:139;;42095:10;41977:13;:139::i;:::-;-1:-1:-1;;;;;41977:159:0;;;41850:294;-1:-1:-1;;;;41850:294:0:o;30021:185::-;30159:39;30176:4;30182:2;30186:7;30159:39;;;;;;;;;;;;:16;:39::i;6773:173::-;6829:16;6848:6;;-1:-1:-1;;;;;6865:17:0;;;-1:-1:-1;;;;;;6865:17:0;;;;;;6898:40;;6848:6;;;;;;;6898:40;;6829:16;6898:40;6818:128;6773:173;:::o;35794:315::-;35949:8;-1:-1:-1;;;;;35940:17:0;:5;-1:-1:-1;;;;;35940:17:0;;35932:55;;;;-1:-1:-1;;;35932:55:0;;24260:2:1;35932:55:0;;;24242:21:1;24299:2;24279:18;;;24272:30;24338:27;24318:18;;;24311:55;24383:18;;35932:55:0;24058:349:1;35932:55:0;-1:-1:-1;;;;;35998:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35998:46:0;;;;;;;;;;36060:41;;540::1;;;36060::0;;513:18:1;36060:41:0;;;;;;;35794:315;;;:::o;34129:383::-;34177:12;34192:11;;:15;;-1:-1:-1;;;34192:11:0;;;;34206:1;34192:15;:::i;:::-;-1:-1:-1;;;;;34220:13:0;;;;;;:9;:13;;;;;:15;;34177:30;;;;;;-1:-1:-1;34220:13:0;:15;;;:::i;:::-;;;;-1:-1:-1;;34246:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34246:21:0;-1:-1:-1;;;;;34246:21:0;;;;;;;;34283:33;;34246:16;;;34283:33;;34246:16;;34283:33;34327:11;:13;;-1:-1:-1;;;34327:13:0;;;;;:11;:13;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34375:51;34406:1;34410:2;34414:7;34375:51;;;;;;;;;;;;:22;:51::i;:::-;34353:151;;;;-1:-1:-1;;;34353:151:0;;;;;;;:::i;30277:326::-;30452:39;30471:10;30483:7;30452:18;:39::i;:::-;30444:101;;;;-1:-1:-1;;;30444:101:0;;;;;;;:::i;:::-;30556:39;30570:4;30576:2;30580:7;30589:5;30556:13;:39::i;7175:723::-;7231:13;7452:5;7461:1;7452:10;7448:53;;-1:-1:-1;;7479:10:0;;;;;;;;;;;;-1:-1:-1;;;7479:10:0;;;;;7175:723::o;7448:53::-;7526:5;7511:12;7567:78;7574:9;;7567:78;;7600:8;;;;:::i;:::-;;-1:-1:-1;7623:10:0;;-1:-1:-1;7631:2:0;7623:10;;:::i;:::-;;;7567:78;;;7655:19;7687:6;7677:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7677:17:0;;7655:39;;7705:154;7712:10;;7705:154;;7739:11;7749:1;7739:11;;:::i;:::-;;-1:-1:-1;7808:10:0;7816:2;7808:5;:10;:::i;:::-;7795:24;;:2;:24;:::i;:::-;7782:39;;7765:6;7772;7765:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7765:56:0;;;;;;;;-1:-1:-1;7836:11:0;7845:2;7836:11;;:::i;:::-;;;7705:154;;32338:341;32431:4;32133:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32133:16:0;32448:73;;;;-1:-1:-1;;;32448:73:0;;24933:2:1;32448:73:0;;;24915:21:1;24972:2;24952:18;;;24945:30;25011:34;24991:18;;;24984:62;-1:-1:-1;;;25062:18:1;;;25055:42;25114:19;;32448:73:0;24731:408:1;32448:73:0;32532:13;32548:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32548:16:0;;;;32583;;;;;:51;;;32627:7;-1:-1:-1;;;;;32603:31:0;:20;32615:7;32603:11;:20::i;:::-;-1:-1:-1;;;;;32603:31:0;;32583:51;:87;;;;32638:32;32655:5;32662:7;32638:16;:32::i;34849:511::-;34981:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;34981:24:0;;;:16;;:24;34973:74;;;;-1:-1:-1;;;34973:74:0;;25346:2:1;34973:74:0;;;25328:21:1;25385:2;25365:18;;;25358:30;25424:34;25404:18;;;25397:62;-1:-1:-1;;;25475:18:1;;;25468:35;25520:19;;34973:74:0;25144:401:1;34973:74:0;-1:-1:-1;;;;;35066:16:0;;35058:65;;;;-1:-1:-1;;;35058:65:0;;25752:2:1;35058:65:0;;;25734:21:1;25791:2;25771:18;;;25764:30;25830:34;25810:18;;;25803:62;-1:-1:-1;;;25881:18:1;;;25874:34;25925:19;;35058:65:0;25550:400:1;35058:65:0;35188:29;35205:1;35209:7;35188:8;:29::i;:::-;-1:-1:-1;;;;;35230:15:0;;;;;;:9;:15;;;;;:17;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;35258:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;35286:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35286:21:0;-1:-1:-1;;;;;35286:21:0;;;;;;;;;35325:27;;35286:16;;35325:27;;;;;;;34849:511;;;:::o;36674:797::-;36829:4;-1:-1:-1;;;;;36850:13:0;;15516:20;15564:8;36846:618;;36886:70;;-1:-1:-1;;;36886:70:0;;-1:-1:-1;;;;;36886:36:0;;;;;:70;;36923:10;;36935:4;;36941:7;;36950:5;;36886:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36886:70:0;;;;;;;;-1:-1:-1;;36886:70:0;;;;;;;;;;;;:::i;:::-;;;36882:527;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37126:6;:13;37143:1;37126:18;37122:272;;37169:60;;-1:-1:-1;;;37169:60:0;;;;;;;:::i;37122:272::-;37344:6;37338:13;37329:6;37325:2;37321:15;37314:38;36882:527;-1:-1:-1;;;;;;37007:51:0;-1:-1:-1;;;37007:51:0;;-1:-1:-1;37000:58:0;;36846:618;-1:-1:-1;37448:4:0;36674:797;;;;;;:::o;11368:182::-;11446:7;11467:17;11488:27;11499:4;11505:9;11488:10;:27::i;31485:315::-;31642:28;31652:4;31658:2;31662:7;31642:9;:28::i;:::-;31689:48;31712:4;31718:2;31722:7;31731:5;31689:22;:48::i;:::-;31681:111;;;;-1:-1:-1;;;31681:111:0;;;;;;;:::i;9309:1257::-;9390:7;9610:9;:16;9630:2;9610:22;9606:953;;9906:4;9891:20;;9885:27;9956:4;9941:20;;9935:27;10014:4;9999:20;;9993:27;9649:9;9985:36;10057:25;10068:4;9985:36;9885:27;9935;10057:10;:25::i;:::-;10050:32;;;;;;;9606:953;10104:9;:16;10124:2;10104:22;10100:459;;10379:4;10364:20;;10358:27;10430:4;10415:20;;10409:27;10472:23;10483:4;10358:27;10409;10472:10;:23::i;:::-;10465:30;;;;;;10100:459;-1:-1:-1;10544:1:0;10528:19;;12372:1501;12503:7;13423:66;13410:79;;13406:131;;;-1:-1:-1;13522:1:0;13506:19;;13406:131;13551:1;:7;;13556:2;13551:7;;:18;;;;;13562:1;:7;;13567:2;13562:7;;13551:18;13547:70;;;-1:-1:-1;13602:1:0;13586:19;;13547:70;13731:24;;;13714:14;13731:24;;;;;;;;;27456:25:1;;;27529:4;27517:17;;27497:18;;;27490:45;;;;27551:18;;;27544:34;;;27594:18;;;27587:34;;;13731:24:0;;27428:19:1;;13731:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13731:24:0;;-1:-1:-1;;13731:24:0;;;-1:-1:-1;;;;;;;13770:20:0;;13766:72;;13823:1;13807:19;;;;;13766:72;13858:6;12372:1501;-1:-1:-1;;;;;12372:1501:0:o;11813:377::-;11927:7;-1:-1:-1;;;;;12014:75:0;;12116:3;12112:12;;;12126:2;12108:21;12157:25;12168:4;12108:21;12177:1;12014:75;12157:10;:25::i;:::-;12150:32;11813:377;-1:-1:-1;;;;;;11813:377:0: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:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:131::-;-1:-1:-1;;;;;1816:31:1;;1806:42;;1796:70;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;2390:456::-;2467:6;2475;2483;2536:2;2524:9;2515:7;2511:23;2507:32;2504:52;;;2552:1;2549;2542:12;2504:52;2591:9;2578:23;2610:31;2635:5;2610:31;:::i;:::-;2660:5;-1:-1:-1;2717:2:1;2702:18;;2689:32;2730:33;2689:32;2730:33;:::i;:::-;2390:456;;2782:7;;-1:-1:-1;;;2836:2:1;2821:18;;;;2808:32;;2390:456::o;2851:159::-;2918:20;;2978:6;2967:18;;2957:29;;2947:57;;3000:1;2997;2990:12;2947:57;2851:159;;;:::o;3015:184::-;3073:6;3126:2;3114:9;3105:7;3101:23;3097:32;3094:52;;;3142:1;3139;3132:12;3094:52;3165:28;3183:9;3165:28;:::i;3204:347::-;3255:8;3265:6;3319:3;3312:4;3304:6;3300:17;3296:27;3286:55;;3337:1;3334;3327:12;3286:55;-1:-1:-1;3360:20:1;;3403:18;3392:30;;3389:50;;;3435:1;3432;3425:12;3389:50;3472:4;3464:6;3460:17;3448:29;;3524:3;3517:4;3508:6;3500;3496:19;3492:30;3489:39;3486:59;;;3541:1;3538;3531:12;3556:553;3642:6;3650;3658;3666;3719:2;3707:9;3698:7;3694:23;3690:32;3687:52;;;3735:1;3732;3725:12;3687:52;3775:9;3762:23;3808:18;3800:6;3797:30;3794:50;;;3840:1;3837;3830:12;3794:50;3879:58;3929:7;3920:6;3909:9;3905:22;3879:58;:::i;:::-;3956:8;;-1:-1:-1;3853:84:1;-1:-1:-1;4010:37:1;;-1:-1:-1;4043:2:1;4028:18;;4010:37;:::i;:::-;4000:47;;4066:37;4099:2;4088:9;4084:18;4066:37;:::i;:::-;4056:47;;3556:553;;;;;;;:::o;4114:248::-;4182:6;4190;4243:2;4231:9;4222:7;4218:23;4214:32;4211:52;;;4259:1;4256;4249:12;4211:52;-1:-1:-1;;4282:23:1;;;4352:2;4337:18;;;4324:32;;-1:-1:-1;4114:248:1:o;4646:118::-;4732:5;4725:13;4718:21;4711:5;4708:32;4698:60;;4754:1;4751;4744:12;4769:382;4834:6;4842;4895:2;4883:9;4874:7;4870:23;4866:32;4863:52;;;4911:1;4908;4901:12;4863:52;4950:9;4937:23;4969:31;4994:5;4969:31;:::i;:::-;5019:5;-1:-1:-1;5076:2:1;5061:18;;5048:32;5089:30;5048:32;5089:30;:::i;:::-;5138:7;5128:17;;;4769:382;;;;;:::o;5156:410::-;5227:6;5235;5288:2;5276:9;5267:7;5263:23;5259:32;5256:52;;;5304:1;5301;5294:12;5256:52;5344:9;5331:23;5377:18;5369:6;5366:30;5363:50;;;5409:1;5406;5399:12;5363:50;5448:58;5498:7;5489:6;5478:9;5474:22;5448:58;:::i;:::-;5525:8;;5422:84;;-1:-1:-1;5156:410:1;-1:-1:-1;;;;5156:410:1:o;5967:247::-;6026:6;6079:2;6067:9;6058:7;6054:23;6050:32;6047:52;;;6095:1;6092;6085:12;6047:52;6134:9;6121:23;6153:31;6178:5;6153:31;:::i;6401:632::-;6572:2;6624:21;;;6694:13;;6597:18;;;6716:22;;;6543:4;;6572:2;6795:15;;;;6769:2;6754:18;;;6543:4;6838:169;6852:6;6849:1;6846:13;6838:169;;;6913:13;;6901:26;;6982:15;;;;6947:12;;;;6874:1;6867:9;6838:169;;;-1:-1:-1;7024:3:1;;6401:632;-1:-1:-1;;;;;;6401:632:1:o;7454:127::-;7515:10;7510:3;7506:20;7503:1;7496:31;7546:4;7543:1;7536:15;7570:4;7567:1;7560:15;7586:718;7628:5;7681:3;7674:4;7666:6;7662:17;7658:27;7648:55;;7699:1;7696;7689:12;7648:55;7735:6;7722:20;7761:18;7798:2;7794;7791:10;7788:36;;;7804:18;;:::i;:::-;7879:2;7873:9;7847:2;7933:13;;-1:-1:-1;;7929:22:1;;;7953:2;7925:31;7921:40;7909:53;;;7977:18;;;7997:22;;;7974:46;7971:72;;;8023:18;;:::i;:::-;8063:10;8059:2;8052:22;8098:2;8090:6;8083:18;8144:3;8137:4;8132:2;8124:6;8120:15;8116:26;8113:35;8110:55;;;8161:1;8158;8151:12;8110:55;8225:2;8218:4;8210:6;8206:17;8199:4;8191:6;8187:17;8174:54;8272:1;8265:4;8260:2;8252:6;8248:15;8244:26;8237:37;8292:6;8283:15;;;;;;7586:718;;;;:::o;8309:527::-;8394:6;8402;8410;8463:2;8451:9;8442:7;8438:23;8434:32;8431:52;;;8479:1;8476;8469:12;8431:52;8518:9;8505:23;8537:31;8562:5;8537:31;:::i;:::-;8587:5;-1:-1:-1;8611:37:1;8644:2;8629:18;;8611:37;:::i;:::-;8601:47;;8699:2;8688:9;8684:18;8671:32;8726:18;8718:6;8715:30;8712:50;;;8758:1;8755;8748:12;8712:50;8781:49;8822:7;8813:6;8802:9;8798:22;8781:49;:::i;:::-;8771:59;;;8309:527;;;;;:::o;8841:665::-;8936:6;8944;8952;8960;9013:3;9001:9;8992:7;8988:23;8984:33;8981:53;;;9030:1;9027;9020:12;8981:53;9069:9;9056:23;9088:31;9113:5;9088:31;:::i;:::-;9138:5;-1:-1:-1;9195:2:1;9180:18;;9167:32;9208:33;9167:32;9208:33;:::i;:::-;9260:7;-1:-1:-1;9314:2:1;9299:18;;9286:32;;-1:-1:-1;9369:2:1;9354:18;;9341:32;9396:18;9385:30;;9382:50;;;9428:1;9425;9418:12;9382:50;9451:49;9492:7;9483:6;9472:9;9468:22;9451:49;:::i;:::-;9441:59;;;8841:665;;;;;;;:::o;9511:388::-;9579:6;9587;9640:2;9628:9;9619:7;9615:23;9611:32;9608:52;;;9656:1;9653;9646:12;9608:52;9695:9;9682:23;9714:31;9739:5;9714:31;:::i;:::-;9764:5;-1:-1:-1;9821:2:1;9806:18;;9793:32;9834:33;9793:32;9834:33;:::i;10317:356::-;10519:2;10501:21;;;10538:18;;;10531:30;10597:34;10592:2;10577:18;;10570:62;10664:2;10649:18;;10317:356::o;12221:245::-;12288:6;12341:2;12329:9;12320:7;12316:23;12312:32;12309:52;;;12357:1;12354;12347:12;12309:52;12389:9;12383:16;12408:28;12430:5;12408:28;:::i;12827:127::-;12888:10;12883:3;12879:20;12876:1;12869:31;12919:4;12916:1;12909:15;12943:4;12940:1;12933:15;12959:168;13032:9;;;13063;;13080:15;;;13074:22;;13060:37;13050:71;;13101:18;;:::i;13846:125::-;13911:9;;;13932:10;;;13929:36;;;13945:18;;:::i;14391:128::-;14458:9;;;14479:11;;;14476:37;;;14493:18;;:::i;16060:127::-;16121:10;16116:3;16112:20;16109:1;16102:31;16152:4;16149:1;16142:15;16176:4;16173:1;16166:15;16192:120;16232:1;16258;16248:35;;16263:18;;:::i;:::-;-1:-1:-1;16297:9:1;;16192:120::o;16883:380::-;16962:1;16958:12;;;;17005;;;17026:61;;17080:4;17072:6;17068:17;17058:27;;17026:61;17133:2;17125:6;17122:14;17102:18;17099:38;17096:161;;17179:10;17174:3;17170:20;17167:1;17160:31;17214:4;17211:1;17204:15;17242:4;17239:1;17232:15;17096:161;;16883:380;;;:::o;17394:545::-;17496:2;17491:3;17488:11;17485:448;;;17532:1;17557:5;17553:2;17546:17;17602:4;17598:2;17588:19;17672:2;17660:10;17656:19;17653:1;17649:27;17643:4;17639:38;17708:4;17696:10;17693:20;17690:47;;;-1:-1:-1;17731:4:1;17690:47;17786:2;17781:3;17777:12;17774:1;17770:20;17764:4;17760:31;17750:41;;17841:82;17859:2;17852:5;17849:13;17841:82;;;17904:17;;;17885:1;17874:13;17841:82;;;17845:3;;;17394:545;;;:::o;18115:1206::-;18239:18;18234:3;18231:27;18228:53;;;18261:18;;:::i;:::-;18290:94;18380:3;18340:38;18372:4;18366:11;18340:38;:::i;:::-;18334:4;18290:94;:::i;:::-;18410:1;18435:2;18430:3;18427:11;18452:1;18447:616;;;;19107:1;19124:3;19121:93;;;-1:-1:-1;19180:19:1;;;19167:33;19121:93;-1:-1:-1;;18072:1:1;18068:11;;;18064:24;18060:29;18050:40;18096:1;18092:11;;;18047:57;19227:78;;18420:895;;18447:616;17341:1;17334:14;;;17378:4;17365:18;;-1:-1:-1;;18483:17:1;;;18584:9;18606:229;18620:7;18617:1;18614:14;18606:229;;;18709:19;;;18696:33;18681:49;;18816:4;18801:20;;;;18769:1;18757:14;;;;18636:12;18606:229;;;18610:3;18863;18854:7;18851:16;18848:159;;;18987:1;18983:6;18977:3;18971;18968:1;18964:11;18960:21;18956:34;18952:39;18939:9;18934:3;18930:19;18917:33;18913:79;18905:6;18898:95;18848:159;;;19050:1;19044:3;19041:1;19037:11;19033:19;19027:4;19020:33;18420:895;;18115:1206;;;:::o;20147:127::-;20208:10;20203:3;20199:20;20196:1;20189:31;20239:4;20236:1;20229:15;20263:4;20260:1;20253:15;20279:135;20318:3;20339:17;;;20336:43;;20359:18;;:::i;:::-;-1:-1:-1;20406:1:1;20395:13;;20279:135::o;20835:1187::-;21112:3;21141:1;21174:6;21168:13;21204:36;21230:9;21204:36;:::i;:::-;21259:1;21276:18;;;21303:133;;;;21450:1;21445:356;;;;21269:532;;21303:133;-1:-1:-1;;21336:24:1;;21324:37;;21409:14;;21402:22;21390:35;;21381:45;;;-1:-1:-1;21303:133:1;;21445:356;21476:6;21473:1;21466:17;21506:4;21551:2;21548:1;21538:16;21576:1;21590:165;21604:6;21601:1;21598:13;21590:165;;;21682:14;;21669:11;;;21662:35;21725:16;;;;21619:10;;21590:165;;;21594:3;;;21784:6;21779:3;21775:16;21768:23;;21269:532;;;;;21832:6;21826:13;21848:68;21907:8;21902:3;21895:4;21887:6;21883:17;21848:68;:::i;:::-;-1:-1:-1;;;21938:18:1;;21965:22;;;22014:1;22003:13;;20835:1187;-1:-1:-1;;;;20835:1187:1:o;22027:280::-;22126:6;22179:2;22167:9;22158:7;22154:23;22150:32;22147:52;;;22195:1;22192;22185:12;22147:52;22227:9;22221:16;22246:31;22271:5;22246:31;:::i;22719:413::-;22921:2;22903:21;;;22960:2;22940:18;;;22933:30;22999:34;22994:2;22979:18;;22972:62;-1:-1:-1;;;23065:2:1;23050:18;;23043:47;23122:3;23107:19;;22719:413::o;23137:168::-;23204:6;23230:10;;;23242;;;23226:27;;23265:11;;;23262:37;;;23279:18;;:::i;:::-;23262:37;23137:168;;;;:::o;23310:414::-;23512:2;23494:21;;;23551:2;23531:18;;;23524:30;23590:34;23585:2;23570:18;;23563:62;-1:-1:-1;;;23656:2:1;23641:18;;23634:48;23714:3;23699:19;;23310:414::o;24412:197::-;24450:3;24478:6;24519:2;24512:5;24508:14;24546:2;24537:7;24534:15;24531:41;;24552:18;;:::i;:::-;24601:1;24588:15;;24412:197;-1:-1:-1;;;24412:197:1:o;24614:112::-;24646:1;24672;24662:35;;24677:18;;:::i;:::-;-1:-1:-1;24711:9:1;;24614:112::o;25955:136::-;25994:3;26022:5;26012:39;;26031:18;;:::i;:::-;-1:-1:-1;;;26067:18:1;;25955:136::o;26096:489::-;-1:-1:-1;;;;;26365:15:1;;;26347:34;;26417:15;;26412:2;26397:18;;26390:43;26464:2;26449:18;;26442:34;;;26512:3;26507:2;26492:18;;26485:31;;;26290:4;;26533:46;;26559:19;;26551:6;26533:46;:::i;26590:249::-;26659:6;26712:2;26700:9;26691:7;26687:23;26683:32;26680:52;;;26728:1;26725;26718:12;26680:52;26760:9;26754:16;26779:30;26803:5;26779:30;:::i
Swarm Source
ipfs://7104f734a3474b03784ea9c4ab99351f1f07db801c708692f2c22b4cf21ce2e9
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.