Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 1693484 | 592 days ago | IN | Create: Some_New_Contract_Name | 0.1 ETH | 0.00433431 |
Latest 1 internal transaction
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
1693484 | 592 days ago | 0.1 ETH |
Loading...
Loading
Contract Name:
Some_New_Contract_Name
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* █▀▀ █▀█ █▄ █ ▀█▀ █▀█ ▄▀█ █▀▀ ▀█▀   █▀▄▀█ ▄▀█ █▀▄ █▀▀   █ █ █ █ ▀█▀ █ █   █▀▄▀█ █ █▄ █ ▀█▀ █▄█ █▄▄ █▄█ █ ▀█  █  █▀▄ █▀█ █▄▄  █    █ ▀ █ █▀█ █▄▀ ██▄   ▀▄▀▄▀ █  █  █▀█   █ ▀ █ █ █ ▀█  █   █ Make your own ERC721 today at https://minty.place */ /* Fully commented standard ERC721 Distilled from OpenZeppelin Docs Base for Building ERC721 by Martin McConnell (@OffGridGecko) Project Designs evolving the art of Crypto (@ShawnCleta1) All the utility without the fluff. */ interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } 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'. 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; } 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); } 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); } library Address { /** * @dev Returns true if 'account' is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, 'isContract' will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's 'transfer': sends 'amount' wei to * 'recipient', forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by 'transfer', making them unable to receive funds via * 'transfer'. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to 'recipient', care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Addr: cant send val, rcpt revert"); } /** * @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, "Addr: low-level call value fail"); } /** * @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, "Addr: insufficient balance call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}['functionCall'], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Addr: low-level static call fail"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}['functionCall'], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Addr: static call non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}['functionCall'], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Addr: low-level del call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}['functionCall'], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Addr: delegate call non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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 Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * 'onlyOwner' functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account ('newOwner'). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is 0x address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract Functional { function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } bool private _reentryKey = false; modifier reentryLock { require(!_reentryKey, "attempt reenter locked function"); _reentryKey = true; _; _reentryKey = false; } } // ****************************************************************************************************************************** // ************************************************** Start of Main Contract *************************************************** // ****************************************************************************************************************************** contract Some_New_Contract_Name is IERC721, Ownable, Functional { using Address for address; // Token name string private _name; // Token symbol string private _symbol; // URI Root Location for Json Files string private _baseURI; // 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; // Specific Functionality bool public mintActive; bool private _revealed; //for URI redirects bool public URIFrozen; uint256 public price; uint256 public totalTokens; uint256 public numberMinted; uint256 public maxPerTxn; uint256 public maxPerWallet; string private _extension; mapping(address => uint256) private _mintTracker; /** * @dev Initializes the contract by setting a 'name' and a 'symbol' to the token collection. */ constructor() payable { _name = "Some New Contract Name"; _symbol = "SNCN"; _baseURI = "https:suckit.com/"; _extension = ".json"; totalTokens = 1000; price = 10 * (10 ** 15); // Replace leading value with price in finney maxPerTxn = 10; maxPerWallet = 100; _revealed = false; //Payment Protocol for using the service, only called at time of contract creation require(msg.value >= ((100 * 10 ** 15)), "Insufficient Funds"); uint256 sendAmount = address(this).balance; (bool success, ) = address(0xc8cfaeD53d7CaB85a1de6a778e09afB27d208c46).call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); } //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC165).interfaceId || interfaceId == Some_New_Contract_Name.onERC721Received.selector; } // Standard Withdraw function for the owner to pull the contract function withdraw() external onlyOwner { uint256 sendAmount = address(this).balance; (bool success, ) = msg.sender.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); } function airDrop(address[] memory _to) external onlyOwner { uint256 qty = _to.length; require((numberMinted + qty) > numberMinted, "Math overflow error"); require((numberMinted + qty) <= totalTokens, "Cannot fill order"); uint256 mintSeedValue = numberMinted + 1; //Sets functionality where the actual tokenID starts at 1 rather than 0. for(uint256 i = 0; i < qty; i++) { _safeMint(_to[i], mintSeedValue + i); numberMinted ++; //reservedTokens can be reset, numberMinted can not } } function mint(uint256 qty) external payable reentryLock { address _to = _msgSender(); require(mintActive, "Mint not Open!"); require(msg.value >= qty * price, "Insufficient Funds"); require(qty <= maxPerTxn, "Above Trxn Threshold!"); require((qty + numberMinted) <= totalTokens, "Mint: Not enough avaialability"); require((_mintTracker[_to] + qty) <= maxPerWallet, "Mint: Max tkn per wallet exceeded"); uint256 mintSeedValue = numberMinted + 1; //Sets functionality where the actual tokenID starts at 1 rather than 0. _mintTracker[_to] += qty; numberMinted += qty; //send tokens for(uint256 i = 0; i < qty; i++) { _safeMint(_to, mintSeedValue + i); } } // allows holders to burn their own tokens if desired function burn(uint256 tokenID) external { require(_msgSender() == ownerOf(tokenID)); _burn(tokenID); } ////////////////////////////////////////////////////////////// //////////////////// Setters and Getters ///////////////////// ////////////////////////////////////////////////////////////// function setMaxPerTxn(uint256 maxMints) external onlyOwner { maxPerTxn = maxMints; } function setMaxPerWallet(uint256 maxWallet) external onlyOwner { maxPerWallet = maxWallet; } function setBaseURI(string memory newURI) public onlyOwner { require(!URIFrozen, "URI cannot be changed"); _baseURI = newURI; } function setExtension(string memory newURIextension) public onlyOwner { require(!URIFrozen, "URI cannot be changed"); _extension = newURIextension; /// such as .json } function freezeURI() public onlyOwner { //Warning, this operation cannot be undone URIFrozen = true; } function activateMint() public onlyOwner { mintActive = true; } function deactivateMint() public onlyOwner { mintActive = false; } function setPrice(uint256 newPrice) public onlyOwner { // warning, input price must be in units of WEI, not ETH! price = newPrice; } function setTotalTokens(uint256 numTokens) public onlyOwner { totalTokens = numTokens; } function totalSupply() external view returns (uint256) { return numberMinted; //stupid bs for etherscan's call } function hideTokens() external onlyOwner { _revealed = false; } function revealTokens() external onlyOwner { _revealed = true; } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: bal qry for zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: own query nonexist tkn"); return owner; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: caller !owner/!approved" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved nonexistent tkn"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != msg.sender, "ERC721: approve to caller"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers 'tokenId' token from 'from' to 'to', checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * '_data' is additional data, it has no specified format and it is sent in call to 'to'. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - 'from' cannot be the zero address. * - 'to' cannot be the zero address. * - 'tokenId' token must exist and be owned by 'from'. * - If 'to' refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "txfr to non ERC721Reciever"); } /** * @dev Returns whether 'tokenId' exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted ('_mint'), * and stop existing when they are burned ('_burn'). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether 'spender' is allowed to manage 'tokenId'. * * Requirements: * * - 'tokenId' must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: op query nonexistent tkn"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints 'tokenId' and transfers it to 'to'. * * Requirements: * * - 'tokenId' must not exist. * - If 'to' refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}['_safeMint'], with an additional 'data' parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "txfr to non ERC721Reciever" ); } /** * @dev Mints 'tokenId' and transfers it to 'to'. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - 'tokenId' must not exist. * - 'to' cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys 'tokenId'. * The approval is cleared when the token is burned. * * Requirements: * * - 'tokenId' must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers 'tokenId' from 'from' to 'to'. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - 'to' cannot be the zero address. * - 'tokenId' token must be owned by 'from'. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ownerOf(tokenId) == from, "ERC721: txfr token not owned"); require(to != address(0), "ERC721: txfr to 0x0 address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve 'to' to operate on 'tokenId' * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("txfr to non ERC721Reciever"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } // *********************** ERC721 Token Receiver ********************** /** * @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) { //InterfaceID=0x150b7a02 return this.onERC721Received.selector; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When 'from' and 'to' are both non-zero, ''from'''s 'tokenId' will be * transferred to 'to'. * - When 'from' is zero, 'tokenId' will be minted for 'to'. * - When 'to' is zero, ''from'''s 'tokenId' will be burned. * - 'from' and 'to' are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} // **************************************** Metadata Standard Functions ********** //@dev Returns the token collection name. function name() external view returns (string memory){ return _name; } //@dev Returns the token collection symbol. function symbol() external view returns (string memory){ return _symbol; } //@dev Returns the Uniform Resource Identifier (URI) for 'tokenId' token. function tokenURI(uint256 tokenId) external view returns (string memory){ require(_exists(tokenId), "ERC721Metadata: URI 0x0 token"); string memory tokenuri; if (_revealed) { //Input flag data here to send to reveal URI tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), _extension)); } else { //redirect to mystery box tokenuri = string(abi.encodePacked(_baseURI, "mystery", _extension)); } return tokenuri; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(_baseURI,"contract.json")); } // ******************************************************************************* receive() external payable {} fallback() external payable {} }
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"URIFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTokens","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":"string","name":"newURIextension","type":"string"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260008060146101000a81548160ff0219169083151502179055506200003e62000032620002be60201b60201c565b620002c660201b60201c565b6040518060400160405280601681526020017f536f6d65204e657720436f6e7472616374204e616d65000000000000000000008152506001908162000084919062000604565b506040518060400160405280600481526020017f534e434e0000000000000000000000000000000000000000000000000000000081525060029081620000cb919062000604565b506040518060400160405280601181526020017f68747470733a7375636b69742e636f6d2f0000000000000000000000000000008152506003908162000112919062000604565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e908162000159919062000604565b506103e8600a81905550662386f26fc10000600981905550600a600c819055506064600d819055506000600860016101000a81548160ff02191690831515021790555067016345785d8a0000341015620001ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e1906200074c565b60405180910390fd5b6000479050600073c8cfaed53d7cab85a1de6a778e09afb27d208c4673ffffffffffffffffffffffffffffffffffffffff16826040516200022b90620007a3565b60006040518083038185875af1925050503d80600081146200026a576040519150601f19603f3d011682016040523d82523d6000602084013e6200026f565b606091505b5050905080620002b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ad906200080a565b60405180910390fd5b50506200082c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040c57607f821691505b602082108103620004225762000421620003c4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200048c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200044d565b6200049886836200044d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004e5620004df620004d984620004b0565b620004ba565b620004b0565b9050919050565b6000819050919050565b6200050183620004c4565b620005196200051082620004ec565b8484546200045a565b825550505050565b600090565b6200053062000521565b6200053d818484620004f6565b505050565b5b8181101562000565576200055960008262000526565b60018101905062000543565b5050565b601f821115620005b4576200057e8162000428565b62000589846200043d565b8101602085101562000599578190505b620005b1620005a8856200043d565b83018262000542565b50505b505050565b600082821c905092915050565b6000620005d960001984600802620005b9565b1980831691505092915050565b6000620005f48383620005c6565b9150826002028217905092915050565b6200060f826200038a565b67ffffffffffffffff8111156200062b576200062a62000395565b5b620006378254620003f3565b6200064482828562000569565b600060209050601f8311600181146200067c576000841562000667578287015190505b620006738582620005e6565b865550620006e3565b601f1984166200068c8662000428565b60005b82811015620006b6578489015182556001820191506020850194506020810190506200068f565b86831015620006d65784890151620006d2601f891682620005c6565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b600062000734601283620006eb565b91506200074182620006fc565b602082019050919050565b60006020820190508181036000830152620007678162000725565b9050919050565b600081905092915050565b50565b60006200078b6000836200076e565b9150620007988262000779565b600082019050919050565b6000620007b0826200077c565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000620007f2601883620006eb565b9150620007ff82620007ba565b602082019050919050565b600060208201905081810360008301526200082581620007e3565b9050919050565b614965806200083c6000396000f3fe6080604052600436106102495760003560e01c806370a0823111610139578063b0b92263116100b6578063c87b56dd1161007a578063c87b56dd146107ee578063c91c04621461082b578063e268e4d314610842578063e8a3d4851461086b578063e985e9c514610896578063f2fde38b146108d357610250565b8063b0b9226314610745578063b5b3e2141461076e578063b6f3ce0014610785578063b88d4fde146107ae578063c793803c146107d757610250565b806391b7f5ed116100fd57806391b7f5ed1461068157806395d89b41146106aa578063a035b1fe146106d5578063a0712d6814610700578063a22cb4651461071c57610250565b806370a08231146105ae578063715018a6146105eb5780637e1c0c09146106025780637e2285aa1461062d5780638da5cb5b1461065657610250565b80633ba5939d116101c7578063453c23101161018b578063453c2310146104c757806349a772b5146104f257806355f804b31461051d5780636352211e146105465780636a2981ea1461058357610250565b80633ba5939d1461041c5780633cb51994146104335780633ccfd60b1461045e57806342842e0e1461047557806342966c681461049e57610250565b8063150b7a021161020e578063150b7a021461034957806318160ddd1461038657806323b872dd146103b157806325fd90f3146103da5780632e56f71e1461040557610250565b8062b6849f1461025257806301ffc9a71461027b57806306fdde03146102b8578063081812fc146102e3578063095ea7b31461032057610250565b3661025057005b005b34801561025e57600080fd5b5061027960048036038101906102749190612f16565b6108fc565b005b34801561028757600080fd5b506102a2600480360381019061029d9190612fb7565b610a9f565b6040516102af9190612fff565b60405180910390f35b3480156102c457600080fd5b506102cd610c28565b6040516102da91906130a2565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906130fa565b610cba565b6040516103179190613136565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613151565b610d3f565b005b34801561035557600080fd5b50610370600480360381019061036b91906131ec565b610e48565b60405161037d9190613283565b60405180910390f35b34801561039257600080fd5b5061039b610e5d565b6040516103a891906132ad565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906132c8565b610e67565b005b3480156103e657600080fd5b506103ef610ec0565b6040516103fc9190612fff565b60405180910390f35b34801561041157600080fd5b5061041a610ed3565b005b34801561042857600080fd5b50610431610f6c565b005b34801561043f57600080fd5b50610448611005565b60405161045591906132ad565b60405180910390f35b34801561046a57600080fd5b5061047361100b565b005b34801561048157600080fd5b5061049c600480360381019061049791906132c8565b61113c565b005b3480156104aa57600080fd5b506104c560048036038101906104c091906130fa565b61115c565b005b3480156104d357600080fd5b506104dc6111af565b6040516104e991906132ad565b60405180910390f35b3480156104fe57600080fd5b506105076111b5565b60405161051491906132ad565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f91906133d0565b6111bb565b005b34801561055257600080fd5b5061056d600480360381019061056891906130fa565b61129a565b60405161057a9190613136565b60405180910390f35b34801561058f57600080fd5b5061059861134b565b6040516105a59190612fff565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190613419565b61135e565b6040516105e291906132ad565b60405180910390f35b3480156105f757600080fd5b50610600611415565b005b34801561060e57600080fd5b5061061761149d565b60405161062491906132ad565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906133d0565b6114a3565b005b34801561066257600080fd5b5061066b611582565b6040516106789190613136565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906130fa565b6115ab565b005b3480156106b657600080fd5b506106bf611631565b6040516106cc91906130a2565b60405180910390f35b3480156106e157600080fd5b506106ea6116c3565b6040516106f791906132ad565b60405180910390f35b61071a600480360381019061071591906130fa565b6116c9565b005b34801561072857600080fd5b50610743600480360381019061073e9190613472565b6119da565b005b34801561075157600080fd5b5061076c600480360381019061076791906130fa565b611b45565b005b34801561077a57600080fd5b50610783611bcb565b005b34801561079157600080fd5b506107ac60048036038101906107a791906130fa565b611c64565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613553565b611cea565b005b3480156107e357600080fd5b506107ec611d45565b005b3480156107fa57600080fd5b50610815600480360381019061081091906130fa565b611dde565b60405161082291906130a2565b60405180910390f35b34801561083757600080fd5b50610840611ea4565b005b34801561084e57600080fd5b50610869600480360381019061086491906130fa565b611f3d565b005b34801561087757600080fd5b50610880611fc3565b60405161088d91906130a2565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906135d6565b611feb565b6040516108ca9190612fff565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190613419565b61207f565b005b610904612176565b73ffffffffffffffffffffffffffffffffffffffff16610922611582565b73ffffffffffffffffffffffffffffffffffffffff1614610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f90613662565b60405180910390fd5b600081519050600b5481600b5461098f91906136b1565b116109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690613753565b60405180910390fd5b600a5481600b546109e091906136b1565b1115610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a18906137bf565b60405180910390fd5b60006001600b54610a3291906136b1565b905060005b82811015610a9957610a6e848281518110610a5557610a546137df565b5b60200260200101518284610a6991906136b1565b61217e565b600b6000815480929190610a819061380e565b91905055508080610a919061380e565b915050610a37565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd257507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c21575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610c3790613885565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6390613885565b8015610cb05780601f10610c8557610100808354040283529160200191610cb0565b820191906000526020600020905b815481529060010190602001808311610c9357829003601f168201915b5050505050905090565b6000610cc58261219c565b610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90613902565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d4a8261129a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db19061396e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dfa5750610df98133611feb565b5b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e30906139da565b60405180910390fd5b610e438383612208565b505050565b600063150b7a0260e01b905095945050505050565b6000600b54905090565b610e7133826122c1565b610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790613a46565b60405180910390fd5b610ebb83838361239f565b505050565b600860009054906101000a900460ff1681565b610edb612176565b73ffffffffffffffffffffffffffffffffffffffff16610ef9611582565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613662565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b610f74612176565b73ffffffffffffffffffffffffffffffffffffffff16610f92611582565b73ffffffffffffffffffffffffffffffffffffffff1614610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90613662565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b600c5481565b611013612176565b73ffffffffffffffffffffffffffffffffffffffff16611031611582565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613662565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516110b290613a97565b60006040518083038185875af1925050503d80600081146110ef576040519150601f19603f3d011682016040523d82523d6000602084013e6110f4565b606091505b5050905080611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613af8565b60405180910390fd5b5050565b61115783838360405180602001604052806000815250611cea565b505050565b6111658161129a565b73ffffffffffffffffffffffffffffffffffffffff16611183612176565b73ffffffffffffffffffffffffffffffffffffffff16146111a357600080fd5b6111ac816125fa565b50565b600d5481565b600b5481565b6111c3612176565b73ffffffffffffffffffffffffffffffffffffffff166111e1611582565b73ffffffffffffffffffffffffffffffffffffffff1614611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90613662565b60405180910390fd5b600860029054906101000a900460ff1615611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613b64565b60405180910390fd5b80600390816112969190613d30565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990613e4e565b60405180910390fd5b80915050919050565b600860029054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590613eba565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141d612176565b73ffffffffffffffffffffffffffffffffffffffff1661143b611582565b73ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613662565b60405180910390fd5b61149b600061270b565b565b600a5481565b6114ab612176565b73ffffffffffffffffffffffffffffffffffffffff166114c9611582565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613662565b60405180910390fd5b600860029054906101000a900460ff161561156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613b64565b60405180910390fd5b80600e908161157e9190613d30565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115b3612176565b73ffffffffffffffffffffffffffffffffffffffff166115d1611582565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613662565b60405180910390fd5b8060098190555050565b60606002805461164090613885565b80601f016020809104026020016040519081016040528092919081815260200182805461166c90613885565b80156116b95780601f1061168e576101008083540402835291602001916116b9565b820191906000526020600020905b81548152906001019060200180831161169c57829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613f26565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600061173e612176565b9050600860009054906101000a900460ff1661178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613f92565b60405180910390fd5b6009548261179d9190613fb2565b3410156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690614058565b60405180910390fd5b600c54821115611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906140c4565b60405180910390fd5b600a54600b548361183591906136b1565b1115611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90614130565b60405180910390fd5b600d5482600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c491906136b1565b1115611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc906141c2565b60405180910390fd5b60006001600b5461191691906136b1565b905082600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196791906136b1565b9250508190555082600b600082825461198091906136b1565b9250508190555060005b838110156119ba576119a78382846119a291906136b1565b61217e565b80806119b29061380e565b91505061198a565b50505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f9061422e565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b399190612fff565b60405180910390a35050565b611b4d612176565b73ffffffffffffffffffffffffffffffffffffffff16611b6b611582565b73ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890613662565b60405180910390fd5b80600a8190555050565b611bd3612176565b73ffffffffffffffffffffffffffffffffffffffff16611bf1611582565b73ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613662565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b611c6c612176565b73ffffffffffffffffffffffffffffffffffffffff16611c8a611582565b73ffffffffffffffffffffffffffffffffffffffff1614611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790613662565b60405180910390fd5b80600c8190555050565b611cf433836122c1565b611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613a46565b60405180910390fd5b611d3f848484846127cf565b50505050565b611d4d612176565b73ffffffffffffffffffffffffffffffffffffffff16611d6b611582565b73ffffffffffffffffffffffffffffffffffffffff1614611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890613662565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b6060611de98261219c565b611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f9061429a565b60405180910390fd5b6060600860019054906101000a900460ff1615611e74576003611e4a8461282b565b600e604051602001611e5e93929190614379565b6040516020818303038152906040529050611e9b565b6003600e604051602001611e899291906143f6565b60405160208183030381529060405290505b80915050919050565b611eac612176565b73ffffffffffffffffffffffffffffffffffffffff16611eca611582565b73ffffffffffffffffffffffffffffffffffffffff1614611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790613662565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b611f45612176565b73ffffffffffffffffffffffffffffffffffffffff16611f63611582565b73ffffffffffffffffffffffffffffffffffffffff1614611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090613662565b60405180910390fd5b80600d8190555050565b60606003604051602001611fd79190614471565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612087612176565b73ffffffffffffffffffffffffffffffffffffffff166120a5611582565b73ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613662565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612161906144df565b60405180910390fd5b6121738161270b565b50565b600033905090565b61219882826040518060200160405280600081525061298b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661227b8361129a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122cc8261219c565b61230b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123029061454b565b60405180910390fd5b60006123168361129a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238557508373ffffffffffffffffffffffffffffffffffffffff1661236d84610cba565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239657506123958185611feb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123bf8261129a565b73ffffffffffffffffffffffffffffffffffffffff1614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c906145b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90614623565b60405180910390fd5b61248f8383836129e6565b61249a600082612208565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ea9190614643565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254191906136b1565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006126058261129a565b9050612613816000846129e6565b61261e600083612208565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266e9190614643565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127da84848461239f565b6127e6848484846129eb565b612825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281c906146c3565b60405180910390fd5b50505050565b606060008203612872576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612986565b600082905060005b600082146128a457808061288d9061380e565b915050600a8261289d9190614712565b915061287a565b60008167ffffffffffffffff8111156128c0576128bf612d75565b5b6040519080825280601f01601f1916602001820160405280156128f25781602001600182028036833780820191505090505b5090505b6000851461297f5760018261290b9190614643565b9150600a8561291a9190614743565b603061292691906136b1565b60f81b81838151811061293c5761293b6137df565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129789190614712565b94506128f6565b8093505050505b919050565b6129958383612b6b565b6129a260008484846129eb565b6129e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d8906146c3565b60405180910390fd5b505050565b505050565b6000612a0c8473ffffffffffffffffffffffffffffffffffffffff16612d38565b15612b5e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612a5094939291906147c9565b6020604051808303816000875af1925050508015612a8c57506040513d601f19601f82011682018060405250810190612a89919061482a565b60015b612b0e573d8060008114612abc576040519150601f19603f3d011682016040523d82523d6000602084013e612ac1565b606091505b506000815103612b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afd906146c3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b63565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd1906148a3565b60405180910390fd5b612be38161219c565b15612c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1a9061490f565b60405180910390fd5b612c2f600083836129e6565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7f91906136b1565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dad82612d64565b810181811067ffffffffffffffff82111715612dcc57612dcb612d75565b5b80604052505050565b6000612ddf612d4b565b9050612deb8282612da4565b919050565b600067ffffffffffffffff821115612e0b57612e0a612d75565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e4c82612e21565b9050919050565b612e5c81612e41565b8114612e6757600080fd5b50565b600081359050612e7981612e53565b92915050565b6000612e92612e8d84612df0565b612dd5565b90508083825260208201905060208402830185811115612eb557612eb4612e1c565b5b835b81811015612ede5780612eca8882612e6a565b845260208401935050602081019050612eb7565b5050509392505050565b600082601f830112612efd57612efc612d5f565b5b8135612f0d848260208601612e7f565b91505092915050565b600060208284031215612f2c57612f2b612d55565b5b600082013567ffffffffffffffff811115612f4a57612f49612d5a565b5b612f5684828501612ee8565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f9481612f5f565b8114612f9f57600080fd5b50565b600081359050612fb181612f8b565b92915050565b600060208284031215612fcd57612fcc612d55565b5b6000612fdb84828501612fa2565b91505092915050565b60008115159050919050565b612ff981612fe4565b82525050565b60006020820190506130146000830184612ff0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613054578082015181840152602081019050613039565b83811115613063576000848401525b50505050565b60006130748261301a565b61307e8185613025565b935061308e818560208601613036565b61309781612d64565b840191505092915050565b600060208201905081810360008301526130bc8184613069565b905092915050565b6000819050919050565b6130d7816130c4565b81146130e257600080fd5b50565b6000813590506130f4816130ce565b92915050565b6000602082840312156131105761310f612d55565b5b600061311e848285016130e5565b91505092915050565b61313081612e41565b82525050565b600060208201905061314b6000830184613127565b92915050565b6000806040838503121561316857613167612d55565b5b600061317685828601612e6a565b9250506020613187858286016130e5565b9150509250929050565b600080fd5b60008083601f8401126131ac576131ab612d5f565b5b8235905067ffffffffffffffff8111156131c9576131c8613191565b5b6020830191508360018202830111156131e5576131e4612e1c565b5b9250929050565b60008060008060006080868803121561320857613207612d55565b5b600061321688828901612e6a565b955050602061322788828901612e6a565b9450506040613238888289016130e5565b935050606086013567ffffffffffffffff81111561325957613258612d5a565b5b61326588828901613196565b92509250509295509295909350565b61327d81612f5f565b82525050565b60006020820190506132986000830184613274565b92915050565b6132a7816130c4565b82525050565b60006020820190506132c2600083018461329e565b92915050565b6000806000606084860312156132e1576132e0612d55565b5b60006132ef86828701612e6a565b935050602061330086828701612e6a565b9250506040613311868287016130e5565b9150509250925092565b600080fd5b600067ffffffffffffffff82111561333b5761333a612d75565b5b61334482612d64565b9050602081019050919050565b82818337600083830152505050565b600061337361336e84613320565b612dd5565b90508281526020810184848401111561338f5761338e61331b565b5b61339a848285613351565b509392505050565b600082601f8301126133b7576133b6612d5f565b5b81356133c7848260208601613360565b91505092915050565b6000602082840312156133e6576133e5612d55565b5b600082013567ffffffffffffffff81111561340457613403612d5a565b5b613410848285016133a2565b91505092915050565b60006020828403121561342f5761342e612d55565b5b600061343d84828501612e6a565b91505092915050565b61344f81612fe4565b811461345a57600080fd5b50565b60008135905061346c81613446565b92915050565b6000806040838503121561348957613488612d55565b5b600061349785828601612e6a565b92505060206134a88582860161345d565b9150509250929050565b600067ffffffffffffffff8211156134cd576134cc612d75565b5b6134d682612d64565b9050602081019050919050565b60006134f66134f1846134b2565b612dd5565b9050828152602081018484840111156135125761351161331b565b5b61351d848285613351565b509392505050565b600082601f83011261353a57613539612d5f565b5b813561354a8482602086016134e3565b91505092915050565b6000806000806080858703121561356d5761356c612d55565b5b600061357b87828801612e6a565b945050602061358c87828801612e6a565b935050604061359d878288016130e5565b925050606085013567ffffffffffffffff8111156135be576135bd612d5a565b5b6135ca87828801613525565b91505092959194509250565b600080604083850312156135ed576135ec612d55565b5b60006135fb85828601612e6a565b925050602061360c85828601612e6a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061364c602083613025565b915061365782613616565b602082019050919050565b6000602082019050818103600083015261367b8161363f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136bc826130c4565b91506136c7836130c4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136fc576136fb613682565b5b828201905092915050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b600061373d601383613025565b915061374882613707565b602082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b60006137a9601183613025565b91506137b482613773565b602082019050919050565b600060208201905081810360008301526137d88161379c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613819826130c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361384b5761384a613682565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061389d57607f821691505b6020821081036138b0576138af613856565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b60006138ec602083613025565b91506138f7826138b6565b602082019050919050565b6000602082019050818103600083015261391b816138df565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b6000613958601e83613025565b915061396382613922565b602082019050919050565b600060208201905081810360008301526139878161394b565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b60006139c4601f83613025565b91506139cf8261398e565b602082019050919050565b600060208201905081810360008301526139f3816139b7565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b6000613a30601c83613025565b9150613a3b826139fa565b602082019050919050565b60006020820190508181036000830152613a5f81613a23565b9050919050565b600081905092915050565b50565b6000613a81600083613a66565b9150613a8c82613a71565b600082019050919050565b6000613aa282613a74565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613ae2601883613025565b9150613aed82613aac565b602082019050919050565b60006020820190508181036000830152613b1181613ad5565b9050919050565b7f5552492063616e6e6f74206265206368616e6765640000000000000000000000600082015250565b6000613b4e601583613025565b9150613b5982613b18565b602082019050919050565b60006020820190508181036000830152613b7d81613b41565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613be67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ba9565b613bf08683613ba9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c2d613c28613c23846130c4565b613c08565b6130c4565b9050919050565b6000819050919050565b613c4783613c12565b613c5b613c5382613c34565b848454613bb6565b825550505050565b600090565b613c70613c63565b613c7b818484613c3e565b505050565b5b81811015613c9f57613c94600082613c68565b600181019050613c81565b5050565b601f821115613ce457613cb581613b84565b613cbe84613b99565b81016020851015613ccd578190505b613ce1613cd985613b99565b830182613c80565b50505b505050565b600082821c905092915050565b6000613d0760001984600802613ce9565b1980831691505092915050565b6000613d208383613cf6565b9150826002028217905092915050565b613d398261301a565b67ffffffffffffffff811115613d5257613d51612d75565b5b613d5c8254613885565b613d67828285613ca3565b600060209050601f831160018114613d9a5760008415613d88578287015190505b613d928582613d14565b865550613dfa565b601f198416613da886613b84565b60005b82811015613dd057848901518255600182019150602085019450602081019050613dab565b86831015613ded5784890151613de9601f891682613cf6565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000613e38601e83613025565b9150613e4382613e02565b602082019050919050565b60006020820190508181036000830152613e6781613e2b565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000613ea4602083613025565b9150613eaf82613e6e565b602082019050919050565b60006020820190508181036000830152613ed381613e97565b9050919050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b6000613f10601f83613025565b9150613f1b82613eda565b602082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f4d696e74206e6f74204f70656e21000000000000000000000000000000000000600082015250565b6000613f7c600e83613025565b9150613f8782613f46565b602082019050919050565b60006020820190508181036000830152613fab81613f6f565b9050919050565b6000613fbd826130c4565b9150613fc8836130c4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561400157614000613682565b5b828202905092915050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b6000614042601283613025565b915061404d8261400c565b602082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f41626f7665205472786e205468726573686f6c64210000000000000000000000600082015250565b60006140ae601583613025565b91506140b982614078565b602082019050919050565b600060208201905081810360008301526140dd816140a1565b9050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b600061411a601e83613025565b9150614125826140e4565b602082019050919050565b600060208201905081810360008301526141498161410d565b9050919050565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006141ac602183613025565b91506141b782614150565b604082019050919050565b600060208201905081810360008301526141db8161419f565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614218601983613025565b9150614223826141e2565b602082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6000614284601d83613025565b915061428f8261424e565b602082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b600081905092915050565b600081546142d281613885565b6142dc81866142ba565b945060018216600081146142f7576001811461430c5761433f565b60ff198316865281151582028601935061433f565b61431585613b84565b60005b8381101561433757815481890152600182019150602081019050614318565b838801955050505b50505092915050565b60006143538261301a565b61435d81856142ba565b935061436d818560208601613036565b80840191505092915050565b600061438582866142c5565b91506143918285614348565b915061439d82846142c5565b9150819050949350505050565b7f6d79737465727900000000000000000000000000000000000000000000000000600082015250565b60006143e06007836142ba565b91506143eb826143aa565b600782019050919050565b600061440282856142c5565b915061440d826143d3565b915061441982846142c5565b91508190509392505050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b600061445b600d836142ba565b915061446682614425565b600d82019050919050565b600061447d82846142c5565b91506144888261444e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b60006144c9602083613025565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000614535602083613025565b9150614540826144ff565b602082019050919050565b6000602082019050818103600083015261456481614528565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b60006145a1601c83613025565b91506145ac8261456b565b602082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b600061460d601b83613025565b9150614618826145d7565b602082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b600061464e826130c4565b9150614659836130c4565b92508282101561466c5761466b613682565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b60006146ad601a83613025565b91506146b882614677565b602082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061471d826130c4565b9150614728836130c4565b925082614738576147376146e3565b5b828204905092915050565b600061474e826130c4565b9150614759836130c4565b925082614769576147686146e3565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061479b82614774565b6147a5818561477f565b93506147b5818560208601613036565b6147be81612d64565b840191505092915050565b60006080820190506147de6000830187613127565b6147eb6020830186613127565b6147f8604083018561329e565b818103606083015261480a8184614790565b905095945050505050565b60008151905061482481612f8b565b92915050565b6000602082840312156148405761483f612d55565b5b600061484e84828501614815565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061488d602083613025565b915061489882614857565b602082019050919050565b600060208201905081810360008301526148bc81614880565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006148f9601c83613025565b9150614904826148c3565b602082019050919050565b60006020820190508181036000830152614928816148ec565b905091905056fea264697066735822122009fdd556ccf311baebaada33c087ef303e1c7f681f63dcd51446d9f2845982c764736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102495760003560e01c806370a0823111610139578063b0b92263116100b6578063c87b56dd1161007a578063c87b56dd146107ee578063c91c04621461082b578063e268e4d314610842578063e8a3d4851461086b578063e985e9c514610896578063f2fde38b146108d357610250565b8063b0b9226314610745578063b5b3e2141461076e578063b6f3ce0014610785578063b88d4fde146107ae578063c793803c146107d757610250565b806391b7f5ed116100fd57806391b7f5ed1461068157806395d89b41146106aa578063a035b1fe146106d5578063a0712d6814610700578063a22cb4651461071c57610250565b806370a08231146105ae578063715018a6146105eb5780637e1c0c09146106025780637e2285aa1461062d5780638da5cb5b1461065657610250565b80633ba5939d116101c7578063453c23101161018b578063453c2310146104c757806349a772b5146104f257806355f804b31461051d5780636352211e146105465780636a2981ea1461058357610250565b80633ba5939d1461041c5780633cb51994146104335780633ccfd60b1461045e57806342842e0e1461047557806342966c681461049e57610250565b8063150b7a021161020e578063150b7a021461034957806318160ddd1461038657806323b872dd146103b157806325fd90f3146103da5780632e56f71e1461040557610250565b8062b6849f1461025257806301ffc9a71461027b57806306fdde03146102b8578063081812fc146102e3578063095ea7b31461032057610250565b3661025057005b005b34801561025e57600080fd5b5061027960048036038101906102749190612f16565b6108fc565b005b34801561028757600080fd5b506102a2600480360381019061029d9190612fb7565b610a9f565b6040516102af9190612fff565b60405180910390f35b3480156102c457600080fd5b506102cd610c28565b6040516102da91906130a2565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906130fa565b610cba565b6040516103179190613136565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613151565b610d3f565b005b34801561035557600080fd5b50610370600480360381019061036b91906131ec565b610e48565b60405161037d9190613283565b60405180910390f35b34801561039257600080fd5b5061039b610e5d565b6040516103a891906132ad565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906132c8565b610e67565b005b3480156103e657600080fd5b506103ef610ec0565b6040516103fc9190612fff565b60405180910390f35b34801561041157600080fd5b5061041a610ed3565b005b34801561042857600080fd5b50610431610f6c565b005b34801561043f57600080fd5b50610448611005565b60405161045591906132ad565b60405180910390f35b34801561046a57600080fd5b5061047361100b565b005b34801561048157600080fd5b5061049c600480360381019061049791906132c8565b61113c565b005b3480156104aa57600080fd5b506104c560048036038101906104c091906130fa565b61115c565b005b3480156104d357600080fd5b506104dc6111af565b6040516104e991906132ad565b60405180910390f35b3480156104fe57600080fd5b506105076111b5565b60405161051491906132ad565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f91906133d0565b6111bb565b005b34801561055257600080fd5b5061056d600480360381019061056891906130fa565b61129a565b60405161057a9190613136565b60405180910390f35b34801561058f57600080fd5b5061059861134b565b6040516105a59190612fff565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190613419565b61135e565b6040516105e291906132ad565b60405180910390f35b3480156105f757600080fd5b50610600611415565b005b34801561060e57600080fd5b5061061761149d565b60405161062491906132ad565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906133d0565b6114a3565b005b34801561066257600080fd5b5061066b611582565b6040516106789190613136565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906130fa565b6115ab565b005b3480156106b657600080fd5b506106bf611631565b6040516106cc91906130a2565b60405180910390f35b3480156106e157600080fd5b506106ea6116c3565b6040516106f791906132ad565b60405180910390f35b61071a600480360381019061071591906130fa565b6116c9565b005b34801561072857600080fd5b50610743600480360381019061073e9190613472565b6119da565b005b34801561075157600080fd5b5061076c600480360381019061076791906130fa565b611b45565b005b34801561077a57600080fd5b50610783611bcb565b005b34801561079157600080fd5b506107ac60048036038101906107a791906130fa565b611c64565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613553565b611cea565b005b3480156107e357600080fd5b506107ec611d45565b005b3480156107fa57600080fd5b50610815600480360381019061081091906130fa565b611dde565b60405161082291906130a2565b60405180910390f35b34801561083757600080fd5b50610840611ea4565b005b34801561084e57600080fd5b50610869600480360381019061086491906130fa565b611f3d565b005b34801561087757600080fd5b50610880611fc3565b60405161088d91906130a2565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b891906135d6565b611feb565b6040516108ca9190612fff565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190613419565b61207f565b005b610904612176565b73ffffffffffffffffffffffffffffffffffffffff16610922611582565b73ffffffffffffffffffffffffffffffffffffffff1614610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f90613662565b60405180910390fd5b600081519050600b5481600b5461098f91906136b1565b116109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690613753565b60405180910390fd5b600a5481600b546109e091906136b1565b1115610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a18906137bf565b60405180910390fd5b60006001600b54610a3291906136b1565b905060005b82811015610a9957610a6e848281518110610a5557610a546137df565b5b60200260200101518284610a6991906136b1565b61217e565b600b6000815480929190610a819061380e565b91905055508080610a919061380e565b915050610a37565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd257507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c21575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610c3790613885565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6390613885565b8015610cb05780601f10610c8557610100808354040283529160200191610cb0565b820191906000526020600020905b815481529060010190602001808311610c9357829003601f168201915b5050505050905090565b6000610cc58261219c565b610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90613902565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d4a8261129a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db19061396e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dfa5750610df98133611feb565b5b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e30906139da565b60405180910390fd5b610e438383612208565b505050565b600063150b7a0260e01b905095945050505050565b6000600b54905090565b610e7133826122c1565b610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790613a46565b60405180910390fd5b610ebb83838361239f565b505050565b600860009054906101000a900460ff1681565b610edb612176565b73ffffffffffffffffffffffffffffffffffffffff16610ef9611582565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613662565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b610f74612176565b73ffffffffffffffffffffffffffffffffffffffff16610f92611582565b73ffffffffffffffffffffffffffffffffffffffff1614610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90613662565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b600c5481565b611013612176565b73ffffffffffffffffffffffffffffffffffffffff16611031611582565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613662565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516110b290613a97565b60006040518083038185875af1925050503d80600081146110ef576040519150601f19603f3d011682016040523d82523d6000602084013e6110f4565b606091505b5050905080611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613af8565b60405180910390fd5b5050565b61115783838360405180602001604052806000815250611cea565b505050565b6111658161129a565b73ffffffffffffffffffffffffffffffffffffffff16611183612176565b73ffffffffffffffffffffffffffffffffffffffff16146111a357600080fd5b6111ac816125fa565b50565b600d5481565b600b5481565b6111c3612176565b73ffffffffffffffffffffffffffffffffffffffff166111e1611582565b73ffffffffffffffffffffffffffffffffffffffff1614611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90613662565b60405180910390fd5b600860029054906101000a900460ff1615611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613b64565b60405180910390fd5b80600390816112969190613d30565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990613e4e565b60405180910390fd5b80915050919050565b600860029054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590613eba565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141d612176565b73ffffffffffffffffffffffffffffffffffffffff1661143b611582565b73ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613662565b60405180910390fd5b61149b600061270b565b565b600a5481565b6114ab612176565b73ffffffffffffffffffffffffffffffffffffffff166114c9611582565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613662565b60405180910390fd5b600860029054906101000a900460ff161561156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613b64565b60405180910390fd5b80600e908161157e9190613d30565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115b3612176565b73ffffffffffffffffffffffffffffffffffffffff166115d1611582565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613662565b60405180910390fd5b8060098190555050565b60606002805461164090613885565b80601f016020809104026020016040519081016040528092919081815260200182805461166c90613885565b80156116b95780601f1061168e576101008083540402835291602001916116b9565b820191906000526020600020905b81548152906001019060200180831161169c57829003601f168201915b5050505050905090565b60095481565b600060149054906101000a900460ff1615611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613f26565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600061173e612176565b9050600860009054906101000a900460ff1661178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613f92565b60405180910390fd5b6009548261179d9190613fb2565b3410156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690614058565b60405180910390fd5b600c54821115611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906140c4565b60405180910390fd5b600a54600b548361183591906136b1565b1115611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90614130565b60405180910390fd5b600d5482600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c491906136b1565b1115611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc906141c2565b60405180910390fd5b60006001600b5461191691906136b1565b905082600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196791906136b1565b9250508190555082600b600082825461198091906136b1565b9250508190555060005b838110156119ba576119a78382846119a291906136b1565b61217e565b80806119b29061380e565b91505061198a565b50505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f9061422e565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b399190612fff565b60405180910390a35050565b611b4d612176565b73ffffffffffffffffffffffffffffffffffffffff16611b6b611582565b73ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890613662565b60405180910390fd5b80600a8190555050565b611bd3612176565b73ffffffffffffffffffffffffffffffffffffffff16611bf1611582565b73ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613662565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b611c6c612176565b73ffffffffffffffffffffffffffffffffffffffff16611c8a611582565b73ffffffffffffffffffffffffffffffffffffffff1614611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790613662565b60405180910390fd5b80600c8190555050565b611cf433836122c1565b611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613a46565b60405180910390fd5b611d3f848484846127cf565b50505050565b611d4d612176565b73ffffffffffffffffffffffffffffffffffffffff16611d6b611582565b73ffffffffffffffffffffffffffffffffffffffff1614611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890613662565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b6060611de98261219c565b611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f9061429a565b60405180910390fd5b6060600860019054906101000a900460ff1615611e74576003611e4a8461282b565b600e604051602001611e5e93929190614379565b6040516020818303038152906040529050611e9b565b6003600e604051602001611e899291906143f6565b60405160208183030381529060405290505b80915050919050565b611eac612176565b73ffffffffffffffffffffffffffffffffffffffff16611eca611582565b73ffffffffffffffffffffffffffffffffffffffff1614611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790613662565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b611f45612176565b73ffffffffffffffffffffffffffffffffffffffff16611f63611582565b73ffffffffffffffffffffffffffffffffffffffff1614611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090613662565b60405180910390fd5b80600d8190555050565b60606003604051602001611fd79190614471565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612087612176565b73ffffffffffffffffffffffffffffffffffffffff166120a5611582565b73ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613662565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612161906144df565b60405180910390fd5b6121738161270b565b50565b600033905090565b61219882826040518060200160405280600081525061298b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661227b8361129a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122cc8261219c565b61230b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123029061454b565b60405180910390fd5b60006123168361129a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238557508373ffffffffffffffffffffffffffffffffffffffff1661236d84610cba565b73ffffffffffffffffffffffffffffffffffffffff16145b8061239657506123958185611feb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123bf8261129a565b73ffffffffffffffffffffffffffffffffffffffff1614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c906145b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90614623565b60405180910390fd5b61248f8383836129e6565b61249a600082612208565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ea9190614643565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254191906136b1565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006126058261129a565b9050612613816000846129e6565b61261e600083612208565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266e9190614643565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127da84848461239f565b6127e6848484846129eb565b612825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281c906146c3565b60405180910390fd5b50505050565b606060008203612872576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612986565b600082905060005b600082146128a457808061288d9061380e565b915050600a8261289d9190614712565b915061287a565b60008167ffffffffffffffff8111156128c0576128bf612d75565b5b6040519080825280601f01601f1916602001820160405280156128f25781602001600182028036833780820191505090505b5090505b6000851461297f5760018261290b9190614643565b9150600a8561291a9190614743565b603061292691906136b1565b60f81b81838151811061293c5761293b6137df565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129789190614712565b94506128f6565b8093505050505b919050565b6129958383612b6b565b6129a260008484846129eb565b6129e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d8906146c3565b60405180910390fd5b505050565b505050565b6000612a0c8473ffffffffffffffffffffffffffffffffffffffff16612d38565b15612b5e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612a5094939291906147c9565b6020604051808303816000875af1925050508015612a8c57506040513d601f19601f82011682018060405250810190612a89919061482a565b60015b612b0e573d8060008114612abc576040519150601f19603f3d011682016040523d82523d6000602084013e612ac1565b606091505b506000815103612b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afd906146c3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b63565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd1906148a3565b60405180910390fd5b612be38161219c565b15612c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1a9061490f565b60405180910390fd5b612c2f600083836129e6565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7f91906136b1565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dad82612d64565b810181811067ffffffffffffffff82111715612dcc57612dcb612d75565b5b80604052505050565b6000612ddf612d4b565b9050612deb8282612da4565b919050565b600067ffffffffffffffff821115612e0b57612e0a612d75565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e4c82612e21565b9050919050565b612e5c81612e41565b8114612e6757600080fd5b50565b600081359050612e7981612e53565b92915050565b6000612e92612e8d84612df0565b612dd5565b90508083825260208201905060208402830185811115612eb557612eb4612e1c565b5b835b81811015612ede5780612eca8882612e6a565b845260208401935050602081019050612eb7565b5050509392505050565b600082601f830112612efd57612efc612d5f565b5b8135612f0d848260208601612e7f565b91505092915050565b600060208284031215612f2c57612f2b612d55565b5b600082013567ffffffffffffffff811115612f4a57612f49612d5a565b5b612f5684828501612ee8565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f9481612f5f565b8114612f9f57600080fd5b50565b600081359050612fb181612f8b565b92915050565b600060208284031215612fcd57612fcc612d55565b5b6000612fdb84828501612fa2565b91505092915050565b60008115159050919050565b612ff981612fe4565b82525050565b60006020820190506130146000830184612ff0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613054578082015181840152602081019050613039565b83811115613063576000848401525b50505050565b60006130748261301a565b61307e8185613025565b935061308e818560208601613036565b61309781612d64565b840191505092915050565b600060208201905081810360008301526130bc8184613069565b905092915050565b6000819050919050565b6130d7816130c4565b81146130e257600080fd5b50565b6000813590506130f4816130ce565b92915050565b6000602082840312156131105761310f612d55565b5b600061311e848285016130e5565b91505092915050565b61313081612e41565b82525050565b600060208201905061314b6000830184613127565b92915050565b6000806040838503121561316857613167612d55565b5b600061317685828601612e6a565b9250506020613187858286016130e5565b9150509250929050565b600080fd5b60008083601f8401126131ac576131ab612d5f565b5b8235905067ffffffffffffffff8111156131c9576131c8613191565b5b6020830191508360018202830111156131e5576131e4612e1c565b5b9250929050565b60008060008060006080868803121561320857613207612d55565b5b600061321688828901612e6a565b955050602061322788828901612e6a565b9450506040613238888289016130e5565b935050606086013567ffffffffffffffff81111561325957613258612d5a565b5b61326588828901613196565b92509250509295509295909350565b61327d81612f5f565b82525050565b60006020820190506132986000830184613274565b92915050565b6132a7816130c4565b82525050565b60006020820190506132c2600083018461329e565b92915050565b6000806000606084860312156132e1576132e0612d55565b5b60006132ef86828701612e6a565b935050602061330086828701612e6a565b9250506040613311868287016130e5565b9150509250925092565b600080fd5b600067ffffffffffffffff82111561333b5761333a612d75565b5b61334482612d64565b9050602081019050919050565b82818337600083830152505050565b600061337361336e84613320565b612dd5565b90508281526020810184848401111561338f5761338e61331b565b5b61339a848285613351565b509392505050565b600082601f8301126133b7576133b6612d5f565b5b81356133c7848260208601613360565b91505092915050565b6000602082840312156133e6576133e5612d55565b5b600082013567ffffffffffffffff81111561340457613403612d5a565b5b613410848285016133a2565b91505092915050565b60006020828403121561342f5761342e612d55565b5b600061343d84828501612e6a565b91505092915050565b61344f81612fe4565b811461345a57600080fd5b50565b60008135905061346c81613446565b92915050565b6000806040838503121561348957613488612d55565b5b600061349785828601612e6a565b92505060206134a88582860161345d565b9150509250929050565b600067ffffffffffffffff8211156134cd576134cc612d75565b5b6134d682612d64565b9050602081019050919050565b60006134f66134f1846134b2565b612dd5565b9050828152602081018484840111156135125761351161331b565b5b61351d848285613351565b509392505050565b600082601f83011261353a57613539612d5f565b5b813561354a8482602086016134e3565b91505092915050565b6000806000806080858703121561356d5761356c612d55565b5b600061357b87828801612e6a565b945050602061358c87828801612e6a565b935050604061359d878288016130e5565b925050606085013567ffffffffffffffff8111156135be576135bd612d5a565b5b6135ca87828801613525565b91505092959194509250565b600080604083850312156135ed576135ec612d55565b5b60006135fb85828601612e6a565b925050602061360c85828601612e6a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061364c602083613025565b915061365782613616565b602082019050919050565b6000602082019050818103600083015261367b8161363f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136bc826130c4565b91506136c7836130c4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136fc576136fb613682565b5b828201905092915050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b600061373d601383613025565b915061374882613707565b602082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b60006137a9601183613025565b91506137b482613773565b602082019050919050565b600060208201905081810360008301526137d88161379c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613819826130c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361384b5761384a613682565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061389d57607f821691505b6020821081036138b0576138af613856565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b60006138ec602083613025565b91506138f7826138b6565b602082019050919050565b6000602082019050818103600083015261391b816138df565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b6000613958601e83613025565b915061396382613922565b602082019050919050565b600060208201905081810360008301526139878161394b565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b60006139c4601f83613025565b91506139cf8261398e565b602082019050919050565b600060208201905081810360008301526139f3816139b7565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b6000613a30601c83613025565b9150613a3b826139fa565b602082019050919050565b60006020820190508181036000830152613a5f81613a23565b9050919050565b600081905092915050565b50565b6000613a81600083613a66565b9150613a8c82613a71565b600082019050919050565b6000613aa282613a74565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613ae2601883613025565b9150613aed82613aac565b602082019050919050565b60006020820190508181036000830152613b1181613ad5565b9050919050565b7f5552492063616e6e6f74206265206368616e6765640000000000000000000000600082015250565b6000613b4e601583613025565b9150613b5982613b18565b602082019050919050565b60006020820190508181036000830152613b7d81613b41565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613be67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ba9565b613bf08683613ba9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c2d613c28613c23846130c4565b613c08565b6130c4565b9050919050565b6000819050919050565b613c4783613c12565b613c5b613c5382613c34565b848454613bb6565b825550505050565b600090565b613c70613c63565b613c7b818484613c3e565b505050565b5b81811015613c9f57613c94600082613c68565b600181019050613c81565b5050565b601f821115613ce457613cb581613b84565b613cbe84613b99565b81016020851015613ccd578190505b613ce1613cd985613b99565b830182613c80565b50505b505050565b600082821c905092915050565b6000613d0760001984600802613ce9565b1980831691505092915050565b6000613d208383613cf6565b9150826002028217905092915050565b613d398261301a565b67ffffffffffffffff811115613d5257613d51612d75565b5b613d5c8254613885565b613d67828285613ca3565b600060209050601f831160018114613d9a5760008415613d88578287015190505b613d928582613d14565b865550613dfa565b601f198416613da886613b84565b60005b82811015613dd057848901518255600182019150602085019450602081019050613dab565b86831015613ded5784890151613de9601f891682613cf6565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000613e38601e83613025565b9150613e4382613e02565b602082019050919050565b60006020820190508181036000830152613e6781613e2b565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000613ea4602083613025565b9150613eaf82613e6e565b602082019050919050565b60006020820190508181036000830152613ed381613e97565b9050919050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b6000613f10601f83613025565b9150613f1b82613eda565b602082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f4d696e74206e6f74204f70656e21000000000000000000000000000000000000600082015250565b6000613f7c600e83613025565b9150613f8782613f46565b602082019050919050565b60006020820190508181036000830152613fab81613f6f565b9050919050565b6000613fbd826130c4565b9150613fc8836130c4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561400157614000613682565b5b828202905092915050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b6000614042601283613025565b915061404d8261400c565b602082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f41626f7665205472786e205468726573686f6c64210000000000000000000000600082015250565b60006140ae601583613025565b91506140b982614078565b602082019050919050565b600060208201905081810360008301526140dd816140a1565b9050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b600061411a601e83613025565b9150614125826140e4565b602082019050919050565b600060208201905081810360008301526141498161410d565b9050919050565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006141ac602183613025565b91506141b782614150565b604082019050919050565b600060208201905081810360008301526141db8161419f565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614218601983613025565b9150614223826141e2565b602082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6000614284601d83613025565b915061428f8261424e565b602082019050919050565b600060208201905081810360008301526142b381614277565b9050919050565b600081905092915050565b600081546142d281613885565b6142dc81866142ba565b945060018216600081146142f7576001811461430c5761433f565b60ff198316865281151582028601935061433f565b61431585613b84565b60005b8381101561433757815481890152600182019150602081019050614318565b838801955050505b50505092915050565b60006143538261301a565b61435d81856142ba565b935061436d818560208601613036565b80840191505092915050565b600061438582866142c5565b91506143918285614348565b915061439d82846142c5565b9150819050949350505050565b7f6d79737465727900000000000000000000000000000000000000000000000000600082015250565b60006143e06007836142ba565b91506143eb826143aa565b600782019050919050565b600061440282856142c5565b915061440d826143d3565b915061441982846142c5565b91508190509392505050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b600061445b600d836142ba565b915061446682614425565b600d82019050919050565b600061447d82846142c5565b91506144888261444e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b60006144c9602083613025565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000614535602083613025565b9150614540826144ff565b602082019050919050565b6000602082019050818103600083015261456481614528565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b60006145a1601c83613025565b91506145ac8261456b565b602082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b600061460d601b83613025565b9150614618826145d7565b602082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b600061464e826130c4565b9150614659836130c4565b92508282101561466c5761466b613682565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b60006146ad601a83613025565b91506146b882614677565b602082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061471d826130c4565b9150614728836130c4565b925082614738576147376146e3565b5b828204905092915050565b600061474e826130c4565b9150614759836130c4565b925082614769576147686146e3565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061479b82614774565b6147a5818561477f565b93506147b5818560208601613036565b6147be81612d64565b840191505092915050565b60006080820190506147de6000830187613127565b6147eb6020830186613127565b6147f8604083018561329e565b818103606083015261480a8184614790565b905095945050505050565b60008151905061482481612f8b565b92915050565b6000602082840312156148405761483f612d55565b5b600061484e84828501614815565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061488d602083613025565b915061489882614857565b602082019050919050565b600060208201905081810360008301526148bc81614880565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006148f9601c83613025565b9150614904826148c3565b602082019050919050565b60006020820190508181036000830152614928816148ec565b905091905056fea264697066735822122009fdd556ccf311baebaada33c087ef303e1c7f681f63dcd51446d9f2845982c764736f6c634300080f0033
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.