ERC-721
Overview
Max Total Supply
255 SLAY NFT
Holders
70
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 SLAY NFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
SLAYERSNFT
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-12-14 */ /** *Submitted for verification at Etherscan.io on 2024-11-14 */ //SPDX-License-Identifier: MIT pragma solidity 0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @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; } } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @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); } /** * @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); } 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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC20 { function totalSupply() external view returns (uint256); function symbol() external view returns(string memory); function name() external view returns(string memory); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Returns the number of decimal places */ function decimals() external view returns (uint8); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable { address private owner; // event for EVM logging event OwnerSet(address indexed oldOwner, address indexed newOwner); // modifier to check if caller is owner modifier onlyOwner() { // If the first argument of 'require' evaluates to 'false', execution terminates and all // changes to the state and to Ether balances are reverted. // This used to consume all gas in old EVM versions, but not anymore. // It is often a good idea to use 'require' to check if functions are called correctly. // As a second argument, you can also provide an explanation about what went wrong. require(msg.sender == owner, "Caller is not owner"); _; } /** * @dev Set contract deployer as owner */ constructor() { owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor emit OwnerSet(address(0), owner); } /** * @dev Change owner * @param newOwner address of new owner */ function changeOwner(address newOwner) public onlyOwner { emit OwnerSet(owner, newOwner); owner = newOwner; } /** * @dev Return owner address * @return address of owner */ function getOwner() external view returns (address) { return owner; } } contract SLAYERSNFT is Context, ERC165, IERC721, IERC721Metadata, ReentrancyGuard, Ownable { using Address for address; using SafeMath for uint256; // Token name string private constant _name = "Vampire Slayers NFT"; // Token symbol string private constant _symbol = "SLAY NFT"; // total number of NFTs Minted uint256 private _totalSupply; // current tokenID to mint at uint256 public currentSupplyIndex; // mint cap uint256 public standard_mint_remaining = 1_200; // $50 each uint256 public limited_mint_remaining = 400; // $100 each // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Mapping from tokenId to rarity mapping(uint256 => bool) public isRare; // cost in ETH to mint a basic NFT uint256 public cost = 0.016 ether; uint256 public limitedCost = 0.032 ether; // base URI string private baseURI = "https://ipfs.io/ipfs/Qmf1FCAE1zmuf3vzBb1tSV6NXC5XKjcVXUMeEcKt63sQPD/"; string private limitedBaseURI = "https://ipfs.io/ipfs/bafybeifrv6nvi77zq6r7eghaaigixuxuf6wahisttybjedlsd2uogilkdy/"; string private ending = ".json"; // Enable Trading bool public tradingEnabled; // Mint Recipient address public mintRecipient; constructor(address _mintRecipient) { mintRecipient = _mintRecipient; tradingEnabled = true; } //////////////////////////////////////////////// /////////// OWNER FUNCTIONS /////////// //////////////////////////////////////////////// function resumeTrading() external onlyOwner { tradingEnabled = true; } function pauseTrading() external onlyOwner { tradingEnabled = false; } function withdraw() external onlyOwner { (bool s,) = payable(msg.sender).call{value: address(this).balance}(""); require(s); } function withdrawToken(address token_) external onlyOwner { require(token_ != address(0), 'Zero Address'); IERC20(token_).transfer(msg.sender, IERC20(token_).balanceOf(address(this))); } function setBaseURI(string calldata newURI) external onlyOwner { baseURI = newURI; } function setLimitedBaseURI(string calldata newURI) external onlyOwner { limitedBaseURI = newURI; } function setURIExtention(string calldata newExtention) external onlyOwner { ending = newExtention; } function setMintRecipient(address mintRecipient_) external onlyOwner { mintRecipient = mintRecipient_; } function setCost(uint256 cost_) external onlyOwner { cost = cost_; } function setLimitedCost(uint256 cost_) external onlyOwner { limitedCost = cost_; } function setStandardMintRemaining(uint256 newRemaining) external onlyOwner { standard_mint_remaining = newRemaining; } function setLimitedMintRemaining(uint256 newRemaining) external onlyOwner { limited_mint_remaining = newRemaining; } /** Example: [ 0x123...abc, 0x456...def ] [ 2, 3 ] Gives the result: 0x123...abc gets 2 NFTs 0x456...def gets 3 NFTs */ function ownerMint(address[] calldata tos, uint256[] calldata nums, bool[] calldata _isRare) external onlyOwner { uint addrLen = tos.length; require(addrLen == nums.length, 'Invalid Lengths'); for (uint i = 0; i < addrLen;) { for (uint j = 0; j < nums[i];) { _safeMint(tos[i], currentSupplyIndex, _isRare[i]); unchecked { ++j; } } unchecked { ++i; } } } function backMint(uint256 startIndex, uint256 endIndex) external onlyOwner { address old = 0xd024f7Df7506310614792F562356505A1AaFd45d; uint256 numNFTs = SLAYERSNFT(payable(old)).totalSupply(); if (endIndex > numNFTs) { endIndex = numNFTs; } for (uint i = startIndex; i < endIndex;) { address owner_ = SLAYERSNFT(payable(old)).ownerOf(i); bool rare = SLAYERSNFT(payable(old)).isRare(i); _mint(owner_, i, rare); unchecked { ++i; } } } //////////////////////////////////////////////// /////////// PUBLIC FUNCTIONS /////////// //////////////////////////////////////////////// /** * Mints `numberOfMints` NFTs To Caller */ function mint(address to, uint256 num, bool rare) external payable { require( tradingEnabled && mintRecipient != address(0), 'Trading Not Enabled' ); require( num > 0, 'Cannot Mint Zero' ); require( to != address(0), 'Zero Address' ); // determine cost in ETH uint256 mintCost = rare ? limitedCost * num : cost * num; // ensure user sent correct value require( msg.value >= mintCost, 'Insufficient Value' ); // send full value to the mint recipient (bool s,) = payable(mintRecipient).call{value: msg.value}(""); require(s, 'MintRecipient Payment Failed'); // mint the supply for (uint i = 0; i < num;) { _safeMint(to, currentSupplyIndex, rare); unchecked { ++i; } } } function burn(uint256 tokenID) external nonReentrant { require(_isApprovedOrOwner(_msgSender(), tokenID), "caller not owner nor approved"); _burn(tokenID); } receive() external payable {} /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { require(_exists(tokenId), 'Non Existent Token'); address wpowner = ownerOf(tokenId); require(to != wpowner, "ERC721: approval to current owner"); require( _msgSender() == wpowner || isApprovedForAll(wpowner, _msgSender()), "ERC721: not approved or owner" ); _approve(to, tokenId); } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address _operator, bool approved) public override { _setApprovalForAll(_msgSender(), _operator, approved); } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { require(_isApprovedOrOwner(_msgSender(), tokenId), "caller not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { require(_isApprovedOrOwner(_msgSender(), tokenId), "caller not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } //////////////////////////////////////////////// /////////// INTERNAL FUNCTIONS /////////// //////////////////////////////////////////////// /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bool _isRare ) internal { _mint(to, tokenId, _isRare); require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId, bool _isRare) internal { require(!_exists(tokenId), "ERC721: token already minted"); if (_isRare) { isRare[tokenId] = true; require(limited_mint_remaining > 0, 'Limited Mint Exceeds Cap'); unchecked { --limited_mint_remaining; } } else { require(standard_mint_remaining > 0, 'Standard Mint Exceeds Cap'); unchecked { --standard_mint_remaining; } } _owners[tokenId] = to; unchecked { ++currentSupplyIndex; ++_totalSupply; ++_balances[to]; } emit Transfer(address(0), to, tokenId); } /** * @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 { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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 nonReentrant { require(_exists(tokenId), 'Non Existent Token'); require(ownerOf(tokenId) == from, "Incorrect owner"); require(to != address(0), "zero address"); require(balanceOf(from) > 0, 'Zero Balance'); // Clear approvals from the previous owner _approve(address(0), tokenId); // Allocate balances _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; // emit transfer emit Transfer(from, to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal { require(_exists(tokenId), 'Token Does Not Exist'); // owner of token address owner_ = ownerOf(tokenId); // Clear approvals _approve(address(0), tokenId); // decrement balance _balances[owner_] -= 1; delete _owners[tokenId]; // decrement total supply _totalSupply -= 1; // emit transfer emit Transfer(owner_, address(0), tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address wpowner, address _operator, bool approved ) internal { require(wpowner != _operator, "ERC721: approve to caller"); _operatorApprovals[wpowner][_operator] = approved; emit ApprovalForAll(wpowner, _operator, approved); } //////////////////////////////////////////////// /////////// READ FUNCTIONS /////////// //////////////////////////////////////////////// function checkClaimEligibility(address _to, uint256 _quantity) external view returns (string memory) { if (tradingEnabled && _to != address(0) && _quantity > 0) { return ""; } return "Sale is not live"; } function totalSupply() external view returns (uint256) { return _totalSupply; } function getIDsByOwner(address owner_) external view returns (uint256[] memory) { uint256[] memory ids = new uint256[](balanceOf(owner_)); if (balanceOf(owner_) == 0) return ids; uint256 count = 0; for (uint i = 0; i < currentSupplyIndex;) { if (_owners[i] == owner_) { ids[count] = i; unchecked { ++count; } } unchecked { ++i; } } return ids; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address wpowner) public view override returns (uint256) { require(wpowner != address(0), "query for the zero address"); return _balances[wpowner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _owners[tokenId]; } /** * @dev See {IERC721Metadata-name}. */ function name() public pure override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public pure override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view override returns (string memory) { string memory fHalf = isRare[tokenId] ? string.concat(limitedBaseURI, uint2str(tokenId)) : string.concat(baseURI, uint2str(tokenId)); return string.concat(fHalf, ending); } /** Converts A Uint Into a String */ function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len; while (_i != 0) { k = k-1; uint8 temp = (48 + uint8(_i - _i / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } function owner() external view returns (address) { return this.getOwner(); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721: query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address wpowner, address _operator) public view override returns (bool) { return _operatorApprovals[wpowner][_operator]; } /** * @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 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 returns (bool) { require(_exists(tokenId), "ERC721: nonexistent token"); address wpowner = ownerOf(tokenId); return (spender == wpowner || getApproved(tokenId) == spender || isApprovedForAll(wpowner, spender)); } function onReceivedRetval() public pure returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_mintRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"backMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wpowner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"checkClaimEligibility","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupplyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"getIDsByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wpowner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isRare","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited_mint_remaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"bool","name":"rare","type":"bool"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"onReceivedRetval","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"nums","type":"uint256[]"},{"internalType":"bool[]","name":"_isRare","type":"bool[]"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost_","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setLimitedBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost_","type":"uint256"}],"name":"setLimitedCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRemaining","type":"uint256"}],"name":"setLimitedMintRemaining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mintRecipient_","type":"address"}],"name":"setMintRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRemaining","type":"uint256"}],"name":"setStandardMintRemaining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newExtention","type":"string"}],"name":"setURIExtention","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standard_mint_remaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6104b06004556101906005556638d7ea4c680000600b556671afd498d00000600c55610100604052604460808181529062002e2660a039600d90620000459082620001e8565b5060405180608001604052806051815260200162002e6a60519139600e906200006f9082620001e8565b50604080518082019091526005815264173539b7b760d91b6020820152600f906200009b9082620001e8565b50348015620000a957600080fd5b5060405162002ebb38038062002ebb833981016040819052620000cc91620002b4565b6001600081815581546001600160a01b031916339081179092556040517f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36010805460ff196001600160a01b0390931661010002929092166001600160a81b0319909216919091176001179055620002e6565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200016e57607f821691505b6020821081036200018f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e357600081815260208120601f850160051c81016020861015620001be5750805b601f850160051c820191505b81811015620001df57828155600101620001ca565b5050505b505050565b81516001600160401b0381111562000204576200020462000143565b6200021c8162000215845462000159565b8462000195565b602080601f8311600181146200025457600084156200023b5750858301515b600019600386901b1c1916600185901b178555620001df565b600085815260208120601f198616915b82811015620002855788860151825594840194600190910190840162000264565b5085821015620002a45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620002c757600080fd5b81516001600160a01b0381168114620002df57600080fd5b9392505050565b612b3080620002f66000396000f3fe60806040526004361061026b5760003560e01c806370a0823111610144578063b88d4fde116100b6578063d9ea7d4c1161007a578063d9ea7d4c14610761578063e5b8467214610781578063e8a7bc57146107a1578063e946b7ed146107c6578063e985e9c5146107e6578063f028ed6d1461082f57600080fd5b8063b88d4fde146106ce578063bab56d7a146106ee578063c87b56dd1461070e578063cc7192811461072e578063d1a1beb41461074e57600080fd5b806394f9b73d1161010857806394f9b73d1461060557806395d89b4114610625578063989df72a14610656578063a22cb4651461066c578063a6f9dae11461068c578063ae9843d6146106ac57600080fd5b806370a082311461057c5780637a54150f1461059c578063893d20e8146105b257806389476069146105d05780638da5cb5b146105f057600080fd5b806323b872dd116101dd57806344a0d68a116101a157806344a0d68a146104a95780634ada218b146104c957806355f804b3146104e35780635bf244be1461050357806362684f58146105305780636352211e1461054657600080fd5b806323b872dd146104145780633ccfd60b1461043457806342842e0e1461044957806342966c68146104695780634408a0461461048957600080fd5b8063096283291161022f57806309628329146103605780631031e36e1461038057806313faede61461039557806318160ddd146103b95780631e263990146103ce5780631fe09da3146103e457600080fd5b806301ffc9a7146102775780630694db1e146102ac57806306fdde03146102c3578063081812fc14610308578063095ea7b31461034057600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004612220565b61084f565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c16108a1565b005b3480156102cf57600080fd5b5060408051808201909152601381527215985b5c1a5c994814db185e595c9cc8139195606a1b60208201525b6040516102a39190612294565b34801561031457600080fd5b506103286103233660046122a7565b6108e3565b6040516001600160a01b0390911681526020016102a3565b34801561034c57600080fd5b506102c161035b3660046122d5565b610962565b34801561036c57600080fd5b506102c161037b366004612301565b610a99565b34801561038c57600080fd5b506102c1610ad0565b3480156103a157600080fd5b506103ab600b5481565b6040519081526020016102a3565b3480156103c557600080fd5b506002546103ab565b3480156103da57600080fd5b506103ab60035481565b3480156103f057600080fd5b506102976103ff3660046122a7565b600a6020526000908152604090205460ff1681565b34801561042057600080fd5b506102c161042f366004612373565b610b06565b34801561044057600080fd5b506102c1610b38565b34801561045557600080fd5b506102c1610464366004612373565b610bba565b34801561047557600080fd5b506102c16104843660046122a7565b610bd5565b34801561049557600080fd5b506102c16104a4366004612301565b610c62565b3480156104b557600080fd5b506102c16104c43660046122a7565b610c99565b3480156104d557600080fd5b506010546102979060ff1681565b3480156104ef57600080fd5b506102c16104fe366004612301565b610cc8565b34801561050f57600080fd5b5061052361051e3660046123b4565b610cff565b6040516102a391906123d1565b34801561053c57600080fd5b506103ab60055481565b34801561055257600080fd5b506103286105613660046122a7565b6000908152600660205260409020546001600160a01b031690565b34801561058857600080fd5b506103ab6105973660046123b4565b610dcc565b3480156105a857600080fd5b506103ab600c5481565b3480156105be57600080fd5b506001546001600160a01b0316610328565b3480156105dc57600080fd5b506102c16105eb3660046123b4565b610e40565b3480156105fc57600080fd5b50610328610f94565b34801561061157600080fd5b506102c16106203660046122a7565b610ffd565b34801561063157600080fd5b5060408051808201909152600881526714d310564813919560c21b60208201526102fb565b34801561066257600080fd5b506103ab60045481565b34801561067857600080fd5b506102c1610687366004612423565b61102c565b34801561069857600080fd5b506102c16106a73660046123b4565b611037565b3480156106b857600080fd5b50604051630a85bd0160e11b81526020016102a3565b3480156106da57600080fd5b506102c16106e9366004612472565b6110bd565b3480156106fa57600080fd5b506102c16107093660046122a7565b6110f5565b34801561071a57600080fd5b506102fb6107293660046122a7565b611124565b34801561073a57600080fd5b506102fb6107493660046122d5565b6111c7565b6102c161075c366004612552565b611238565b34801561076d57600080fd5b506102c161077c3660046122a7565b611462565b34801561078d57600080fd5b506102c161079c3660046125e0565b611491565b3480156107ad57600080fd5b506010546103289061010090046001600160a01b031681565b3480156107d257600080fd5b506102c16107e13660046123b4565b61159f565b3480156107f257600080fd5b5061029761080136600461267a565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b34801561083b57600080fd5b506102c161084a3660046126a8565b6115f1565b60006001600160e01b031982166380ac58cd60e01b148061088057506001600160e01b03198216635b5e139f60e01b145b8061089b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146108d45760405162461bcd60e51b81526004016108cb906126ca565b60405180910390fd5b6010805460ff19166001179055565b60006108ee826117a9565b6109465760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084016108cb565b506000908152600860205260409020546001600160a01b031690565b61096b816117a9565b6109ac5760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108cb565b6000818152600660205260409020546001600160a01b03908116908316819003610a225760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108cb565b336001600160a01b0382161480610a3e5750610a3e8133610801565b610a8a5760405162461bcd60e51b815260206004820152601d60248201527f4552433732313a206e6f7420617070726f766564206f72206f776e657200000060448201526064016108cb565b610a9483836117c6565b505050565b6001546001600160a01b03163314610ac35760405162461bcd60e51b81526004016108cb906126ca565b600e610a94828483612777565b6001546001600160a01b03163314610afa5760405162461bcd60e51b81526004016108cb906126ca565b6010805460ff19169055565b610b11335b8261182d565b610b2d5760405162461bcd60e51b81526004016108cb90612837565b610a948383836118ff565b6001546001600160a01b03163314610b625760405162461bcd60e51b81526004016108cb906126ca565b604051600090339047908381818185875af1925050503d8060008114610ba4576040519150601f19603f3d011682016040523d82523d6000602084013e610ba9565b606091505b5050905080610bb757600080fd5b50565b610a94838383604051806020016040528060008152506110bd565b600260005403610c275760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108cb565b6002600055610c3533610b0b565b610c515760405162461bcd60e51b81526004016108cb90612837565b610c5a81611b4f565b506001600055565b6001546001600160a01b03163314610c8c5760405162461bcd60e51b81526004016108cb906126ca565b600f610a94828483612777565b6001546001600160a01b03163314610cc35760405162461bcd60e51b81526004016108cb906126ca565b600b55565b6001546001600160a01b03163314610cf25760405162461bcd60e51b81526004016108cb906126ca565b600d610a94828483612777565b60606000610d0c83610dcc565b67ffffffffffffffff811115610d2457610d2461245c565b604051908082528060200260200182016040528015610d4d578160200160208202803683370190505b509050610d5983610dcc565b600003610d665792915050565b6000805b600354811015610dc3576000818152600660205260409020546001600160a01b03808716911603610dbb5780838381518110610da857610da861286e565b6020026020010181815250508160010191505b600101610d6a565b50909392505050565b60006001600160a01b038216610e245760405162461bcd60e51b815260206004820152601a60248201527f717565727920666f7220746865207a65726f206164647265737300000000000060448201526064016108cb565b506001600160a01b031660009081526007602052604090205490565b6001546001600160a01b03163314610e6a5760405162461bcd60e51b81526004016108cb906126ca565b6001600160a01b038116610eaf5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108cb565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f219190612884565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f90919061289d565b5050565b6000306001600160a01b031663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff891906128ba565b905090565b6001546001600160a01b031633146110275760405162461bcd60e51b81526004016108cb906126ca565b600555565b610f90338383611c5c565b6001546001600160a01b031633146110615760405162461bcd60e51b81526004016108cb906126ca565b6001546040516001600160a01b038084169216907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73590600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6110c7338361182d565b6110e35760405162461bcd60e51b81526004016108cb90612837565b6110ef84848484611d2a565b50505050565b6001546001600160a01b0316331461111f5760405162461bcd60e51b81526004016108cb906126ca565b600c55565b6000818152600a60205260408120546060919060ff1661116e57600d61114984611d5d565b60405160200161115a92919061294a565b60405160208183030381529060405261119a565b600e61117984611d5d565b60405160200161118a92919061294a565b6040516020818303038152906040525b905080600f6040516020016111b092919061296f565b604051602081830303815290604052915050919050565b60105460609060ff1680156111e457506001600160a01b03831615155b80156111f05750600082115b1561120a575060408051602081019091526000815261089b565b5060408051808201909152601081526f53616c65206973206e6f74206c69766560801b602082015292915050565b60105460ff168015611259575060105461010090046001600160a01b031615155b61129b5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b60448201526064016108cb565b600082116112de5760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f74204d696e74205a65726f60801b60448201526064016108cb565b6001600160a01b0383166113235760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108cb565b60008161133d5782600b5461133891906129ac565b61134b565b82600c5461134b91906129ac565b9050803410156113925760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742056616c756560701b60448201526064016108cb565b60105460405160009161010090046001600160a01b03169034908381818185875af1925050503d80600081146113e4576040519150601f19603f3d011682016040523d82523d6000602084013e6113e9565b606091505b505090508061143a5760405162461bcd60e51b815260206004820152601c60248201527f4d696e74526563697069656e74205061796d656e74204661696c65640000000060448201526064016108cb565b60005b8481101561145a576114528660035486611e89565b60010161143d565b505050505050565b6001546001600160a01b0316331461148c5760405162461bcd60e51b81526004016108cb906126ca565b600455565b6001546001600160a01b031633146114bb5760405162461bcd60e51b81526004016108cb906126ca565b848381146114fd5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b60448201526064016108cb565b60005b818110156115955760005b86868381811061151d5761151d61286e565b9050602002013581101561158c576115848989848181106115405761154061286e565b905060200201602081019061155591906123b4565b60035487878681811061156a5761156a61286e565b905060200201602081019061157f91906129c3565b611e89565b60010161150b565b50600101611500565b5050505050505050565b6001546001600160a01b031633146115c95760405162461bcd60e51b81526004016108cb906126ca565b601080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001546001600160a01b0316331461161b5760405162461bcd60e51b81526004016108cb906126ca565b600073d024f7df7506310614792f562356505a1aafd45d90506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190612884565b9050808311156116a6578092505b835b838110156117a2576040516331a9108f60e11b8152600481018290526000906001600160a01b03851690636352211e90602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906128ba565b604051631fe09da360e01b8152600481018490529091506000906001600160a01b03861690631fe09da390602401602060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b919061289d565b9050611798828483611f17565b50506001016116a8565b5050505050565b6000908152600660205260409020546001600160a01b0316151590565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556006909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611838826117a9565b6118845760405162461bcd60e51b815260206004820152601960248201527f4552433732313a206e6f6e6578697374656e7420746f6b656e0000000000000060448201526064016108cb565b6000828152600660205260409020546001600160a01b039081169084168114806118c75750836001600160a01b03166118bc846108e3565b6001600160a01b0316145b806118f757506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b6002600054036119515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108cb565b600260005561195f816117a9565b6119a05760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108cb565b6000818152600660205260409020546001600160a01b038481169116146119fb5760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba1037bbb732b960891b60448201526064016108cb565b6001600160a01b038216611a405760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108cb565b6000611a4b84610dcc565b11611a875760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2042616c616e636560a01b60448201526064016108cb565b611a926000826117c6565b6001600160a01b0383166000908152600760205260408120805460019290611abb9084906129e0565b90915550506001600160a01b0382166000908152600760205260408120805460019290611ae99084906129f3565b909155505060008181526006602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050600160005550565b611b58816117a9565b611b9b5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88111bd95cc8139bdd08115e1a5cdd60621b60448201526064016108cb565b6000818152600660205260408120546001600160a01b031690611bbe90836117c6565b6001600160a01b0381166000908152600760205260408120805460019290611be79084906129e0565b9091555050600082815260066020526040812080546001600160a01b03191690556002805460019290611c1b9084906129e0565b909155505060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603611cbd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cb565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d358484846118ff565b611d41848484846120c9565b6110ef5760405162461bcd60e51b81526004016108cb90612a06565b606081600003611d845750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dae5780611d9881612a4c565b9150611da79050600a83612a65565b9150611d88565b60008167ffffffffffffffff811115611dc957611dc961245c565b6040519080825280601f01601f191660200182016040528015611df3576020820181803683370190505b509050815b8515611e8057611e096001826129e0565b90506000611e18600a88612a65565b611e2390600a6129ac565b611e2d90886129e0565b611e38906030612a87565b905060008160f81b905080848481518110611e5557611e5561286e565b60200101906001600160f81b031916908160001a905350611e77600a89612a65565b97505050611df8565b50949350505050565b611e94838383611f17565b611eb060008484604051806020016040528060008152506120c9565b610a945760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108cb565b611f20826117a9565b15611f6d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cb565b8015611fea576000828152600a60205260409020805460ff19166001179055600554611fdb5760405162461bcd60e51b815260206004820152601860248201527f4c696d69746564204d696e74204578636565647320436170000000000000000060448201526064016108cb565b60058054600019019055612047565b60006004541161203c5760405162461bcd60e51b815260206004820152601960248201527f5374616e64617264204d696e742045786365656473204361700000000000000060448201526064016108cb565b600480546000190190555b600082815260066020908152604080832080546001600160a01b0319166001600160a01b038816908117909155600380546001908101909155600280548201905581855260079093528184208054909301909255518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60006120dd846001600160a01b03166121d1565b156121c657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612114903390899088908890600401612aa0565b6020604051808303816000875af192505050801561214f575060408051601f3d908101601f1916820190925261214c91810190612add565b60015b6121ac573d80801561217d576040519150601f19603f3d011682016040523d82523d6000602084013e612182565b606091505b5080516000036121a45760405162461bcd60e51b81526004016108cb90612a06565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118f7565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906118f7575050151592915050565b6001600160e01b031981168114610bb757600080fd5b60006020828403121561223257600080fd5b813561223d8161220a565b9392505050565b60005b8381101561225f578181015183820152602001612247565b50506000910152565b60008151808452612280816020860160208601612244565b601f01601f19169290920160200192915050565b60208152600061223d6020830184612268565b6000602082840312156122b957600080fd5b5035919050565b6001600160a01b0381168114610bb757600080fd5b600080604083850312156122e857600080fd5b82356122f3816122c0565b946020939093013593505050565b6000806020838503121561231457600080fd5b823567ffffffffffffffff8082111561232c57600080fd5b818501915085601f83011261234057600080fd5b81358181111561234f57600080fd5b86602082850101111561236157600080fd5b60209290920196919550909350505050565b60008060006060848603121561238857600080fd5b8335612393816122c0565b925060208401356123a3816122c0565b929592945050506040919091013590565b6000602082840312156123c657600080fd5b813561223d816122c0565b6020808252825182820181905260009190848201906040850190845b81811015612409578351835292840192918401916001016123ed565b50909695505050505050565b8015158114610bb757600080fd5b6000806040838503121561243657600080fd5b8235612441816122c0565b9150602083013561245181612415565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561248857600080fd5b8435612493816122c0565b935060208501356124a3816122c0565b925060408501359150606085013567ffffffffffffffff808211156124c757600080fd5b818701915087601f8301126124db57600080fd5b8135818111156124ed576124ed61245c565b604051601f8201601f19908116603f011681019083821181831017156125155761251561245c565b816040528281528a602084870101111561252e57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006060848603121561256757600080fd5b8335612572816122c0565b925060208401359150604084013561258981612415565b809150509250925092565b60008083601f8401126125a657600080fd5b50813567ffffffffffffffff8111156125be57600080fd5b6020830191508360208260051b85010111156125d957600080fd5b9250929050565b600080600080600080606087890312156125f957600080fd5b863567ffffffffffffffff8082111561261157600080fd5b61261d8a838b01612594565b9098509650602089013591508082111561263657600080fd5b6126428a838b01612594565b9096509450604089013591508082111561265b57600080fd5b5061266889828a01612594565b979a9699509497509295939492505050565b6000806040838503121561268d57600080fd5b8235612698816122c0565b91506020830135612451816122c0565b600080604083850312156126bb57600080fd5b50508035926020909101359150565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600181811c9082168061270b57607f821691505b60208210810361272b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a9457600081815260208120601f850160051c810160208610156127585750805b601f850160051c820191505b8181101561145a57828155600101612764565b67ffffffffffffffff83111561278f5761278f61245c565b6127a38361279d83546126f7565b83612731565b6000601f8411600181146127d757600085156127bf5750838201355b600019600387901b1c1916600186901b1783556117a2565b600083815260209020601f19861690835b8281101561280857868501358255602094850194600190920191016127e8565b50868210156128255760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6020808252601d908201527f63616c6c6572206e6f74206f776e6572206e6f7220617070726f766564000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561289657600080fd5b5051919050565b6000602082840312156128af57600080fd5b815161223d81612415565b6000602082840312156128cc57600080fd5b815161223d816122c0565b600081546128e4816126f7565b600182811680156128fc576001811461291157612940565b60ff1984168752821515830287019450612940565b8560005260208060002060005b858110156129375781548a82015290840190820161291e565b50505082870194505b5050505092915050565b600061295682856128d7565b8351612966818360208801612244565b01949350505050565b60008351612981818460208801612244565b61298d818401856128d7565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761089b5761089b612996565b6000602082840312156129d557600080fd5b813561223d81612415565b8181038181111561089b5761089b612996565b8082018082111561089b5761089b612996565b60208082526026908201527f4552433732313a206e6f6e20455243373231526563656976657220696d706c6560408201526536b2b73a32b960d11b606082015260800190565b600060018201612a5e57612a5e612996565b5060010190565b600082612a8257634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561089b5761089b612996565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad390830184612268565b9695505050505050565b600060208284031215612aef57600080fd5b815161223d8161220a56fea264697066735822122063d90ae12be41a510adce01ebdeb78fda04bfe68f88e4a9dd95b7ed056a4435764736f6c6343000814003368747470733a2f2f697066732e696f2f697066732f516d663146434145317a6d756633767a426231745356364e584335584b6a635658554d6545634b743633735150442f68747470733a2f2f697066732e696f2f697066732f62616679626569667276366e766937377a7136723765676861616967697875787566367761686973747479626a65646c736432756f67696c6b64792f0000000000000000000000002cd46c74514a41b57dc4573727d8b5d1bedf9d93
Deployed Bytecode
0x60806040526004361061026b5760003560e01c806370a0823111610144578063b88d4fde116100b6578063d9ea7d4c1161007a578063d9ea7d4c14610761578063e5b8467214610781578063e8a7bc57146107a1578063e946b7ed146107c6578063e985e9c5146107e6578063f028ed6d1461082f57600080fd5b8063b88d4fde146106ce578063bab56d7a146106ee578063c87b56dd1461070e578063cc7192811461072e578063d1a1beb41461074e57600080fd5b806394f9b73d1161010857806394f9b73d1461060557806395d89b4114610625578063989df72a14610656578063a22cb4651461066c578063a6f9dae11461068c578063ae9843d6146106ac57600080fd5b806370a082311461057c5780637a54150f1461059c578063893d20e8146105b257806389476069146105d05780638da5cb5b146105f057600080fd5b806323b872dd116101dd57806344a0d68a116101a157806344a0d68a146104a95780634ada218b146104c957806355f804b3146104e35780635bf244be1461050357806362684f58146105305780636352211e1461054657600080fd5b806323b872dd146104145780633ccfd60b1461043457806342842e0e1461044957806342966c68146104695780634408a0461461048957600080fd5b8063096283291161022f57806309628329146103605780631031e36e1461038057806313faede61461039557806318160ddd146103b95780631e263990146103ce5780631fe09da3146103e457600080fd5b806301ffc9a7146102775780630694db1e146102ac57806306fdde03146102c3578063081812fc14610308578063095ea7b31461034057600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004612220565b61084f565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c16108a1565b005b3480156102cf57600080fd5b5060408051808201909152601381527215985b5c1a5c994814db185e595c9cc8139195606a1b60208201525b6040516102a39190612294565b34801561031457600080fd5b506103286103233660046122a7565b6108e3565b6040516001600160a01b0390911681526020016102a3565b34801561034c57600080fd5b506102c161035b3660046122d5565b610962565b34801561036c57600080fd5b506102c161037b366004612301565b610a99565b34801561038c57600080fd5b506102c1610ad0565b3480156103a157600080fd5b506103ab600b5481565b6040519081526020016102a3565b3480156103c557600080fd5b506002546103ab565b3480156103da57600080fd5b506103ab60035481565b3480156103f057600080fd5b506102976103ff3660046122a7565b600a6020526000908152604090205460ff1681565b34801561042057600080fd5b506102c161042f366004612373565b610b06565b34801561044057600080fd5b506102c1610b38565b34801561045557600080fd5b506102c1610464366004612373565b610bba565b34801561047557600080fd5b506102c16104843660046122a7565b610bd5565b34801561049557600080fd5b506102c16104a4366004612301565b610c62565b3480156104b557600080fd5b506102c16104c43660046122a7565b610c99565b3480156104d557600080fd5b506010546102979060ff1681565b3480156104ef57600080fd5b506102c16104fe366004612301565b610cc8565b34801561050f57600080fd5b5061052361051e3660046123b4565b610cff565b6040516102a391906123d1565b34801561053c57600080fd5b506103ab60055481565b34801561055257600080fd5b506103286105613660046122a7565b6000908152600660205260409020546001600160a01b031690565b34801561058857600080fd5b506103ab6105973660046123b4565b610dcc565b3480156105a857600080fd5b506103ab600c5481565b3480156105be57600080fd5b506001546001600160a01b0316610328565b3480156105dc57600080fd5b506102c16105eb3660046123b4565b610e40565b3480156105fc57600080fd5b50610328610f94565b34801561061157600080fd5b506102c16106203660046122a7565b610ffd565b34801561063157600080fd5b5060408051808201909152600881526714d310564813919560c21b60208201526102fb565b34801561066257600080fd5b506103ab60045481565b34801561067857600080fd5b506102c1610687366004612423565b61102c565b34801561069857600080fd5b506102c16106a73660046123b4565b611037565b3480156106b857600080fd5b50604051630a85bd0160e11b81526020016102a3565b3480156106da57600080fd5b506102c16106e9366004612472565b6110bd565b3480156106fa57600080fd5b506102c16107093660046122a7565b6110f5565b34801561071a57600080fd5b506102fb6107293660046122a7565b611124565b34801561073a57600080fd5b506102fb6107493660046122d5565b6111c7565b6102c161075c366004612552565b611238565b34801561076d57600080fd5b506102c161077c3660046122a7565b611462565b34801561078d57600080fd5b506102c161079c3660046125e0565b611491565b3480156107ad57600080fd5b506010546103289061010090046001600160a01b031681565b3480156107d257600080fd5b506102c16107e13660046123b4565b61159f565b3480156107f257600080fd5b5061029761080136600461267a565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b34801561083b57600080fd5b506102c161084a3660046126a8565b6115f1565b60006001600160e01b031982166380ac58cd60e01b148061088057506001600160e01b03198216635b5e139f60e01b145b8061089b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146108d45760405162461bcd60e51b81526004016108cb906126ca565b60405180910390fd5b6010805460ff19166001179055565b60006108ee826117a9565b6109465760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084016108cb565b506000908152600860205260409020546001600160a01b031690565b61096b816117a9565b6109ac5760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108cb565b6000818152600660205260409020546001600160a01b03908116908316819003610a225760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108cb565b336001600160a01b0382161480610a3e5750610a3e8133610801565b610a8a5760405162461bcd60e51b815260206004820152601d60248201527f4552433732313a206e6f7420617070726f766564206f72206f776e657200000060448201526064016108cb565b610a9483836117c6565b505050565b6001546001600160a01b03163314610ac35760405162461bcd60e51b81526004016108cb906126ca565b600e610a94828483612777565b6001546001600160a01b03163314610afa5760405162461bcd60e51b81526004016108cb906126ca565b6010805460ff19169055565b610b11335b8261182d565b610b2d5760405162461bcd60e51b81526004016108cb90612837565b610a948383836118ff565b6001546001600160a01b03163314610b625760405162461bcd60e51b81526004016108cb906126ca565b604051600090339047908381818185875af1925050503d8060008114610ba4576040519150601f19603f3d011682016040523d82523d6000602084013e610ba9565b606091505b5050905080610bb757600080fd5b50565b610a94838383604051806020016040528060008152506110bd565b600260005403610c275760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108cb565b6002600055610c3533610b0b565b610c515760405162461bcd60e51b81526004016108cb90612837565b610c5a81611b4f565b506001600055565b6001546001600160a01b03163314610c8c5760405162461bcd60e51b81526004016108cb906126ca565b600f610a94828483612777565b6001546001600160a01b03163314610cc35760405162461bcd60e51b81526004016108cb906126ca565b600b55565b6001546001600160a01b03163314610cf25760405162461bcd60e51b81526004016108cb906126ca565b600d610a94828483612777565b60606000610d0c83610dcc565b67ffffffffffffffff811115610d2457610d2461245c565b604051908082528060200260200182016040528015610d4d578160200160208202803683370190505b509050610d5983610dcc565b600003610d665792915050565b6000805b600354811015610dc3576000818152600660205260409020546001600160a01b03808716911603610dbb5780838381518110610da857610da861286e565b6020026020010181815250508160010191505b600101610d6a565b50909392505050565b60006001600160a01b038216610e245760405162461bcd60e51b815260206004820152601a60248201527f717565727920666f7220746865207a65726f206164647265737300000000000060448201526064016108cb565b506001600160a01b031660009081526007602052604090205490565b6001546001600160a01b03163314610e6a5760405162461bcd60e51b81526004016108cb906126ca565b6001600160a01b038116610eaf5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108cb565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f219190612884565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f90919061289d565b5050565b6000306001600160a01b031663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff891906128ba565b905090565b6001546001600160a01b031633146110275760405162461bcd60e51b81526004016108cb906126ca565b600555565b610f90338383611c5c565b6001546001600160a01b031633146110615760405162461bcd60e51b81526004016108cb906126ca565b6001546040516001600160a01b038084169216907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73590600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6110c7338361182d565b6110e35760405162461bcd60e51b81526004016108cb90612837565b6110ef84848484611d2a565b50505050565b6001546001600160a01b0316331461111f5760405162461bcd60e51b81526004016108cb906126ca565b600c55565b6000818152600a60205260408120546060919060ff1661116e57600d61114984611d5d565b60405160200161115a92919061294a565b60405160208183030381529060405261119a565b600e61117984611d5d565b60405160200161118a92919061294a565b6040516020818303038152906040525b905080600f6040516020016111b092919061296f565b604051602081830303815290604052915050919050565b60105460609060ff1680156111e457506001600160a01b03831615155b80156111f05750600082115b1561120a575060408051602081019091526000815261089b565b5060408051808201909152601081526f53616c65206973206e6f74206c69766560801b602082015292915050565b60105460ff168015611259575060105461010090046001600160a01b031615155b61129b5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b60448201526064016108cb565b600082116112de5760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f74204d696e74205a65726f60801b60448201526064016108cb565b6001600160a01b0383166113235760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108cb565b60008161133d5782600b5461133891906129ac565b61134b565b82600c5461134b91906129ac565b9050803410156113925760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742056616c756560701b60448201526064016108cb565b60105460405160009161010090046001600160a01b03169034908381818185875af1925050503d80600081146113e4576040519150601f19603f3d011682016040523d82523d6000602084013e6113e9565b606091505b505090508061143a5760405162461bcd60e51b815260206004820152601c60248201527f4d696e74526563697069656e74205061796d656e74204661696c65640000000060448201526064016108cb565b60005b8481101561145a576114528660035486611e89565b60010161143d565b505050505050565b6001546001600160a01b0316331461148c5760405162461bcd60e51b81526004016108cb906126ca565b600455565b6001546001600160a01b031633146114bb5760405162461bcd60e51b81526004016108cb906126ca565b848381146114fd5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b60448201526064016108cb565b60005b818110156115955760005b86868381811061151d5761151d61286e565b9050602002013581101561158c576115848989848181106115405761154061286e565b905060200201602081019061155591906123b4565b60035487878681811061156a5761156a61286e565b905060200201602081019061157f91906129c3565b611e89565b60010161150b565b50600101611500565b5050505050505050565b6001546001600160a01b031633146115c95760405162461bcd60e51b81526004016108cb906126ca565b601080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001546001600160a01b0316331461161b5760405162461bcd60e51b81526004016108cb906126ca565b600073d024f7df7506310614792f562356505a1aafd45d90506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190612884565b9050808311156116a6578092505b835b838110156117a2576040516331a9108f60e11b8152600481018290526000906001600160a01b03851690636352211e90602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906128ba565b604051631fe09da360e01b8152600481018490529091506000906001600160a01b03861690631fe09da390602401602060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b919061289d565b9050611798828483611f17565b50506001016116a8565b5050505050565b6000908152600660205260409020546001600160a01b0316151590565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556006909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611838826117a9565b6118845760405162461bcd60e51b815260206004820152601960248201527f4552433732313a206e6f6e6578697374656e7420746f6b656e0000000000000060448201526064016108cb565b6000828152600660205260409020546001600160a01b039081169084168114806118c75750836001600160a01b03166118bc846108e3565b6001600160a01b0316145b806118f757506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b6002600054036119515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108cb565b600260005561195f816117a9565b6119a05760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108cb565b6000818152600660205260409020546001600160a01b038481169116146119fb5760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba1037bbb732b960891b60448201526064016108cb565b6001600160a01b038216611a405760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108cb565b6000611a4b84610dcc565b11611a875760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2042616c616e636560a01b60448201526064016108cb565b611a926000826117c6565b6001600160a01b0383166000908152600760205260408120805460019290611abb9084906129e0565b90915550506001600160a01b0382166000908152600760205260408120805460019290611ae99084906129f3565b909155505060008181526006602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050600160005550565b611b58816117a9565b611b9b5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88111bd95cc8139bdd08115e1a5cdd60621b60448201526064016108cb565b6000818152600660205260408120546001600160a01b031690611bbe90836117c6565b6001600160a01b0381166000908152600760205260408120805460019290611be79084906129e0565b9091555050600082815260066020526040812080546001600160a01b03191690556002805460019290611c1b9084906129e0565b909155505060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603611cbd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cb565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d358484846118ff565b611d41848484846120c9565b6110ef5760405162461bcd60e51b81526004016108cb90612a06565b606081600003611d845750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dae5780611d9881612a4c565b9150611da79050600a83612a65565b9150611d88565b60008167ffffffffffffffff811115611dc957611dc961245c565b6040519080825280601f01601f191660200182016040528015611df3576020820181803683370190505b509050815b8515611e8057611e096001826129e0565b90506000611e18600a88612a65565b611e2390600a6129ac565b611e2d90886129e0565b611e38906030612a87565b905060008160f81b905080848481518110611e5557611e5561286e565b60200101906001600160f81b031916908160001a905350611e77600a89612a65565b97505050611df8565b50949350505050565b611e94838383611f17565b611eb060008484604051806020016040528060008152506120c9565b610a945760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108cb565b611f20826117a9565b15611f6d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cb565b8015611fea576000828152600a60205260409020805460ff19166001179055600554611fdb5760405162461bcd60e51b815260206004820152601860248201527f4c696d69746564204d696e74204578636565647320436170000000000000000060448201526064016108cb565b60058054600019019055612047565b60006004541161203c5760405162461bcd60e51b815260206004820152601960248201527f5374616e64617264204d696e742045786365656473204361700000000000000060448201526064016108cb565b600480546000190190555b600082815260066020908152604080832080546001600160a01b0319166001600160a01b038816908117909155600380546001908101909155600280548201905581855260079093528184208054909301909255518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60006120dd846001600160a01b03166121d1565b156121c657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612114903390899088908890600401612aa0565b6020604051808303816000875af192505050801561214f575060408051601f3d908101601f1916820190925261214c91810190612add565b60015b6121ac573d80801561217d576040519150601f19603f3d011682016040523d82523d6000602084013e612182565b606091505b5080516000036121a45760405162461bcd60e51b81526004016108cb90612a06565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118f7565b506001949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906118f7575050151592915050565b6001600160e01b031981168114610bb757600080fd5b60006020828403121561223257600080fd5b813561223d8161220a565b9392505050565b60005b8381101561225f578181015183820152602001612247565b50506000910152565b60008151808452612280816020860160208601612244565b601f01601f19169290920160200192915050565b60208152600061223d6020830184612268565b6000602082840312156122b957600080fd5b5035919050565b6001600160a01b0381168114610bb757600080fd5b600080604083850312156122e857600080fd5b82356122f3816122c0565b946020939093013593505050565b6000806020838503121561231457600080fd5b823567ffffffffffffffff8082111561232c57600080fd5b818501915085601f83011261234057600080fd5b81358181111561234f57600080fd5b86602082850101111561236157600080fd5b60209290920196919550909350505050565b60008060006060848603121561238857600080fd5b8335612393816122c0565b925060208401356123a3816122c0565b929592945050506040919091013590565b6000602082840312156123c657600080fd5b813561223d816122c0565b6020808252825182820181905260009190848201906040850190845b81811015612409578351835292840192918401916001016123ed565b50909695505050505050565b8015158114610bb757600080fd5b6000806040838503121561243657600080fd5b8235612441816122c0565b9150602083013561245181612415565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561248857600080fd5b8435612493816122c0565b935060208501356124a3816122c0565b925060408501359150606085013567ffffffffffffffff808211156124c757600080fd5b818701915087601f8301126124db57600080fd5b8135818111156124ed576124ed61245c565b604051601f8201601f19908116603f011681019083821181831017156125155761251561245c565b816040528281528a602084870101111561252e57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006060848603121561256757600080fd5b8335612572816122c0565b925060208401359150604084013561258981612415565b809150509250925092565b60008083601f8401126125a657600080fd5b50813567ffffffffffffffff8111156125be57600080fd5b6020830191508360208260051b85010111156125d957600080fd5b9250929050565b600080600080600080606087890312156125f957600080fd5b863567ffffffffffffffff8082111561261157600080fd5b61261d8a838b01612594565b9098509650602089013591508082111561263657600080fd5b6126428a838b01612594565b9096509450604089013591508082111561265b57600080fd5b5061266889828a01612594565b979a9699509497509295939492505050565b6000806040838503121561268d57600080fd5b8235612698816122c0565b91506020830135612451816122c0565b600080604083850312156126bb57600080fd5b50508035926020909101359150565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600181811c9082168061270b57607f821691505b60208210810361272b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a9457600081815260208120601f850160051c810160208610156127585750805b601f850160051c820191505b8181101561145a57828155600101612764565b67ffffffffffffffff83111561278f5761278f61245c565b6127a38361279d83546126f7565b83612731565b6000601f8411600181146127d757600085156127bf5750838201355b600019600387901b1c1916600186901b1783556117a2565b600083815260209020601f19861690835b8281101561280857868501358255602094850194600190920191016127e8565b50868210156128255760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6020808252601d908201527f63616c6c6572206e6f74206f776e6572206e6f7220617070726f766564000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561289657600080fd5b5051919050565b6000602082840312156128af57600080fd5b815161223d81612415565b6000602082840312156128cc57600080fd5b815161223d816122c0565b600081546128e4816126f7565b600182811680156128fc576001811461291157612940565b60ff1984168752821515830287019450612940565b8560005260208060002060005b858110156129375781548a82015290840190820161291e565b50505082870194505b5050505092915050565b600061295682856128d7565b8351612966818360208801612244565b01949350505050565b60008351612981818460208801612244565b61298d818401856128d7565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761089b5761089b612996565b6000602082840312156129d557600080fd5b813561223d81612415565b8181038181111561089b5761089b612996565b8082018082111561089b5761089b612996565b60208082526026908201527f4552433732313a206e6f6e20455243373231526563656976657220696d706c6560408201526536b2b73a32b960d11b606082015260800190565b600060018201612a5e57612a5e612996565b5060010190565b600082612a8257634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561089b5761089b612996565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ad390830184612268565b9695505050505050565b600060208284031215612aef57600080fd5b815161223d8161220a56fea264697066735822122063d90ae12be41a510adce01ebdeb78fda04bfe68f88e4a9dd95b7ed056a4435764736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002cd46c74514a41b57dc4573727d8b5d1bedf9d93
-----Decoded View---------------
Arg [0] : _mintRecipient (address): 0x2Cd46c74514a41b57DC4573727D8b5d1BEdF9d93
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002cd46c74514a41b57dc4573727d8b5d1bedf9d93
Deployed Bytecode Sourcemap
24164:19248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38437:297;;;;;;;;;;-1:-1:-1;38437:297:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;38437:297:0;;;;;;;;26126:84;;;;;;;;;;;;;:::i;:::-;;39232:92;;;;;;;;;;-1:-1:-1;39311:5:0;;;;;;;;;;;;-1:-1:-1;;;39311:5:0;;;;39232:92;;;;;;;:::i;40638:204::-;;;;;;;;;;-1:-1:-1;40638:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;40638:204:0;1533:203:1;30375:435:0;;;;;;;;;;-1:-1:-1;30375:435:0;;;;;:::i;:::-;;:::i;26790:112::-;;;;;;;;;;-1:-1:-1;26790:112:0;;;;;:::i;:::-;;:::i;26218:84::-;;;;;;;;;;;;;:::i;25347:33::-;;;;;;;;;;;;;;;;;;;2940:25:1;;;2928:2;2913:18;25347:33:0;2794:177:1;37787:93:0;;;;;;;;;;-1:-1:-1;37860:12:0;;37787:93;;24592:33;;;;;;;;;;;;;;;;25260:38;;;;;;;;;;-1:-1:-1;25260:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31098:256;;;;;;;;;;-1:-1:-1;31098:256:0;;;;;:::i;:::-;;:::i;26310:149::-;;;;;;;;;;;;;:::i;31425:177::-;;;;;;;;;;-1:-1:-1;31425:177:0;;;;;:::i;:::-;;:::i;30096:180::-;;;;;;;;;;-1:-1:-1;30096:180:0;;;;;:::i;:::-;;:::i;26910:114::-;;;;;;;;;;-1:-1:-1;26910:114:0;;;;;:::i;:::-;;:::i;27158:82::-;;;;;;;;;;-1:-1:-1;27158:82:0;;;;;:::i;:::-;;:::i;25740:26::-;;;;;;;;;;-1:-1:-1;25740:26:0;;;;;;;;26684:98;;;;;;;;;;-1:-1:-1;26684:98:0;;;;;:::i;:::-;;:::i;37888:477::-;;;;;;;;;;-1:-1:-1;37888:477:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24716:44::-;;;;;;;;;;;;;;;;39050:115;;;;;;;;;;-1:-1:-1;39050:115:0;;;;;:::i;:::-;39114:7;39141:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39141:16:0;;39050:115;38798:190;;;;;;;;;;-1:-1:-1;38798:190:0;;;;;:::i;:::-;;:::i;25387:40::-;;;;;;;;;;;;;;;;24072:83;;;;;;;;;;-1:-1:-1;24142:5:0;;-1:-1:-1;;;;;24142:5:0;24072:83;;26467:209;;;;;;;;;;-1:-1:-1;26467:209:0;;;;;:::i;:::-;;:::i;40482:90::-;;;;;;;;;;;;;:::i;27492:130::-;;;;;;;;;;-1:-1:-1;27492:130:0;;;;;:::i;:::-;;:::i;39393:96::-;;;;;;;;;;-1:-1:-1;39474:7:0;;;;;;;;;;;;-1:-1:-1;;;39474:7:0;;;;39393:96;;24651:46;;;;;;;;;;;;;;;;30882:149;;;;;;;;;;-1:-1:-1;30882:149:0;;;;;:::i;:::-;;:::i;23846:132::-;;;;;;;;;;-1:-1:-1;23846:132:0;;;;;:::i;:::-;;:::i;41933:124::-;;;;;;;;;;-1:-1:-1;41933:124:0;;-1:-1:-1;;;4980:52:1;;4968:2;4953:18;41933:124:0;4836:202:1;31673:300:0;;;;;;;;;;-1:-1:-1;31673:300:0;;;;;:::i;:::-;;:::i;27248:96::-;;;;;;;;;;-1:-1:-1;27248:96:0;;;;;:::i;:::-;;:::i;39560:277::-;;;;;;;;;;-1:-1:-1;39560:277:0;;;;;:::i;:::-;;:::i;37530:249::-;;;;;;;;;;-1:-1:-1;37530:249:0;;;;;:::i;:::-;;:::i;29116:972::-;;;;;;:::i;:::-;;:::i;27352:132::-;;;;;;;;;;-1:-1:-1;27352:132:0;;;;;:::i;:::-;;:::i;27827:487::-;;;;;;;;;;-1:-1:-1;27827:487:0;;;;;:::i;:::-;;:::i;25798:28::-;;;;;;;;;;-1:-1:-1;25798:28:0;;;;;;;-1:-1:-1;;;;;25798:28:0;;;27032:118;;;;;;;;;;-1:-1:-1;27032:118:0;;;;;:::i;:::-;;:::i;40913:162::-;;;;;;;;;;-1:-1:-1;40913:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;41029:27:0;;;41005:4;41029:27;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;;;;40913:162;28322:556;;;;;;;;;;-1:-1:-1;28322:556:0;;;;;:::i;:::-;;:::i;38437:297::-;38531:4;-1:-1:-1;;;;;;38568:40:0;;-1:-1:-1;;;38568:40:0;;:105;;-1:-1:-1;;;;;;;38625:48:0;;-1:-1:-1;;;38625:48:0;38568:105;:158;;;-1:-1:-1;;;;;;;;;;1687:40:0;;;38690:36;38548:178;38437:297;-1:-1:-1;;38437:297:0:o;26126:84::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;;;;;;;;;26181:14:::1;:21:::0;;-1:-1:-1;;26181:21:0::1;26198:4;26181:21;::::0;;26126:84::o;40638:204::-;40706:7;40734:16;40742:7;40734;:16::i;:::-;40726:64;;;;-1:-1:-1;;;40726:64:0;;9559:2:1;40726:64:0;;;9541:21:1;9598:2;9578:18;;;9571:30;9637:34;9617:18;;;9610:62;-1:-1:-1;;;9688:18:1;;;9681:33;9731:19;;40726:64:0;9357:399:1;40726:64:0;-1:-1:-1;40810:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;40810:24:0;;40638:204::o;30375:435::-;30456:16;30464:7;30456;:16::i;:::-;30448:47;;;;-1:-1:-1;;;30448:47:0;;9963:2:1;30448:47:0;;;9945:21:1;10002:2;9982:18;;;9975:30;-1:-1:-1;;;10021:18:1;;;10014:48;10079:18;;30448:47:0;9761:342:1;30448:47:0;30506:15;39141:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39141:16:0;;;;30559:13;;;;;30551:59;;;;-1:-1:-1;;;30551:59:0;;10310:2:1;30551:59:0;;;10292:21:1;10349:2;10329:18;;;10322:30;10388:34;10368:18;;;10361:62;-1:-1:-1;;;10439:18:1;;;10432:31;10480:19;;30551:59:0;10108:397:1;30551:59:0;17478:10;-1:-1:-1;;;;;30645:23:0;;;;:66;;-1:-1:-1;30672:39:0;30689:7;17478:10;40913:162;:::i;30672:39::-;30623:145;;;;-1:-1:-1;;;30623:145:0;;10712:2:1;30623:145:0;;;10694:21:1;10751:2;10731:18;;;10724:30;10790:31;10770:18;;;10763:59;10839:18;;30623:145:0;10510:353:1;30623:145:0;30781:21;30790:2;30794:7;30781:8;:21::i;:::-;30437:373;30375:435;;:::o;26790:112::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;26871:14:::1;:23;26888:6:::0;;26871:14;:23:::1;:::i;26218:84::-:0;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;26272:14:::1;:22:::0;;-1:-1:-1;;26272:22:0::1;::::0;;26218:84::o;31098:256::-;31232:41;17478:10;31251:12;31265:7;31232:18;:41::i;:::-;31224:83;;;;-1:-1:-1;;;31224:83:0;;;;;;;:::i;:::-;31318:28;31328:4;31334:2;31338:7;31318:9;:28::i;26310:149::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;26372:58:::1;::::0;26361:6:::1;::::0;26380:10:::1;::::0;26404:21:::1;::::0;26361:6;26372:58;26361:6;26372:58;26404:21;26380:10;26372:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26360:70;;;26449:1;26441:10;;;::::0;::::1;;26349:110;26310:149::o:0;31425:177::-;31555:39;31572:4;31578:2;31582:7;31555:39;;;;;;;;;;;;:16;:39::i;30096:180::-;17737:1;17882:7;;:19;17874:63;;;;-1:-1:-1;;;17874:63:0;;14081:2:1;17874:63:0;;;14063:21:1;14120:2;14100:18;;;14093:30;14159:33;14139:18;;;14132:61;14210:18;;17874:63:0;13879:355:1;17874:63:0;17737:1;17948:7;:18;30168:41:::1;17478:10:::0;30187:12:::1;17398:98:::0;30168:41:::1;30160:83;;;;-1:-1:-1::0;;;30160:83:0::1;;;;;;;:::i;:::-;30254:14;30260:7;30254:5;:14::i;:::-;-1:-1:-1::0;17693:1:0;17989:7;:22;30096:180::o;26910:114::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;26995:6:::1;:21;27004:12:::0;;26995:6;:21:::1;:::i;27158:82::-:0;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;27220:4:::1;:12:::0;27158:82::o;26684:98::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;26758:7:::1;:16;26768:6:::0;;26758:7;:16:::1;:::i;37888:477::-:0;37950:16;37979:20;38016:17;38026:6;38016:9;:17::i;:::-;38002:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38002:32:0;;37979:55;;38049:17;38059:6;38049:9;:17::i;:::-;38070:1;38049:22;38045:38;;38080:3;37888:477;-1:-1:-1;;37888:477:0:o;38045:38::-;38094:13;38127:6;38122:215;38143:18;;38139:1;:22;38122:215;;;38183:10;;;;:7;:10;;;;;;-1:-1:-1;;;;;38183:20:0;;;:10;;:20;38179:115;;38237:1;38224:3;38228:5;38224:10;;;;;;;;:::i;:::-;;;;;;:14;;;;;38269:7;;;;;38179:115;38320:3;;38122:215;;;-1:-1:-1;38354:3:0;;37888:477;-1:-1:-1;;;37888:477:0:o;38798:190::-;38864:7;-1:-1:-1;;;;;38892:21:0;;38884:60;;;;-1:-1:-1;;;38884:60:0;;14573:2:1;38884:60:0;;;14555:21:1;14612:2;14592:18;;;14585:30;14651:28;14631:18;;;14624:56;14697:18;;38884:60:0;14371:350:1;38884:60:0;-1:-1:-1;;;;;;38962:18:0;;;;;:9;:18;;;;;;;38798:190::o;26467:209::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26544:20:0;::::1;26536:45;;;::::0;-1:-1:-1;;;26536:45:0;;14928:2:1;26536:45:0::1;::::0;::::1;14910:21:1::0;14967:2;14947:18;;;14940:30;-1:-1:-1;;;14986:18:1;;;14979:42;15038:18;;26536:45:0::1;14726:336:1::0;26536:45:0::1;26628:39;::::0;-1:-1:-1;;;26628:39:0;;26661:4:::1;26628:39;::::0;::::1;1679:51:1::0;-1:-1:-1;;;;;26592:23:0;::::1;::::0;::::1;::::0;26616:10:::1;::::0;26592:23;;26628:24:::1;::::0;1652:18:1;;26628:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26592:76;::::0;-1:-1:-1;;;;;;26592:76:0::1;::::0;;;;;;-1:-1:-1;;;;;15448:32:1;;;26592:76:0::1;::::0;::::1;15430:51:1::0;15497:18;;;15490:34;15403:18;;26592:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26467:209:::0;:::o;40482:90::-;40522:7;40549:4;-1:-1:-1;;;;;40549:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40542:22;;40482:90;:::o;27492:130::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;27577:22:::1;:37:::0;27492:130::o;30882:149::-;30970:53;17478:10;31003:9;31014:8;30970:18;:53::i;23846:132::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;23927:5:::1;::::0;23918:25:::1;::::0;-1:-1:-1;;;;;23918:25:0;;::::1;::::0;23927:5:::1;::::0;23918:25:::1;::::0;23927:5:::1;::::0;23918:25:::1;23954:5;:16:::0;;-1:-1:-1;;;;;;23954:16:0::1;-1:-1:-1::0;;;;;23954:16:0;;;::::1;::::0;;;::::1;::::0;;23846:132::o;31673:300::-;31840:41;17478:10;31873:7;31840:18;:41::i;:::-;31832:83;;;;-1:-1:-1;;;31832:83:0;;;;;;;:::i;:::-;31926:39;31940:4;31946:2;31950:7;31959:5;31926:13;:39::i;:::-;31673:300;;;;:::o;27248:96::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;27317:11:::1;:19:::0;27248:96::o;39560:277::-;39651:19;39673:15;;;:6;:15;;;;;;39625:13;;39651:19;39673:15;;:110;;39756:7;39765:17;39774:7;39765:8;:17::i;:::-;39742:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39673:110;;;39705:14;39721:17;39730:7;39721:8;:17::i;:::-;39691:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39673:110;39651:132;;39815:5;39822:6;39801:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39794:35;;;39560:277;;;:::o;37530:249::-;37646:14;;37616:13;;37646:14;;:35;;;;-1:-1:-1;;;;;;37664:17:0;;;;37646:35;:52;;;;;37697:1;37685:9;:13;37646:52;37642:94;;;-1:-1:-1;37715:9:0;;;;;;;;;-1:-1:-1;37715:9:0;;;;37642:94;-1:-1:-1;37746:25:0;;;;;;;;;;;;-1:-1:-1;;;37746:25:0;;;;37530:249;;;;:::o;29116:972::-;29216:14;;;;:45;;;;-1:-1:-1;29234:13:0;;;;;-1:-1:-1;;;;;29234:13:0;:27;;29216:45;29194:114;;;;-1:-1:-1;;;29194:114:0;;17738:2:1;29194:114:0;;;17720:21:1;17777:2;17757:18;;;17750:30;-1:-1:-1;;;17796:18:1;;;17789:49;17855:18;;29194:114:0;17536:343:1;29194:114:0;29347:1;29341:3;:7;29319:74;;;;-1:-1:-1;;;29319:74:0;;18086:2:1;29319:74:0;;;18068:21:1;18125:2;18105:18;;;18098:30;-1:-1:-1;;;18144:18:1;;;18137:46;18200:18;;29319:74:0;17884:340:1;29319:74:0;-1:-1:-1;;;;;29426:16:0;;29404:78;;;;-1:-1:-1;;;29404:78:0;;14928:2:1;29404:78:0;;;14910:21:1;14967:2;14947:18;;;14940:30;-1:-1:-1;;;14986:18:1;;;14979:42;15038:18;;29404:78:0;14726:336:1;29404:78:0;29537:16;29556:4;:37;;29590:3;29583:4;;:10;;;;:::i;:::-;29556:37;;;29577:3;29563:11;;:17;;;;:::i;:::-;29537:56;;29684:8;29671:9;:21;;29649:89;;;;-1:-1:-1;;;29649:89:0;;18736:2:1;29649:89:0;;;18718:21:1;18775:2;18755:18;;;18748:30;-1:-1:-1;;;18794:18:1;;;18787:48;18852:18;;29649:89:0;18534:342:1;29649:89:0;29821:13;;29813:49;;29802:6;;29821:13;;;-1:-1:-1;;;;;29821:13:0;;29848:9;;29802:6;29813:49;29802:6;29813:49;29848:9;29821:13;29813:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29801:61;;;29881:1;29873:42;;;;-1:-1:-1;;;29873:42:0;;19083:2:1;29873:42:0;;;19065:21:1;19122:2;19102:18;;;19095:30;19161;19141:18;;;19134:58;19209:18;;29873:42:0;18881:352:1;29873:42:0;29961:6;29956:125;29977:3;29973:1;:7;29956:125;;;29998:39;30008:2;30012:18;;30032:4;29998:9;:39::i;:::-;30064:3;;29956:125;;;;29183:905;;29116:972;;;:::o;27352:132::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;27438:23:::1;:38:::0;27352:132::o;27827:487::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;27975:3;28004:22;;::::1;27996:50;;;::::0;-1:-1:-1;;;27996:50:0;;19440:2:1;27996:50:0::1;::::0;::::1;19422:21:1::0;19479:2;19459:18;;;19452:30;-1:-1:-1;;;19498:18:1;;;19491:45;19553:18;;27996:50:0::1;19238:339:1::0;27996:50:0::1;28072:6;28067:240;28088:7;28084:1;:11;28067:240;;;28118:6;28113:151;28134:4;;28139:1;28134:7;;;;;;;:::i;:::-;;;;;;;28130:1;:11;28113:151;;;28163:49;28173:3;;28177:1;28173:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28181:18;;28201:7;;28209:1;28201:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28163:9;:49::i;:::-;28243:3;;28113:151;;;-1:-1:-1::0;28290:3:0::1;;28067:240;;;;27939:375;27827:487:::0;;;;;;:::o;27032:118::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;27112:13:::1;:30:::0;;-1:-1:-1;;;;;27112:30:0;;::::1;;;-1:-1:-1::0;;;;;;27112:30:0;;::::1;::::0;;;::::1;::::0;;27032:118::o;28322:556::-;23453:5;;-1:-1:-1;;;;;23453:5:0;23439:10;:19;23431:51;;;;-1:-1:-1;;;23431:51:0;;;;;;;:::i;:::-;28408:11:::1;28422:42;28408:56;;28475:15;28512:3;-1:-1:-1::0;;;;;28493:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28475:56;;28557:7;28546:8;:18;28542:69;;;28592:7;28581:18;;28542:69;28635:10:::0;28621:250:::1;28651:8;28647:1;:12;28621:250;;;28694:35;::::0;-1:-1:-1;;;28694:35:0;;::::1;::::0;::::1;2940:25:1::0;;;28677:14:0::1;::::0;-1:-1:-1;;;;;28694:32:0;::::1;::::0;::::1;::::0;2913:18:1;;28694:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28756:34;::::0;-1:-1:-1;;;28756:34:0;;::::1;::::0;::::1;2940:25:1::0;;;28677:52:0;;-1:-1:-1;28744:9:0::1;::::0;-1:-1:-1;;;;;28756:31:0;::::1;::::0;::::1;::::0;2913:18:1;;28756:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28744:46;;28805:22;28811:6;28819:1;28822:4;28805:5;:22::i;:::-;-1:-1:-1::0;;28854:3:0::1;;28621:250;;;;28397:481;;28322:556:::0;;:::o;41319:119::-;41376:4;41400:16;;;:7;:16;;;;;;-1:-1:-1;;;;;41400:16:0;:30;;;41319:119::o;36734:159::-;36801:24;;;;:15;:24;;;;;;;;:29;;-1:-1:-1;;;;;;36801:29:0;-1:-1:-1;;;;;36801:29:0;;;;;;;;;39141:7;:16;;;;;;;36846:39;;36801:24;;39141:16;;;;;36846:39;;;36734:159;;:::o;41605:320::-;41690:4;41715:16;41723:7;41715;:16::i;:::-;41707:54;;;;-1:-1:-1;;;41707:54:0;;20030:2:1;41707:54:0;;;20012:21:1;20069:2;20049:18;;;20042:30;20108:27;20088:18;;;20081:55;20153:18;;41707:54:0;19828:349:1;41707:54:0;41772:15;39141:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39141:16:0;;;;41825:18;;;;;:53;;;41871:7;-1:-1:-1;;;;;41847:31:0;:20;41859:7;41847:11;:20::i;:::-;-1:-1:-1;;;;;41847:31:0;;41825:53;:91;;;-1:-1:-1;;;;;;41029:27:0;;;41005:4;41029:27;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;41882:34;41817:100;41605:320;-1:-1:-1;;;;41605:320:0:o;35245:645::-;17737:1;17882:7;;:19;17874:63;;;;-1:-1:-1;;;17874:63:0;;14081:2:1;17874:63:0;;;14063:21:1;14120:2;14100:18;;;14093:30;14159:33;14139:18;;;14132:61;14210:18;;17874:63:0;13879:355:1;17874:63:0;17737:1;17948:7;:18;35382:16:::1;35390:7:::0;35382::::1;:16::i;:::-;35374:47;;;::::0;-1:-1:-1;;;35374:47:0;;9963:2:1;35374:47:0::1;::::0;::::1;9945:21:1::0;10002:2;9982:18;;;9975:30;-1:-1:-1;;;10021:18:1;;;10014:48;10079:18;;35374:47:0::1;9761:342:1::0;35374:47:0::1;39114:7:::0;39141:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35440:24:0;;::::1;39141:16:::0;;35440:24:::1;35432:52;;;::::0;-1:-1:-1;;;35432:52:0;;20384:2:1;35432:52:0::1;::::0;::::1;20366:21:1::0;20423:2;20403:18;;;20396:30;-1:-1:-1;;;20442:18:1;;;20435:45;20497:18;;35432:52:0::1;20182:339:1::0;35432:52:0::1;-1:-1:-1::0;;;;;35503:16:0;::::1;35495:41;;;::::0;-1:-1:-1;;;35495:41:0;;20728:2:1;35495:41:0::1;::::0;::::1;20710:21:1::0;20767:2;20747:18;;;20740:30;-1:-1:-1;;;20786:18:1;;;20779:42;20838:18;;35495:41:0::1;20526:336:1::0;35495:41:0::1;35573:1;35555:15;35565:4;35555:9;:15::i;:::-;:19;35547:44;;;::::0;-1:-1:-1;;;35547:44:0;;21069:2:1;35547:44:0::1;::::0;::::1;21051:21:1::0;21108:2;21088:18;;;21081:30;-1:-1:-1;;;21127:18:1;;;21120:42;21179:18;;35547:44:0::1;20867:336:1::0;35547:44:0::1;35656:29;35673:1;35677:7;35656:8;:29::i;:::-;-1:-1:-1::0;;;;;35728:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:20;;35747:1:::1;::::0;35728:15;:20:::1;::::0;35747:1;;35728:20:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;35759:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;:20;;35778:1:::1;::::0;35759:13;:20:::1;::::0;35778:1;;35759:20:::1;:::i;:::-;::::0;;;-1:-1:-1;;35790:16:0::1;::::0;;;:7:::1;:16;::::0;;;;;:21;;-1:-1:-1;;;;;;35790:21:0::1;-1:-1:-1::0;;;;;35790:21:0;;::::1;::::0;;::::1;::::0;;;35855:27;;35790:16;;35855:27;;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;17693:1:0;17989:7;:22;-1:-1:-1;35245:645:0:o;36119:497::-;36179:16;36187:7;36179;:16::i;:::-;36171:49;;;;-1:-1:-1;;;36171:49:0;;21673:2:1;36171:49:0;;;21655:21:1;21712:2;21692:18;;;21685:30;-1:-1:-1;;;21731:18:1;;;21724:50;21791:18;;36171:49:0;21471:344:1;36171:49:0;36260:14;39141:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39141:16:0;;36334:29;;39141:16;36334:8;:29::i;:::-;-1:-1:-1;;;;;36406:17:0;;;;;;:9;:17;;;;;:22;;36427:1;;36406:17;:22;;36427:1;;36406:22;:::i;:::-;;;;-1:-1:-1;;36446:16:0;;;;:7;:16;;;;;36439:23;;-1:-1:-1;;;;;;36439:23:0;;;36510:12;:17;;36439:23;;36446:16;36510:17;;36439:23;;36510:17;:::i;:::-;;;;-1:-1:-1;;36571:37:0;;36600:7;;36596:1;;-1:-1:-1;;;;;36571:37:0;;;;;36596:1;;36571:37;36160:456;36119:497;:::o;37035:319::-;37187:9;-1:-1:-1;;;;;37176:20:0;:7;-1:-1:-1;;;;;37176:20:0;;37168:58;;;;-1:-1:-1;;;37168:58:0;;22022:2:1;37168:58:0;;;22004:21:1;22061:2;22041:18;;;22034:30;22100:27;22080:18;;;22073:55;22145:18;;37168:58:0;21820:349:1;37168:58:0;-1:-1:-1;;;;;37237:27:0;;;;;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;;:49;;-1:-1:-1;;37237:49:0;;;;;;;;;;37302:44;;540:41:1;;;37302:44:0;;513:18:1;37302:44:0;;;;;;;37035:319;;;:::o;34613:295::-;34762:28;34772:4;34778:2;34782:7;34762:9;:28::i;:::-;34809:48;34832:4;34838:2;34842:7;34851:5;34809:22;:48::i;:::-;34801:99;;;;-1:-1:-1;;;34801:99:0;;;;;;;:::i;39901:573::-;39951:27;39995:2;40001:1;39995:7;39991:50;;-1:-1:-1;;40019:10:0;;;;;;;;;;;;-1:-1:-1;;;40019:10:0;;;;;39901:573::o;39991:50::-;40060:2;40051:6;40092:69;40099:6;;40092:69;;40122:5;;;;:::i;:::-;;-1:-1:-1;40142:7:0;;-1:-1:-1;40147:2:0;40142:7;;:::i;:::-;;;40092:69;;;40171:17;40201:3;40191:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40191:14:0;-1:-1:-1;40171:34:0;-1:-1:-1;40225:3:0;40239:198;40246:7;;40239:198;;40274:3;40276:1;40274;:3;:::i;:::-;40270:7;-1:-1:-1;40292:10:0;40322:7;40327:2;40322;:7;:::i;:::-;:12;;40332:2;40322:12;:::i;:::-;40317:17;;:2;:17;:::i;:::-;40306:29;;:2;:29;:::i;:::-;40292:44;;40351:9;40370:4;40363:12;;40351:24;;40400:2;40390:4;40395:1;40390:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;40390:12:0;;;;;;;;-1:-1:-1;40417:8:0;40423:2;40417:8;;:::i;:::-;;;40255:182;;40239:198;;;-1:-1:-1;40461:4:0;39901:573;-1:-1:-1;;;;39901:573:0:o;32370:313::-;32486:27;32492:2;32496:7;32505;32486:5;:27::i;:::-;32546:51;32577:1;32581:2;32585:7;32546:51;;;;;;;;;;;;:22;:51::i;:::-;32524:151;;;;-1:-1:-1;;;32524:151:0;;23298:2:1;32524:151:0;;;23280:21:1;23337:2;23317:18;;;23310:30;23376:34;23356:18;;;23349:62;-1:-1:-1;;;23427:18:1;;;23420:48;23485:19;;32524:151:0;23096:414:1;33019:712:0;33106:16;33114:7;33106;:16::i;:::-;33105:17;33097:58;;;;-1:-1:-1;;;33097:58:0;;23717:2:1;33097:58:0;;;23699:21:1;23756:2;23736:18;;;23729:30;23795;23775:18;;;23768:58;23843:18;;33097:58:0;23515:352:1;33097:58:0;33172:7;33168:345;;;33196:15;;;;:6;:15;;;;;:22;;-1:-1:-1;;33196:22:0;33214:4;33196:22;;;33241;;33233:63;;;;-1:-1:-1;;;33233:63:0;;24074:2:1;33233:63:0;;;24056:21:1;24113:2;24093:18;;;24086:30;24152:26;24132:18;;;24125:54;24196:18;;33233:63:0;23872:348:1;33233:63:0;33325:22;33323:24;;-1:-1:-1;;33323:24:0;;;33168:345;;;33416:1;33390:23;;:27;33382:65;;;;-1:-1:-1;;;33382:65:0;;24427:2:1;33382:65:0;;;24409:21:1;24466:2;24446:18;;;24439:30;24505:27;24485:18;;;24478:55;24550:18;;33382:65:0;24225:349:1;33382:65:0;33476:23;33474:25;;-1:-1:-1;;33474:25:0;;;33168:345;33525:16;;;;:7;:16;;;;;;;;:21;;-1:-1:-1;;;;;;33525:21:0;-1:-1:-1;;;;;33525:21:0;;;;;;;;33584:18;33582:20;;-1:-1:-1;33582:20:0;;;;;;33619:12;33617:14;;;;;;33648:13;;;:9;:13;;;;;;33646:15;;;;;;;;33690:33;33525:16;;;33690:33;;33525:16;;33690:33;33019:712;;;:::o;42622:787::-;42777:4;42798:15;:2;-1:-1:-1;;;;;42798:13:0;;:15::i;:::-;42794:608;;;42834:72;;-1:-1:-1;;;42834:72:0;;-1:-1:-1;;;;;42834:36:0;;;;;:72;;17478:10;;42885:4;;42891:7;;42900:5;;42834:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42834:72:0;;;;;;;;-1:-1:-1;;42834:72:0;;;;;;;;;;;;:::i;:::-;;;42830:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43076:6;:13;43093:1;43076:18;43072:260;;43119:48;;-1:-1:-1;;;43119:48:0;;;;;;;:::i;43072:260::-;43282:6;43276:13;43267:6;43263:2;43259:15;43252:38;42830:517;-1:-1:-1;;;;;;42957:51:0;-1:-1:-1;;;42957:51:0;;-1:-1:-1;42950:58:0;;42794:608;-1:-1:-1;43386:4:0;42622:787;;;;;;:::o;8545:619::-;8605:4;9073:20;;8916:66;9113:23;;;;;;:42;;-1:-1:-1;;9140:15:0;;;9105:51;-1:-1:-1;;8545:619: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;2197:592::-;2268:6;2276;2329:2;2317:9;2308:7;2304:23;2300:32;2297:52;;;2345:1;2342;2335:12;2297:52;2385:9;2372:23;2414:18;2455:2;2447:6;2444:14;2441:34;;;2471:1;2468;2461:12;2441:34;2509:6;2498:9;2494:22;2484:32;;2554:7;2547:4;2543:2;2539:13;2535:27;2525:55;;2576:1;2573;2566:12;2525:55;2616:2;2603:16;2642:2;2634:6;2631:14;2628:34;;;2658:1;2655;2648:12;2628:34;2703:7;2698:2;2689:6;2685:2;2681:15;2677:24;2674:37;2671:57;;;2724:1;2721;2714:12;2671:57;2755:2;2747:11;;;;;2777:6;;-1:-1:-1;2197:592:1;;-1:-1:-1;;;;2197:592:1:o;2976:456::-;3053:6;3061;3069;3122:2;3110:9;3101:7;3097:23;3093:32;3090:52;;;3138:1;3135;3128:12;3090:52;3177:9;3164:23;3196:31;3221:5;3196:31;:::i;:::-;3246:5;-1:-1:-1;3303:2:1;3288:18;;3275:32;3316:33;3275:32;3316:33;:::i;:::-;2976:456;;3368:7;;-1:-1:-1;;;3422:2:1;3407:18;;;;3394:32;;2976:456::o;3437:247::-;3496:6;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;3689:632::-;3860:2;3912:21;;;3982:13;;3885:18;;;4004:22;;;3831:4;;3860:2;4083:15;;;;4057:2;4042:18;;;3831:4;4126:169;4140:6;4137:1;4134:13;4126:169;;;4201:13;;4189:26;;4270:15;;;;4235:12;;;;4162:1;4155:9;4126:169;;;-1:-1:-1;4312:3:1;;3689:632;-1:-1:-1;;;;;;3689:632:1:o;4326:118::-;4412:5;4405:13;4398:21;4391:5;4388:32;4378:60;;4434:1;4431;4424:12;4449:382;4514:6;4522;4575:2;4563:9;4554:7;4550:23;4546:32;4543:52;;;4591:1;4588;4581:12;4543:52;4630:9;4617:23;4649:31;4674:5;4649:31;:::i;:::-;4699:5;-1:-1:-1;4756:2:1;4741:18;;4728:32;4769:30;4728:32;4769:30;:::i;:::-;4818:7;4808:17;;;4449:382;;;;;:::o;5043:127::-;5104:10;5099:3;5095:20;5092:1;5085:31;5135:4;5132:1;5125:15;5159:4;5156:1;5149:15;5175:1266;5270:6;5278;5286;5294;5347:3;5335:9;5326:7;5322:23;5318:33;5315:53;;;5364:1;5361;5354:12;5315:53;5403:9;5390:23;5422:31;5447:5;5422:31;:::i;:::-;5472:5;-1:-1:-1;5529:2:1;5514:18;;5501:32;5542:33;5501:32;5542:33;:::i;:::-;5594:7;-1:-1:-1;5648:2:1;5633:18;;5620:32;;-1:-1:-1;5703:2:1;5688:18;;5675:32;5726:18;5756:14;;;5753:34;;;5783:1;5780;5773:12;5753:34;5821:6;5810:9;5806:22;5796:32;;5866:7;5859:4;5855:2;5851:13;5847:27;5837:55;;5888:1;5885;5878:12;5837:55;5924:2;5911:16;5946:2;5942;5939:10;5936:36;;;5952:18;;:::i;:::-;6027:2;6021:9;5995:2;6081:13;;-1:-1:-1;;6077:22:1;;;6101:2;6073:31;6069:40;6057:53;;;6125:18;;;6145:22;;;6122:46;6119:72;;;6171:18;;:::i;:::-;6211:10;6207:2;6200:22;6246:2;6238:6;6231:18;6286:7;6281:2;6276;6272;6268:11;6264:20;6261:33;6258:53;;;6307:1;6304;6297:12;6258:53;6363:2;6358;6354;6350:11;6345:2;6337:6;6333:15;6320:46;6408:1;6403:2;6398;6390:6;6386:15;6382:24;6375:35;6429:6;6419:16;;;;;;;5175:1266;;;;;;;:::o;6446:450::-;6520:6;6528;6536;6589:2;6577:9;6568:7;6564:23;6560:32;6557:52;;;6605:1;6602;6595:12;6557:52;6644:9;6631:23;6663:31;6688:5;6663:31;:::i;:::-;6713:5;-1:-1:-1;6765:2:1;6750:18;;6737:32;;-1:-1:-1;6821:2:1;6806:18;;6793:32;6834:30;6793:32;6834:30;:::i;:::-;6883:7;6873:17;;;6446:450;;;;;:::o;6901:367::-;6964:8;6974:6;7028:3;7021:4;7013:6;7009:17;7005:27;6995:55;;7046:1;7043;7036:12;6995:55;-1:-1:-1;7069:20:1;;7112:18;7101:30;;7098:50;;;7144:1;7141;7134:12;7098:50;7181:4;7173:6;7169:17;7157:29;;7241:3;7234:4;7224:6;7221:1;7217:14;7209:6;7205:27;7201:38;7198:47;7195:67;;;7258:1;7255;7248:12;7195:67;6901:367;;;;;:::o;7273:1085::-;7428:6;7436;7444;7452;7460;7468;7521:2;7509:9;7500:7;7496:23;7492:32;7489:52;;;7537:1;7534;7527:12;7489:52;7577:9;7564:23;7606:18;7647:2;7639:6;7636:14;7633:34;;;7663:1;7660;7653:12;7633:34;7702:70;7764:7;7755:6;7744:9;7740:22;7702:70;:::i;:::-;7791:8;;-1:-1:-1;7676:96:1;-1:-1:-1;7879:2:1;7864:18;;7851:32;;-1:-1:-1;7895:16:1;;;7892:36;;;7924:1;7921;7914:12;7892:36;7963:72;8027:7;8016:8;8005:9;8001:24;7963:72;:::i;:::-;8054:8;;-1:-1:-1;7937:98:1;-1:-1:-1;8142:2:1;8127:18;;8114:32;;-1:-1:-1;8158:16:1;;;8155:36;;;8187:1;8184;8177:12;8155:36;;8226:72;8290:7;8279:8;8268:9;8264:24;8226:72;:::i;:::-;7273:1085;;;;-1:-1:-1;7273:1085:1;;-1:-1:-1;7273:1085:1;;8317:8;;7273:1085;-1:-1:-1;;;7273:1085:1:o;8363:388::-;8431:6;8439;8492:2;8480:9;8471:7;8467:23;8463:32;8460:52;;;8508:1;8505;8498:12;8460:52;8547:9;8534:23;8566:31;8591:5;8566:31;:::i;:::-;8616:5;-1:-1:-1;8673:2:1;8658:18;;8645:32;8686:33;8645:32;8686:33;:::i;8756:248::-;8824:6;8832;8885:2;8873:9;8864:7;8860:23;8856:32;8853:52;;;8901:1;8898;8891:12;8853:52;-1:-1:-1;;8924:23:1;;;8994:2;8979:18;;;8966:32;;-1:-1:-1;8756:248:1:o;9009:343::-;9211:2;9193:21;;;9250:2;9230:18;;;9223:30;-1:-1:-1;;;9284:2:1;9269:18;;9262:49;9343:2;9328:18;;9009:343::o;10868:380::-;10947:1;10943:12;;;;10990;;;11011:61;;11065:4;11057:6;11053:17;11043:27;;11011:61;11118:2;11110:6;11107:14;11087:18;11084:38;11081:161;;11164:10;11159:3;11155:20;11152:1;11145:31;11199:4;11196:1;11189:15;11227:4;11224:1;11217:15;11081:161;;10868:380;;;:::o;11379:545::-;11481:2;11476:3;11473:11;11470:448;;;11517:1;11542:5;11538:2;11531:17;11587:4;11583:2;11573:19;11657:2;11645:10;11641:19;11638:1;11634:27;11628:4;11624:38;11693:4;11681:10;11678:20;11675:47;;;-1:-1:-1;11716:4:1;11675:47;11771:2;11766:3;11762:12;11759:1;11755:20;11749:4;11745:31;11735:41;;11826:82;11844:2;11837:5;11834:13;11826:82;;;11889:17;;;11870:1;11859:13;11826:82;;12100:1206;12224:18;12219:3;12216:27;12213:53;;;12246:18;;:::i;:::-;12275:94;12365:3;12325:38;12357:4;12351:11;12325:38;:::i;:::-;12319:4;12275:94;:::i;:::-;12395:1;12420:2;12415:3;12412:11;12437:1;12432:616;;;;13092:1;13109:3;13106:93;;;-1:-1:-1;13165:19:1;;;13152:33;13106:93;-1:-1:-1;;12057:1:1;12053:11;;;12049:24;12045:29;12035:40;12081:1;12077:11;;;12032:57;13212:78;;12405:895;;12432:616;11326:1;11319:14;;;11363:4;11350:18;;-1:-1:-1;;12468:17:1;;;12569:9;12591:229;12605:7;12602:1;12599:14;12591:229;;;12694:19;;;12681:33;12666:49;;12801:4;12786:20;;;;12754:1;12742:14;;;;12621:12;12591:229;;;12595:3;12848;12839:7;12836:16;12833:159;;;12972:1;12968:6;12962:3;12956;12953:1;12949:11;12945:21;12941:34;12937:39;12924:9;12919:3;12915:19;12902:33;12898:79;12890:6;12883:95;12833:159;;;13035:1;13029:3;13026:1;13022:11;13018:19;13012:4;13005:33;12405:895;;12100:1206;;;:::o;13311:353::-;13513:2;13495:21;;;13552:2;13532:18;;;13525:30;13591:31;13586:2;13571:18;;13564:59;13655:2;13640:18;;13311:353::o;14239:127::-;14300:10;14295:3;14291:20;14288:1;14281:31;14331:4;14328:1;14321:15;14355:4;14352:1;14345:15;15067:184;15137:6;15190:2;15178:9;15169:7;15165:23;15161:32;15158:52;;;15206:1;15203;15196:12;15158:52;-1:-1:-1;15229:16:1;;15067:184;-1:-1:-1;15067:184:1:o;15535:245::-;15602:6;15655:2;15643:9;15634:7;15630:23;15626:32;15623:52;;;15671:1;15668;15661:12;15623:52;15703:9;15697:16;15722:28;15744:5;15722:28;:::i;15785:251::-;15855:6;15908:2;15896:9;15887:7;15883:23;15879:32;15876:52;;;15924:1;15921;15914:12;15876:52;15956:9;15950:16;15975:31;16000:5;15975:31;:::i;16041:722::-;16091:3;16132:5;16126:12;16161:36;16187:9;16161:36;:::i;:::-;16216:1;16233:18;;;16260:133;;;;16407:1;16402:355;;;;16226:531;;16260:133;-1:-1:-1;;16293:24:1;;16281:37;;16366:14;;16359:22;16347:35;;16338:45;;;-1:-1:-1;16260:133:1;;16402:355;16433:5;16430:1;16423:16;16462:4;16507:2;16504:1;16494:16;16532:1;16546:165;16560:6;16557:1;16554:13;16546:165;;;16638:14;;16625:11;;;16618:35;16681:16;;;;16575:10;;16546:165;;;16550:3;;;16740:6;16735:3;16731:16;16724:23;;16226:531;;;;;16041:722;;;;:::o;16768:389::-;16944:3;16972:38;17006:3;16998:6;16972:38;:::i;:::-;17039:6;17033:13;17055:65;17113:6;17109:2;17102:4;17094:6;17090:17;17055:65;:::i;:::-;17136:15;;16768:389;-1:-1:-1;;;;16768:389:1:o;17162:369::-;17338:3;17376:6;17370:13;17392:66;17451:6;17446:3;17439:4;17431:6;17427:17;17392:66;:::i;:::-;17474:51;17517:6;17512:3;17508:16;17500:6;17474:51;:::i;:::-;17467:58;17162:369;-1:-1:-1;;;;;17162:369:1:o;18229:127::-;18290:10;18285:3;18281:20;18278:1;18271:31;18321:4;18318:1;18311:15;18345:4;18342:1;18335:15;18361:168;18434:9;;;18465;;18482:15;;;18476:22;;18462:37;18452:71;;18503:18;;:::i;19582:241::-;19638:6;19691:2;19679:9;19670:7;19666:23;19662:32;19659:52;;;19707:1;19704;19697:12;19659:52;19746:9;19733:23;19765:28;19787:5;19765:28;:::i;21208:128::-;21275:9;;;21296:11;;;21293:37;;;21310:18;;:::i;21341:125::-;21406:9;;;21427:10;;;21424:36;;;21440:18;;:::i;22174:402::-;22376:2;22358:21;;;22415:2;22395:18;;;22388:30;22454:34;22449:2;22434:18;;22427:62;-1:-1:-1;;;22520:2:1;22505:18;;22498:36;22566:3;22551:19;;22174:402::o;22581:135::-;22620:3;22641:17;;;22638:43;;22661:18;;:::i;:::-;-1:-1:-1;22708:1:1;22697:13;;22581:135::o;22721:217::-;22761:1;22787;22777:132;;22831:10;22826:3;22822:20;22819:1;22812:31;22866:4;22863:1;22856:15;22894:4;22891:1;22884:15;22777:132;-1:-1:-1;22923:9:1;;22721:217::o;22943:148::-;23031:4;23010:12;;;23024;;;23006:31;;23049:13;;23046:39;;;23065:18;;:::i;24579:489::-;-1:-1:-1;;;;;24848:15:1;;;24830:34;;24900:15;;24895:2;24880:18;;24873:43;24947:2;24932:18;;24925:34;;;24995:3;24990:2;24975:18;;24968:31;;;24773:4;;25016:46;;25042:19;;25034:6;25016:46;:::i;:::-;25008:54;24579:489;-1:-1:-1;;;;;;24579:489:1:o;25073:249::-;25142:6;25195:2;25183:9;25174:7;25170:23;25166:32;25163:52;;;25211:1;25208;25201:12;25163:52;25243:9;25237:16;25262:30;25286:5;25262:30;:::i
Swarm Source
ipfs://63d90ae12be41a510adce01ebdeb78fda04bfe68f88e4a9dd95b7ed056a44357
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.